model:
max = 4.8*x11+4.8*x21+5.6*x12+5.6*x22-10*x1-8*x2-6*x3;
x11+x12<x+500;
x21+x22<1000
0.5*x11-0.5*x21>0;
0.4*x12-0.6*x22>0;
x=x1+x2+x3;
(x1-500)*x2=0;
(x2-500)*x3=0;
x1<500;
x2<500;
x3<500;
end
参考代码:
function zd616583803928481452
说明:
1、优化问题的约束条件一般应为“>=”或“<=”,否则,对应的集合为开集,很多问题未必有解。例如,min x,s.t. x>0 这样一个看似简单的问题却是无解的。
2、改写的代码中,没把x作为一个决策变量,而是直接将其表达式代入约束条件。
3、原Lingo代码似乎缺少了约束条件xi>=0(或者是Lingo隐含认为变量为正?),如果没有这个限制,x2=x3=0,x1取绝对值很大的负数,目标函数会大很多(设代码中变量lb=[]可得)。另,代码的第4行x21+x22<1000行尾缺少分号,属语法错误。
4、上述代码求解结果与Lingo相同,即x11=x21=500,其余为0。