lingo求解0-1整数规划
<p>说明:t为支渠灌水延续时间,i为轮灌分组每组支渠数,j为出水口数,ai为轮期<br/>model:<br/> sets:<br/> wh/1..3/:ai;<br/> vd/1..8/:dj;<br/> links(wh,vd):t,x;<br/> endsets</p><p> data:<br/> ai=6,6,6;<br/> dj=1,1,1,1,1,1,1,1;<br/> t=0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5<br/> 0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5<br/> 0.8,2.13,2.4,1.72,2.05,2.43,2.05,2.5;<br/> enddata<br/><br/>
<a href="mailto:min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j">min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j</a>)))<br/>
<a href="mailto:+@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(3,j)*x(3,j</a>)))<br/>
<a href="mailto:+@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(3,j)*x(3,j</a>)));<br/>!目标函数:各轮灌组的灌水时间之差的绝对值之和最小,即灌水时间尽量均匀<br/> @for(wh(i):@sum(vd(j):t(i,j)*x(i,j))<=ai);<br/>!轮期约束:每个轮灌组的灌水时间小于轮期<br/> @for(vd(j):@sum(wh(i):x(i,j))=dj);<br/>!灌水一次性约束:每个灌水口在轮期内只开一次<br/> @for(links:@bin(x));<br/>!0-1约束</p><p>end<br/>请教:为什么算8条渠时可以在几秒中就能得到计算结果,并且和用EXCEL的优化结果相同;而31条支渠曾经计算过十几个小时也没出结果,计算还不断进行,而且在计算时solver status中extend solver status中的best和obj bound的值一直差别很大,其中best的值已稳定在9,而obj bound却很小,甚至小11个数量级。不知道是程序问题,还是lingo本身求解时参数设定的问题?</p> <p>现在的程序是8个的?我计算了一下很快就有结果了!</p>
31条支渠0-1整数规划
<p>model:</p><p> sets:<br/> wh/1..6/:ai;<br/> vd/1..31/:dj;<br/> links(wh,vd):t,x;<br/> endsets</p><p> data:<br/> ai=96,96,96,96,96,96;<br/> 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;<br/> 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<br/> 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<br/> 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<br/> 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<br/> 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<br/> 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;<br/> enddata<br/><br/>
<a href="mailto:min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j">min=@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(2,j)*x(2,j</a>)))<br/>
<a href="mailto:+@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(3,j)*x(3,j</a>)))<br/>
<a href="mailto:+@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(4,j)*x(4,j</a>)))<br/>
<a href="mailto:+@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(5,j)*x(5,j</a>)))<br/>
<a href="mailto:+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(6,j)*x(6,j">+@abs(@sum(vd(j):t(1,j)*x(1,j))-@sum(vd(j):t(6,j)*x(6,j</a>)))<br/>
<a href="mailto:+@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(3,j)*x(3,j</a>)))<br/>
<a href="mailto:+@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(4,j)*x(4,j</a>)))<br/>
<a href="mailto:+@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(5,j)*x(5,j</a>)))<br/>
<a href="mailto:+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(6,j)*x(6,j">+@abs(@sum(vd(j):t(2,j)*x(2,j))-@sum(vd(j):t(6,j)*x(6,j</a>)))<br/>
<a href="mailto:+@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(4,j)*x(4,j</a>)))<br/>
<a href="mailto:+@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(5,j)*x(5,j</a>)))<br/>
<a href="mailto:+@abs(@sum(vd(j):t(3,j)*x(3,j))-@sum(vd(j):t(6,j)*x(6,j">+@abs(@sum(vd(j):t(3,j)*x(3,j))-@sum(vd(j):t(6,j)*x(6,j</a>)))<br/>
<a href="mailto:+@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(5,j)*x(5,j</a>)))<br/>
<a href="mailto:+@abs(@sum(vd(j):t(4,j)*x(4,j))-@sum(vd(j):t(6,j)*x(6,j">+@abs(@sum(vd(j):t(4,j)*x(4,j))-@sum(vd(j):t(6,j)*x(6,j</a>)))<br/>
<a href="mailto:+@abs(@sum(vd(j):t(5,j)*x(5,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</a>)));<br/> @for(wh(i):@sum(vd(j):t(i,j)*x(i,j))<=ai);<br/> @for(vd(j):@sum(wh(i):x(i,j))=dj);<br/> @for(links:@bin(x));</p><p>end<br/>谢谢啊!麻烦在帮忙看看这个,这是31条渠的!不知道是什么原因</p> 只等的接分 学习了!!!!!!!!!!!!!! 学习了.......... 不懂。。。。。
页:
[1]