求0-1规划高手指教lingo编程。急急急!!!

加入0-1规划Zij后结果自相矛盾,哪出问题了(
另加条件:现存有5种原料油每种500吨。要求在6月底仍然有这样多的存货;每个月最多使用3种原料油;如果某月使用了原料油V1和V2,则必须使用O3。


model:
sets:
m/1..6/:; !定义月份集合;
n/1..5/:; !定义原料油种类集合;
ajz(m,n):p,s,x,y,z;!定义价格矩阵p,前一个月剩余原料油矩阵S,购买方案矩阵X和生产方案矩阵Y;
endsets
data:
p=1100 1200 1300 1100 1150
1300 1300 1100 900 1150
1100 1400 1300 1000 950
1200 1100 1200 1200 1250
1000 1200 1500 1100 1050
900 1000 1400 800 1350;
enddata
max=@sum(m(i):@sum(n(j):1500*y(i,j)*z(i,j)-p(i,j)*x(i,j)-50*(s(i,j)+x(i,j)-y(i,j)*z(i,j))));!目标函数;
@for(m(i):y(i,1)*z(i,1)+y(i,2)*z(i,1)<200); !植物油每月精炼不超过200吨;
@for(m(i):y(i,3)*z(i,3)+y(i,4)*z(i,4)+y(i,5)*z(i,5)<250); !非植物油每月精炼不超过250吨;
@for(n(j):s(1,j)=500); !生产前存储的各原料油为500吨;
@for(m(i)|i#GT#1:@for(n(j):s(i,j)-s(i-1,j)-x(i-1,j)+y(i-1,j)*z(i-1,j)=0));!临近两个月的油存储量之间的关系;
@for(m(i):@for(n(j):x(i,j)+s(i,j)-y(i,j)*z(i,j)<1000)); !每种原料油每月的存储量不超过1000吨;
@for(n(j):@sum(m(i):x(i,j)-y(i,j)*z(i,j))=0); !使得第六个月各个原料油的存储量都为500吨;
@for(m(i):2.8*y(i,1)*z(i,1)+0.1*y(i,2)*z(i,2)-4*y(i,3)*z(i,3)-1.8*y(i,4)*z(i,4)-y(i,5)*z(i,5)<=0);
@for(m(i):5.8*y(i,1)*z(i,1)+3.1*y(i,2)*z(i,2)-y(i,3)*z(i,3)+1.2*y(i,4)*z(i,4)+2*y(i,5)*z(i,5)>=0);!成品油的硬度在3~6之间;
@for(m(i):@sum(n(j):z(i,j))<=3);
@for(m(i):z(i,1)*z(i,2)<=z(i,5));
@for(ajz:@bin(z));
end
因为不懂才问,都知道了问什么。程序自己看不出问题。请懂的大神帮帮忙完善出合理的程序

第1个回答  2013-05-23
你要说清楚怎么自相矛盾了才行 另外你这个约束最好想办法写成线性的追问

就是精炼油@for(m(i):y(i,1)*z(i,1)+y(i,2)*z(i,1)<200); 但是算出来的y(i,2)=1000,不合要求。线性的要怎么写,正是不会才用lingo的

追答

怎么不合要求了 你的所有z(i,1)都是0 加起来小于200有任何问题吗

追问

请问你有用lingo计算吗?y(i,2)=1000,约束要求<200!!!而且,所有z(i,1)都是0怎么可能

追答

你的要求是那个和小于200好不好 没看出你哪条约束说每个y都小于200

我可不知道你这个问题到底是什么 只知道我算出来的结果里面所有的z(i,1)都是0 我可不知道可不可能

追问

这是题目

追答

我不关心你题目是什么 你回答一下哪条约束保证y要都小于200 哪条保证了z(i,1)不可能是都0 如果没有的话那你为什么说有矛盾?

追问

y表示的是精炼量。精炼量是有约束的,前两种<200,后三种<250.看题目早知道了。z表示0-1规划,即使用了某种原料油则=1.你说,可能都是0吗

追答

不要跟我说题目的问题 就看你写的lingo模型 我完全看不出哪里有这个限制 如果有这种限制你自己写上啊 不写上谁知道?

追问

不懂就hi我吧,别浪费我的财富值

追答

到底是你不懂还是我不懂? 不知道你怎么想的 基本逻辑都没有 你的lingo模型里面根本没有限制你说的那些东西 然后说lingo解出来的是矛盾的?

相似回答