我发现lingo的一个BUG,不知道有木有和我一起中枪的童鞋
代码如下:x>=40000;
x<=120000;
max=y;
y=@if(x#LE#50000,0.5*(50000-x)+20000,@if(x#LE#70000,70000-x,x));
————————————————————————————————
想实现的功能:分段函数
40000=<x<=50000 y=0.5*(50000-x)+20000
50000<x<=70000 y=70000-x
x>70000 y=x
运行结果:
Variable Value Reduced Cost
X 100000.0 0.000000
Y 100000.0 0.000000
————————————————————————————————
问题是,x的范围是40000~120000,最大值应该出现在x=120000,y=120000时呀?我的Lingo是9.0的无限制版本,用Lingo12.0计算还是出现同样的情况,这是肿么了? 在线等···· 这个不是bug的问题。我解出来的结果是:
Global optimal solution found.
Objective value: 120000.0
Objective bound: 120000.0
Infeasibilities: 0.1164153E-09
Extended solver steps: 1
Total solver iterations: 57
Variable Value Reduced Cost
X 120000.0 0.000000
Y 120000.0 0.000000
Row Slack or Surplus Dual Price
1 80000.00 0.000000
2 0.000000 1.000000
3 120000.0 1.000000
4 0.000000 1.000000 sorjor 发表于 2012-11-28 15:12 static/image/common/back.gif
这个不是bug的问题。我解出来的结果是:
Global optimal solution found.
Objective value: ...
终于知道原因了,原来是LINGO-->LINGO OPTION-->GLOBAL SOVLER 没有勾选的原因···
谢谢sorjor sorjor 发表于 2012-11-28 15:12 static/image/common/back.gif
这个不是bug的问题。我解出来的结果是:
Global optimal solution found.
Objective value: ...
Model:
SETS:
Points/1..4/: b, c, y, z; ! 端点数为4,即分段数为3;
ENDSETS
DATA:
b=0 500 1000 1500;
c=0 5000 9000 12000;
y=,,,0; ! 增加的虚拟变量y(4)=0;
ENDDATA
Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - @sum(Points: c*z);
x11+x12 < x + 500;
x21+x22 < 1000;
0.5*x11 - 0.5*x21 > 0;
0.4*x12 - 0.6*x22 > 0;
@sum(Points: b*z)=x;
@for(Points(i)|i#eq#1: z(i) <= y(i));
@for(Points(i)|i#ne#1: z(i) <= y(i-1)+y(i));
@sum(Points: y)=1;
@sum(Points: z)=1;
@for(Points: @bin(y));
end
高手,你知道这个分段函数求最大值能不能做成多个周期的情形?
比如说6个周期
页:
[1]