选址问题代码求纠错
Min Z=∑∑CijXijSt
6
∑Xjj=2................................(1)
J=1
6
∑Xij=1,1<i<6......................(2)
J=1
Xjj-Xij≥0,对于1<i,j<6且i≠j.............(3)
X为0/1变量......................................(4)
model:
sets:
ZD/1..6/;
links(ZD,ZD):c,x;
endsets
data:
c=
0 6 6 78 3 6
1 0 4 5 4 6
2 1 0 6 2 9
3 2 1 0 3 9
4 3 2 7 0 9
5 4 3 5 6 0
;
enddata
min=@sum(links(i,j):c(i,j)*x(i,j)); !Objective Function;
st
@for(@sum(ZD(j):x(j,j))=2);
@for(ZD(i):@sum(ZD(j):x(i,j))=1);
@for(ZD(i,j):i#ne#j:x(j,j)-x(i,j)>=0);
@for(links:@bin(x)); !Restrict x to be 0-1;
end
你的约束条件部分似乎有歧义,不能很好地理解你的意思。按照你贴出来的模型,猜想你想实现的:
约束条件1:表示矩阵X的对角线之和(即方阵的迹)为2;
约束条件2:表示矩阵X每行有且只有1个值为1.
约束条件3:表示矩阵x每行上面对角线元素减去非对角线元素的差必须大于等于0.
由此得到的程序是:model:
sets:
ZD/1..6/;
links(ZD,ZD):c,x;
endsets
data:
c=
0 6 6 78 3 6
1 0 4 5 4 6
2 1 0 6 2 9
3 2 1 0 3 9
4 3 2 7 0 9
5 4 3 5 6 0
;
enddata
min=@sum(links(i,j):c(i,j)*x(i,j)); !Objective Function;
@sum(links(i,j)|i #eq# j:x(i,j))=2;
@for(ZD(i):@sum(ZD(j):x(i,j))=1);
@for(ZD(i):@for(ZD(j)|j #ne# i:x(i,i)-x(i,j)>0));
@for(links(i,j):@bin(x(i,j))); !Restrict x to be 0-1;
end这个LINGO运行下来没有可行解。这是很显然的。因为约束条件1,2,3之间似乎存在矛盾,无法同时满足,你可以自己推敲一下。
liwenhui 发表于 2014-12-29 14:56 static/image/common/back.gif
你的约束条件部分似乎有歧义,不能很好地理解你的意思。按照你贴出来的模型,猜想你想实现的:
约束条件1: ...
非常感谢你十分到位的回复,我的问题也成功解决了。
情况是这样,这个模型中xjj求和=2表示选取两个服务点,也就是只有两个对角线能取值为1;其他取值为1的点则表示服务点能在有限的最优距离内对其进行服务,所以从实际选址意义上来说不矛盾。可能从数理推断上来说存在矛盾。
无论如何,谢谢。
盐田港 发表于 2015-1-13 15:43 static/image/common/back.gif
非常感谢你十分到位的回复,我的问题也成功解决了。
情况是这样,这个模型中xjj求和=2表示选取两个服务点 ...
好的。不客气。
页:
[1]