数学建模社区-数学中国

标题: lingo求解0-1整数规划 [打印本页]

作者: wy82    时间: 2008-6-10 21:12
标题: lingo求解0-1整数规划

说明:t为支渠灌水延续时间,i为轮灌分组每组支渠数,j为出水口数,ai为轮期
model:
sets:
wh/1..3/:ai;
vd/1..8/:dj;
links(wh,vd):t,x;
endsets

data:
ai=6,6,6;
dj=1,1,1,1,1,1,1,1;
t=0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5
0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5
0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5;
enddata

min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j)))
+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(3,j)*x(3,j)))
+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(3,j)*x(3,j)));
!目标函数:各轮灌组的灌水时间之差的绝对值之和最小,即灌水时间尽量均匀
@for(wh(i)sum(vd(j):t(i,j)*x(i,j))<=ai);
!轮期约束:每个轮灌组的灌水时间小于轮期
@for(vd(j)sum(wh(i):x(i,j))=dj);
!灌水一次性约束:每个灌水口在轮期内只开一次
@for(linksbin(x));
!0-1约束

end
请教:为什么算8条渠时可以在几秒中就能得到计算结果,并且和用EXCEL的优化结果相同;而31条支渠曾经计算过十几个小时也没出结果,计算还不断进行,而且在计算时solver status中extend solver status中的best和obj bound的值一直差别很大,其中best的值已稳定在9,而obj bound却很小,甚至小11个数量级。不知道是程序问题,还是lingo本身求解时参数设定的问题?

[em06][em06]
作者: madio    时间: 2008-6-10 23:03

现在的程序是8个的?我计算了一下很快就有结果了!


作者: wy82    时间: 2008-6-11 18:57
标题: 31条支渠0-1整数规划

model:

sets:
wh/1..6/:ai;
vd/1..31/:dj;
links(wh,vd):t,x;
endsets

data:
ai=96,96,96,96,96,96;
dj=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
t=10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8
10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8
10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8
10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8
10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8
10,16,10,13,15,10,10,10,10,10,10,15,13,17,7,7,15,15,15,15,8,15,15,8,8,8,8,8,8,8,8;
enddata

min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j)))
+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(3,j)*x(3,j)))
+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(4,j)*x(4,j)))
+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(5,j)*x(5,j)))
+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(6,j)*x(6,j)))
+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(3,j)*x(3,j)))
+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(4,j)*x(4,j)))
+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(5,j)*x(5,j)))
+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(6,j)*x(6,j)))
+@abs(@sum(vd(j):t(3,j)*x(3,j))-@sum(vd(j):t(4,j)*x(4,j)))
+@abs(@sum(vd(j):t(3,j)*x(3,j))-@sum(vd(j):t(5,j)*x(5,j)))
+@abs(@sum(vd(j):t(3,j)*x(3,j))-@sum(vd(j):t(6,j)*x(6,j)))
+@abs(@sum(vd(j):t(4,j)*x(4,j))-@sum(vd(j):t(5,j)*x(5,j)))
+@abs(@sum(vd(j):t(4,j)*x(4,j))-@sum(vd(j):t(6,j)*x(6,j)))
+@abs(@sum(vd(j):t(5,j)*x(5,j))-@sum(vd(j):t(6,j)*x(6,j)));
@for(wh(i)sum(vd(j):t(i,j)*x(i,j))<=ai);
@for(vd(j)sum(wh(i):x(i,j))=dj);
@for(linksbin(x));

end
谢谢啊!麻烦在帮忙看看这个,这是31条渠的!不知道是什么原因


作者: LINMAT    时间: 2009-1-4 21:52
只等的接分
作者: gcj1023    时间: 2010-5-12 14:17
学习了!!!!!!!!!!!!!!
作者: 1059974843    时间: 2010-9-5 20:59
学习了..........
作者: 微笑、没问题    时间: 2013-8-19 00:05
不懂。。。。。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5