数学建模社区-数学中国

标题: 我发现lingo的一个BUG,不知道有木有和我一起中枪的童鞋 [打印本页]

作者: ustb_zxc    时间: 2012-11-28 09:31
标题: 我发现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计算还是出现同样的情况,这是肿么了?
作者: ustb_zxc    时间: 2012-11-28 09:31
在线等····
作者: sorjor    时间: 2012-11-28 15:12
这个不是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
作者: ustb_zxc    时间: 2012-11-28 17:49
sorjor 发表于 2012-11-28 15:12
这个不是bug的问题。我解出来的结果是:
  Global optimal solution found.
  Objective value:          ...

终于知道原因了,原来是LINGO-->LINGO OPTION-->GLOBAL SOVLER 没有勾选的原因···
谢谢sorjor
作者: ustb_zxc    时间: 2012-11-28 17:51
sorjor 发表于 2012-11-28 15:12
这个不是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个周期




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5