数学建模社区-数学中国
标题:
lingo的0-1非线性规划问题,不知道哪错了
[打印本页]
作者:
alunaaa
时间:
2015-9-6 20:43
标题:
lingo的0-1非线性规划问题,不知道哪错了
model:
sets:
xinde/1..5/:;
lu(xinde,xinde):H,w,A,L,r,a11,a22;
endsets
data:
N=4;
M=1;
A=0 0 0 0 0
1 0 0 0 0
1 0 0 0 0
1 0 1 0 0
0 0 0 0 0;
enddata
!约束条件;
@for(xinde(i)
for(xinde(j)
bin(H(i,j))));!自变量H为0-1矩阵;
!确保自变量H的每一条边的行和列的和都为1;
@for(xinde(i):
@sum(xinde(j):H(i,j))=1);
@for(xinde(j):
@sum(xinde(i):H(i,j))=1);
!对H矩阵进行运算,使得编程L矩阵;
!令a11矩阵=H矩阵加上A矩阵后的0-1矩阵;
@for(xinde(i):
@for(xinde(j):
a11(i,j)=A(i,j)+H(i,j);
a11(i,j)=@if(a11(i,j)#eq#2,1,a11(i,j))));!
!将a11矩阵的0元素换成(N+M)的平方,并赋值给a22矩阵;
@for(xinde(i):
@for(xinde(j):
a11(i,j)=@if(a11(i,j)#eq#0,(N+M)*(N+M),a11(i,j));
a22(i,j)=a11(j,i);
r(i,j)=0));
!计算a22矩阵各个节点之间的最短距离,并赋给a22,最短路径赋给r矩阵;
@for(xinde(k):
@for(xinde(i):
@for(xinde(j):
tm=@smin(a22(i,j),a22(i,k)+a22(k,j));
r(i,j)=@if(a22(i,j)#gt# tm,k,r(i,j));
a22(i,j)=tm)));
!将r矩阵距离大于(N+M)的平方的,化成0;
@for(xinde(i):
@for(xinde(j):
r(i,j)=@if(a22(i,j)#ge#(N+M)*(M+N),0,r(i,j));
L(i,j)=0));
!将r矩阵转化为L矩阵;
@for(xinde(i):
@for(xinde(j):
L(i,j)=@if(r(i,j)#eq#0,0,L(i,j));
L(i,j)=@if(r(i,j)#eq#j,L(i,j)+1,L(i,j));
L(i,r(i,j))=@if(r(i,j)#ne#0 #and# r(i,j)#ne#j,L(i,r(i,j))+1,L(i,r(i,j)));
L(r(i,j),j)=@if(r(i,j)#ne#0 #and# r(i,j)#ne#j,L(r(i,j),j)+1,L(r(i,j),j))));
!目标函数;
min=@sum(lu(i,j)
(i,j)*A(i,j));
end
作者:
森之张卫东
时间:
2015-9-6 23:08
把原代码发上来!!!
把源代码发上来!!!.PNG
(8.82 KB, 下载次数: 253)
2015-9-6 23:08 上传
点击文件名下载附件
作者:
liwenhui
时间:
2015-9-7 10:33
@for(xinde(i):
@for(xinde(j):
a11(i,j)=A(i,j)+H(i,j);
a11(i,j)=@if(a11(i,j)#eq#2,1,a11(i,j))))
复制代码
这段的逻辑有问题。H的所有元素都是未知量,而这段的语句的意思是把未知量赋值给别的量。那么问题来了,H(i,j)是未知的(只知道它或为0或为1),那么在后面的@if的判定条件中,LINGO怎么知道
a11(i,j)#eq#2
成立还是不成立呢?(H是未知的,LINGO无法判断)。所以在此处就出错。
我能理解你想表达的意思,但我此刻可能也想不出合适的解决办法。自己思考,应该有解决方案的。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5