跪求高手化简lingo程序
<P>小弟愚笨,对lingo的集合和循环都不怎么懂,求高手用简明的语句化简一下下面的程序,多谢多谢了。因为愚笨,程序有点长,麻烦看了。</P>
<P>model:
! 建立选择变量集合,a,b,c,d分别为从第1,2,3,4秒开始传输的变量,所有变量都只能是1或者0。1表示传输,0表示不传输;
sets:
a/1..27/:shu1;
b/1..27/:shu2;
c/1..27/:shu3;
d/1..27/:shu4;
e/1..27/:shu5;
endsets
min=z;
!总时间最小的约束条件:应为最后一个开始传输的文件结束的时刻。即总时间z应不小于每个文件传输结束的时刻;
@for(a(i):shu1(i)*1+1<=z);
@for(b(i):shu2(i)*2+1<=z);
@for(c(i):shu3(i)*3+1<=z);
@for(d(i):shu4(i)*4+1<=z);
@for(e(i):shu5(i)*5+1<=z);</P>
<P>!规定所有变量为0-1变量;
@for(a:@bin(shu1));
@for(b:@bin(shu2));
@for(c:@bin(shu3));
@for(d:@bin(shu4));
@for(e:@bin(shu5));
!约束条件:相邻的边不能同时进行传输,所以他们之和最多为一;
shu1(17)+shu1(18)<=1;
shu1(17)+shu1(16)<=1;
shu1(16)+shu1(18)<=1;
shu1(16)+shu1(14)<=1;
shu1(16)+shu1(15)<=1;
shu1(15)+shu1(14)<=1;
shu1(14)+shu1(13)<=1;
shu1(14)+shu1(19)<=1;
shu1(13)+shu1(19)<=1;
shu1(7)+shu1(13)<=1;
shu1(13)+shu1(8)<=1;
shu1(8)+shu1(7)<=1;
shu1(8)+shu1(9)<=1;
shu1(8)+shu1(10)<=1;
shu1(9)+shu1(10)<=1;
shu1(10)+shu1(11)<=1;
shu1(10)+shu1(12)<=1;
shu1(11)+shu1(12)<=1;
shu1(5)+shu1(6)<=1;
shu1(5)+shu1(7)<=1;
shu1(6)+shu1(7)<=1;
shu1(5)+shu1(4)<=1;
shu1(5)+shu1(3)<=1;
shu1(3)+shu1(4)<=1;
shu1(1)+shu1(2)<=1;
shu1(1)+shu1(6)<=1;
shu1(2)+shu1(6)<=1;
shu1(19)+shu1(20)<=1;
shu1(19)+shu1(25)<=1;
shu1(25)+shu1(20)<=1;
shu1(25)+shu1(26)<=1;
shu1(25)+shu1(21)<=1;
shu1(21)+shu1(26)<=1;
shu1(20)+shu1(21)<=1;
shu1(20)+shu1(22)<=1;
shu1(21)+shu1(22)<=1;
shu1(21)+shu1(23)<=1;
shu1(21)+shu1(24)<=1;
shu1(23)+shu1(24)<=1;</P>
<P>shu2(17)+shu2(18)<=1;
shu2(17)+shu2(16)<=1;
shu2(16)+shu2(18)<=1;
shu2(16)+shu2(14)<=1;
shu2(16)+shu2(15)<=1;
shu2(15)+shu2(14)<=1;
shu2(14)+shu2(13)<=1;
shu2(14)+shu2(19)<=1;
shu2(13)+shu2(19)<=1;
shu2(7)+shu2(13)<=1;
shu2(13)+shu2(8)<=1;
shu2(8)+shu2(7)<=1;
shu2(8)+shu2(9)<=1;
shu2(8)+shu2(10)<=1;
shu2(9)+shu2(10)<=1;
shu2(10)+shu2(11)<=1;
shu2(10)+shu2(12)<=1;
shu2(11)+shu2(12)<=1;
shu2(5)+shu2(6)<=1;
shu2(5)+shu2(7)<=1;
shu2(6)+shu2(7)<=1;
shu2(5)+shu2(4)<=1;
shu2(5)+shu2(3)<=1;
shu2(3)+shu2(4)<=1;
shu2(1)+shu2(2)<=1;
shu2(1)+shu2(6)<=1;
shu2(2)+shu2(6)<=1;
shu2(19)+shu2(20)<=1;
shu2(19)+shu2(25)<=1;
shu2(25)+shu2(20)<=1;
shu2(25)+shu2(26)<=1;
shu2(25)+shu2(21)<=1;
shu2(21)+shu2(26)<=1;
shu2(20)+shu2(21)<=1;
shu2(20)+shu2(22)<=1;
shu2(21)+shu2(22)<=1;
shu2(21)+shu2(23)<=1;
shu2(21)+shu2(24)<=1;
shu2(23)+shu2(24)<=1;</P>
<P>
shu3(17)+shu3(18)<=1;
shu3(17)+shu3(16)<=1;
shu3(16)+shu3(18)<=1;
shu3(16)+shu3(14)<=1;
shu3(16)+shu3(15)<=1;
shu3(15)+shu3(14)<=1;
shu3(14)+shu3(13)<=1;
shu3(14)+shu3(19)<=1;
shu3(13)+shu3(19)<=1;
shu3(7)+shu3(13)<=1;
shu3(13)+shu3(8)<=1;
shu3(8)+shu3(7)<=1;
shu3(8)+shu3(9)<=1;
shu3(8)+shu3(10)<=1;
shu3(9)+shu3(10)<=1;
shu3(10)+shu3(11)<=1;
shu3(10)+shu3(12)<=1;
shu3(11)+shu3(12)<=1;
shu3(5)+shu3(6)<=1;
shu3(5)+shu3(7)<=1;
shu3(6)+shu3(7)<=1;
shu3(5)+shu3(4)<=1;
shu3(5)+shu3(3)<=1;
shu3(3)+shu3(4)<=1;
shu3(1)+shu3(2)<=1;
shu3(1)+shu3(6)<=1;
shu3(2)+shu3(6)<=1;
shu3(19)+shu3(20)<=1;
shu3(19)+shu3(25)<=1;
shu3(25)+shu3(20)<=1;
shu3(25)+shu3(26)<=1;
shu3(25)+shu3(21)<=1;
shu3(21)+shu3(26)<=1;
shu3(20)+shu3(21)<=1;
shu3(20)+shu3(22)<=1;
shu3(21)+shu3(22)<=1;
shu3(21)+shu3(23)<=1;
shu3(21)+shu3(24)<=1;
shu3(23)+shu3(24)<=1;</P>
<P>
shu4(17)+shu4(18)<=1;
shu4(17)+shu4(16)<=1;
shu4(16)+shu4(18)<=1;
shu4(16)+shu4(14)<=1;
shu4(16)+shu4(15)<=1;
shu4(15)+shu4(14)<=1;
shu4(14)+shu4(13)<=1;
shu4(14)+shu4(19)<=1;
shu4(13)+shu4(19)<=1;
shu4(7)+shu4(13)<=1;
shu4(13)+shu4(8)<=1;
shu4(8)+shu4(7)<=1;
shu4(8)+shu4(9)<=1;
shu4(8)+shu4(10)<=1;
shu4(9)+shu4(10)<=1;
shu4(10)+shu4(11)<=1;
shu4(10)+shu4(12)<=1;
shu4(11)+shu4(12)<=1;
shu4(5)+shu4(6)<=1;
shu4(5)+shu4(7)<=1;
shu4(6)+shu4(7)<=1;
shu4(5)+shu4(4)<=1;
shu4(5)+shu4(3)<=1;
shu4(3)+shu4(4)<=1;
shu4(1)+shu4(2)<=1;
shu4(1)+shu4(6)<=1;
shu4(2)+shu4(6)<=1;
shu4(19)+shu4(20)<=1;
shu4(19)+shu4(25)<=1;
shu4(25)+shu4(20)<=1;
shu4(25)+shu4(26)<=1;
shu4(25)+shu4(21)<=1;
shu4(21)+shu4(26)<=1;
shu4(20)+shu4(21)<=1;
shu4(20)+shu4(22)<=1;
shu4(21)+shu4(22)<=1;
shu4(21)+shu4(23)<=1;
shu4(21)+shu4(24)<=1;
shu4(23)+shu4(24)<=1;</P>
<P>shu5(17)+shu5(18)<=1;
shu5(17)+shu5(16)<=1;
shu5(16)+shu5(18)<=1;
shu5(16)+shu5(14)<=1;
shu5(16)+shu5(15)<=1;
shu5(15)+shu5(14)<=1;
shu5(14)+shu5(13)<=1;
shu5(14)+shu5(19)<=1;
shu5(13)+shu5(19)<=1;
shu5(7)+shu5(13)<=1;
shu5(13)+shu5(8)<=1;
shu5(8)+shu5(7)<=1;
shu5(8)+shu5(9)<=1;
shu5(8)+shu5(10)<=1;
shu5(9)+shu5(10)<=1;
shu5(10)+shu5(11)<=1;
shu5(10)+shu5(12)<=1;
shu5(11)+shu5(12)<=1;
shu5(5)+shu5(6)<=1;
shu5(5)+shu5(7)<=1;
shu5(6)+shu5(7)<=1;
shu5(5)+shu5(4)<=1;
shu5(5)+shu5(3)<=1;
shu5(3)+shu5(4)<=1;
shu5(1)+shu5(2)<=1;
shu5(1)+shu5(6)<=1;
shu5(2)+shu5(6)<=1;
shu5(19)+shu5(20)<=1;
shu5(19)+shu5(25)<=1;
shu5(25)+shu5(20)<=1;
shu5(25)+shu5(26)<=1;
shu5(25)+shu5(21)<=1;
shu5(21)+shu5(26)<=1;
shu5(20)+shu5(21)<=1;
shu5(20)+shu5(22)<=1;
shu5(21)+shu5(22)<=1;
shu5(21)+shu5(23)<=1;
shu5(21)+shu5(24)<=1;
shu5(23)+shu5(24)<=1;</P>
<P>!约束条件:每个边实际上只能被用一次,即不管它在第几秒开始传输,只能有一个传输的机会;
shu1(1)+shu2(1)+shu3(1)+shu4(1)+shu5(1)=1;
shu1(2)+shu2(2)+shu3(2)+shu4(2)+shu5(2)=1;
shu1(3)+shu2(3)+shu3(3)+shu4(3)+shu5(3)=1;
shu1(4)+shu2(4)+shu3(4)+shu4(4)+shu5(4)=1;
shu1(5)+shu2(5)+shu3(5)+shu4(5)+shu5(5)=1;
shu1(6)+shu2(6)+shu3(6)+shu4(6)+shu5(6)=1;
shu1(7)+shu2(7)+shu3(7)+shu4(7)+shu5(7)=1;
shu1(8)+shu2(8)+shu3(8)+shu4(8)+shu5(8)=1;
shu1(9)+shu2(9)+shu3(9)+shu4(9)+shu5(9)=1;
shu1(10)+shu2(10)+shu3(10)+shu4(10)+shu5(10)=1;
shu1(11)+shu2(11)+shu3(11)+shu4(11)+shu5(11)=1;
shu1(12)+shu2(12)+shu3(12)+shu4(12)+shu5(12)=1;
shu1(13)+shu2(13)+shu3(13)+shu4(13)+shu5(13)=1;
shu1(14)+shu2(14)+shu3(14)+shu4(14)+shu5(14)=1;
shu1(15)+shu2(15)+shu3(15)+shu4(15)+shu5(15)=1;
shu1(16)+shu2(16)+shu3(16)+shu4(16)+shu5(16)=1;
shu1(17)+shu2(17)+shu3(17)+shu4(17)+shu5(17)=1;
shu1(18)+shu2(18)+shu3(18)+shu4(18)+shu5(18)=1;
shu1(19)+shu2(19)+shu3(19)+shu4(19)+shu5(19)=1;
shu1(20)+shu2(20)+shu3(20)+shu4(20)+shu5(20)=1;
shu1(21)+shu2(21)+shu3(21)+shu4(21)+shu5(21)=1;
shu1(22)+shu2(22)+shu3(22)+shu4(22)+shu5(22)=1;
shu1(23)+shu2(23)+shu3(23)+shu4(23)+shu5(23)=1;
shu1(24)+shu2(24)+shu3(24)+shu4(24)+shu5(24)=1;
shu1(25)+shu2(25)+shu3(25)+shu4(25)+shu5(25)=1;
shu1(26)+shu2(26)+shu3(26)+shu4(26)+shu5(26)=1;
shu1(27)+shu2(27)+shu3(27)+shu4(27)+shu5(27)=1;</P>
<P>end</P>
<P>自己顶</P><P>麻烦高手看看啊</P> 看不明白你那一堆约束条件的规律,能不能说明白一些 <P></P><P>就是啊</P><P>不明白 啊</P> 大哥,让人家看要好好说明一下阿,要不谁会看阿? 大哥,让人家看要好好说明一下阿,要不谁会看阿? <P>那些条件是根据题目要求列的,关键就是想用一个集合或者循环什么之类的来表示就不用写那么长了,因为也只是把shu1依次换成了shu2,shu3,shu4,shu5。最后一个约束条件就是shu1,shu2,shu3,shu4,shu5相对应的和均为1,这样就有27组</P><P>请大家看看啊,我们没学lingo,自己对它也不是很懂</P> <P><FONT face=宋体>我做了一下不知意下如何</FONT></P><P><FONT face=宋体>model:
sets:
a/1..27/;
n/1..5/;
shun(n,a):shu;
relation(a,a);
endsets
data:
relation=17,18 17,16 16,18 16,14 16,15
15,14 14,13 14,19 13,19 7,13
13, 8 8, 7 8, 9 8,10 9,10
10,11 10,12 11,12 5, 6 5, 7
6, 7 5, 4 5, 3 3, 4 1, 2
1, 6 2, 6 19,20 19,25 25,20
25,26 25,21 21,26 20,21 20,22
21,22 21,23 21,24 23,24;
enddata
min=z;
!总时间最小的约束条件:应为最后一个开始传输的文件结束的时刻。即总时间z应不小于每个文件传输结束的时刻;
@for(shun(i,j): shu(i,j)*i+1<=z);</FONT></P><P><FONT face=宋体>!规定所有变量为0-1变量;
@for(shun:@bin(shu));
!约束条件:相邻的边不能同时进行传输,所以他们之和最多为一;
@for(n(k):
@for(relation(i,j):shu(k,i)+shu(k,j)<=1)
);</FONT></P><P><FONT face=宋体>!约束条件:每个边实际上只能被用一次,即不管它在第几秒开始传输,只能有一个传输的机会;
@for(a(j):
@sum(n(i): shu(i,j))=1;
);
end</FONT></P> <P>谢谢了!!</P> <p>MODEL:<br/>SETS:<br/>venders1/v1,v2/:c1,x1;<br/>goods1/g1,g2/:h1,i1,m1,o1;<br/>vg1(venders1,goods1):q1,d1,z1,g1,b1,p1;<br/>venders2/s1,s2/:c2,x2;<br/>goods2/w1,w2/:h2,i2,m2,o2;<br/>vg2(Venders2,goods2):q2,d2,z2,g2,b2,p2;<br/>ENDSETS<br/>DATA:<br/>c1= 1200,2000;<br/>h1= 1,1.5;<br/>m1= 3500,4000;<br/>q1= 0.04 0.02<br/> 0.03 0.04;<br/>d1= 0.18 0.09<br/> 0.2 0.1;<br/>g1= 2 1.8<br/> 1 0.8;<br/>b1= 3000 5000<br/> 3000 4000;<br/>p1= 5 5.1<br/> 2.2 2.1;<br/>c2= 1200,2000;<br/>h2= 1,1.5;<br/>m2= 3200,3500;<br/>q2= 0.04 0.02<br/> 0.03 0.04;<br/>d2= 0.18 0.09<br/> 0.2 0.1;<br/>G2= 2 1.8<br/> 1 0.8;<br/>b2= 3500 4500<br/> 3000 4000;<br/>p2= 5 5.1<br/> 2.2 2.1;<br/>o1=100,80;<br/>o2=100,80;<br/>i1= 0,0;</p><p>ENDDATA<br/><a href="mailto:min=@sum(vg1(I,J):P1(I,J)*z1(I,J))+@sum(venders1:x1*c1)+@sum(vg1(i,j):g1(i,j)*z1(i,j))+@sum(goods1:h1*i1)+@sum(vg2(i,j):P2(i,j)*z2(i,j))+@sum(venders2:x2*c2)+@sum(vg2(i,j):g2(i,j)*z2(i,j)+@sum(goods2:h2*i2">min=@sum(vg1(I,J):P1(I,J)*z1(I,J))+@sum(venders1:x1*c1)+@sum(vg1(i,j):g1(i,j)*z1(i,j))+@sum(goods1:h1*i1)+@sum(vg2(i,j):P2(i,j)*z2(i,j))+@sum(venders2:x2*c2)+@sum(vg2(i,j):g2(i,j)*z2(i,j)+@sum(goods2:h2*i2</a>));<br/>@FOR(vg1(i,j):z1(i,j)<=b1(i,j));<br/>@for(vg2(i,j):z2(i,j)<=b2(i,j));<br/>@for(goods1(j):i1(j)+@sum(goods1(j):z1(i,j)>=m1(j)+1.28*o1(j));<br/>@for(goods2(j):i2(j)+@sum(goods2(j):z2(i,j)>=m2(j)+1.28*o2(j));<br/>venders1:x1=@if(vg1(i,j):z1(i,j)#gt#0,1,0);<br/>venders2:x2=@if(vg2(i,j):z2(i,j)#gt#0,1,0);<br/>goods2:i2(j)=goods1:i1(j)+@sum(goods2(j):z2(i,j)-m2(j));<br/>end</p><p>这是为求解多阶段规划而编的程序,最后5句都有问题,其中goods2:i2(j)=goods1:i1(j)+@sum(goods2(j):z2(i,j)-m2(j));是状态转移方程,本人刚接触lingo不久,希望高手能够给予指点.</p>
页:
[1]