link2(nian,lt):z,zhongl; endsets data:
@ole(F:lingsj\\nongch.xls,'nianchniu','zhtian','xiaogn','xiaomn','maili','mailia','maiti','maitia','gongshi','gshgz',
'niansh','xiaoniu','nainiu')=x,z,u,v,f1,f2,g1,g2,h,rh,r,xiaoniu,nainiu; enddata max=lirun;
lirun=@sum(nian(i):r(i));
@for(nian(i):f1(i)=0.6*0.99*@sum(link1(i,j)|j#gt#2:x(i,j))); !每年的粮食需求量;
@for(nian(i):g1(i)=0.7*0.99*@sum(link1(i,j)|j#gt#2:x(i,j))); !每年的甜菜需求量;
@for(nian(i):f2(i)=1.1*z(i,1)+0.9*z(i,2)+0.8*z(i,3)+0.65*z(i,4)); !每年的粮食生产量;
@for(nian(i):g2(i)=1.5*w2(i)); !每年的甜菜生产量;
@for(link1(i,j)|i#eq#1:x(i,j)=10); !第一年年初的各类牛的数量,初值; @for(link1(i,j)|j#le#2:y=0.95*x); !各年年末的小牛的数量分布; @for(link1(i,j)|j#gt#2:y=0.98*x); !各年年末的产奶牛的数量分布;
@for(link2(i,j)|j#lt#4:zhongl(i,j)>zhongl(i,j+1));!最优解优先选择产粮量高的天种粮;
@for(link2(i,j)|j#eq#1:z(i,j)<30*zhongl(i,j);z(i,j)>30*zhongl(i,j+1));
@for(link2(i,j)|j#eq#2:z(i,j)<30*zhongl(i,j);z(i,j)>30*zhongl(i,j+1));
@for(link2(i,j)|j#eq#3:z(i,j)<20*zhongl(i,j);z(i,j)>20*zhongl(i,j+1));
@for(link2(i,j)|j#eq#4:z(i,j)<10*zhongl(i,j));
@for(nian(i):w1(i)=@sum(link2(i,k):z(i,k))); !每年的种粮田地数量;
@for(nian(i):nainiu=@sum(link1(i,j)|j#gt#2:x(i,j))); !每年的产奶牛的总数; @for(nian(i):xiaoniu=@sum(link1(i,j)|j#le#2:x(i,j))); !每年的小牛的总数; @for(nian(i):w1(i)+w2(i)+0.99*nainiu+0.6666667*0.975*xiaoniu=220); !土地约束;
@for(nian(i):h=10*@sum(link1(i,j)|j#le#2:0.975*x(i,j))+42*@sum(link1(i,j)|j#gt#2:0.99*x(i,j))+4*w1(i)+14*w2(i));!劳动时间;
@for(nian(i):r(i)=270*0.99*nainiu(i)+120*y(i,12)+30*u(i)+40*v(i)-rh(i)+rf2(i)-rf1(i)+rg2(i)-rg1(i)-50*0.975*xiaoniu(i)-15*w1(i)-10*w2(i)-@sum(nian(k)|k#le#i:d(k))); !每年的货币收入;
@for(nian(i):rh=@if(h#le#5500,4000,4000+1.2*(h-5500))); !劳动时间方面的支出;
@for(nian(i):rf1=@if(f1#gt#f2,90*(f1-f2),0)); !购粮支出; @for(nian(i):rf2=@if(f2#gt#f1,75*(f2-f1),0)); !卖粮收入; @for(nian(i):rg1=@if(g1#gt#g2,70*(g1-g2),0)); !购甜菜支出;
@for(nian(i):rg2=@if(g2#gt#g1,50*(g2-g1),0)); !卖甜菜收入;
@for(nian(i):d=@if(@sum(link1(i,j):x(i,j))#gt#130,39.8504*(@sum(link1(i,j):x(i,j))-130),0)); !因当年的投资还贷数量;
@for(link1(i,j)|i#lt#5 #and# j#le#11:x(i+1,j+1)=y(i,j));!连接关系; @for(link1(i,j)|i#lt#5 #and#
j#eq#1:x(i+1,j)=0.55*@sum(link1(i,k)|k#gt#2:y(i,k))-v(i));!留下来的小母牛;
@for(nian(i):u(i)=0.55*@sum(link1(i,j)|j#gt#2:y(i,j)));!小公牛数量; @for(nian(i)|i#ge#3:v(i)=u(i));!最优解必定在最后一年里没有小牛;
@sum(link1(i,j)|i#eq#5 #and# j#ge#2 #and# j#le#11:y(i,j))<175;!五年后约束条件;
@sum(link1(i,j)|i#eq#5 #and# j#ge#2 #and# j#le#11:y(5,j))>50; @for(link2(i,j):@bin(zhongl)); end model:
!旅行商问题(TSP),从城市1出发,经过每个城市一次回到城市1; sets: city:u;
link(city,city):c,x; endsets data:
n=30;!输入城市数,n比较小时可用提示n=?,n比较大时不能这样作,死机; city,c=@ole(F:lingsj\\TSP2.xls,'city','feiyong');
enddata
min=@sum(link(i,j)|i#ne#j:c*x);
@for(city(i):@sum(city(j)|i#ne#j:x(i,j))=1); @for(city(j):@sum(city(i)|i#ne#j:x(i,j))=1); @for(link(i,j)|i#gt#1 #and# j#gt#1 #and# i#ne#j:u(i)-u(j)+n*x(i,j) 注:由于通用程序中含有城市个数n,因此必须在数据段指定n的值;一个好的方法是即时输入法,用n=?即可.但是当n=30时,这样做会死lingo,说是指向内存.这时应用者应当注意阅读程序,注意修改数据段.

