数学建模社区-数学中国

标题: 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)

把源代码发上来!!!.PNG


作者: liwenhui    时间: 2015-9-7 10:33
  1. @for(xinde(i):
  2.         @for(xinde(j):
  3.                 a11(i,j)=A(i,j)+H(i,j);
  4.                 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