数学建模社区-数学中国

标题: lingo程序,求大神解答——0-1规划就是出不来 [打印本页]

作者: 菜菜菜    时间: 2013-7-31 08:45
标题: lingo程序,求大神解答——0-1规划就是出不来
用的lingo11,跑出来的结果,x不为0-1,是数量级较小的数,在10-7左右,不知道为什么,bin函数用不成。是语句问题么?

源程序采自《lingo和excel在数学建模中的应用》P100页
!火力发电厂;
model:
sets:
mon/1..12/:a,b,c,x,y;
endsets
data:
a=1875 1960 2160 1980 2085 2395 2555 2675 2330 2125 1930 2180;        !每月耗油量;
b=2626.15 2620.75 2647.275 2693.9 2737.775 2729.9 2707.425 2705.475 2703.85 2700.6 2718.5 2753.825;        !每月柴油价格预测;
enddata
@for(mon:@bin(x));
@for(mon:@gin(y));     注:英文输入‘:’变为了表情
min=@sum(mon(i):(d+y(i)*b(i)+@if(y(i)#le#2000,40,@if(y(i)#gt#12000,30,42-0.001*y(i)))*y(i))*x(i))+@sum(mon(i):(30*c(i)-15*a(i))*e);
d=10000;
e=0.5;
!限制条件;
c(1)=y(1)*x(1)+a(1)/2;
@for(mon(k)|k#ge#2:c(k)=@sum(mon(j)|j#le#k:y(j)*x(j))+a(1)/2-@sum(mon(i)|i#lt#k:a(i)));
c(12)>=1.5*a(12);
@for(mon(i)|i#lt#12:c(i)>=a(i)+a(i+1)/2);
@for(mon(i):c(i)<=20000);
@for(mon(i):y(i)>=1000*x(i));
end
作者: madio    时间: 2013-7-31 10:07
你估计得到的是局部最优解吧?打开全局求解器求解,我这里的版本求解不了这么大规模的问题,你找一个破解版的
作者: 菜菜菜    时间: 2013-7-31 15:34
madio 发表于 2013-7-31 10:07
你估计得到的是局部最优解吧?打开全局求解器求解,我这里的版本求解不了这么大规模的问题,你找一个破解版 ...

设过了全局最优解了....有lingo11破解的很完全

作者: madio    时间: 2013-7-31 16:12
如果是得到了全局最优解,那个很小的数就是零了,这个是正常的计算机的存储误差
作者: 菜菜菜    时间: 2013-7-31 17:02
madio 发表于 2013-7-31 16:12
如果是得到了全局最优解,那个很小的数就是零了,这个是正常的计算机的存储误差

极小值乘以对应的花费以后,依然不是一个可以忽略的极小值

作者: madio    时间: 2013-7-31 17:32
直接就变为零了,这个就是最优解了,10的-7次方显然是系统误差
作者: 菜菜菜    时间: 2013-7-31 18:15
madio 发表于 2013-7-31 17:32
直接就变为零了,这个就是最优解了,10的-7次方显然是系统误差

貌似真的是误差容限的问题,多谢多谢




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