24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1876  |  回复: 4

sunsuper

铜虫 (初入文坛)

[求助] 已经加入Lingo的0-1变量条件,为何还有小数解?已有1人参与

最近在用Lingo求解模型,模型中已加入0-1变量条件如下:
@for(linkSSL: @bin(X2));
可算出来的可行解里X2仍然有小数解存在,同志们遇到过这种情况吗?求指教!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

NicoleLas

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
确实有可能出现这种情况,如果方便贴上程序看看吧!

[ 发自手机版 http://muchong.com/3g ]
Be water, my friend.
2楼2014-07-13 21:48:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunsuper

铜虫 (初入文坛)

引用回帖:
2楼: Originally posted by NicoleLas at 2014-07-13 21:48:41
确实有可能出现这种情况,如果方便贴上程序看看吧!

约束是个线性函数,太长就不列了,主要约束如下:
        @for(linkSS(i,j)| i #ne# j: @sum(Type(l): X1(i,j,l)) = 1);
        @for(linkSSL(i,j,l)| i #ne# j: X1(i,j,l) = X1(j,i,l));
        @for(linkSS(i,j)| i #ne# j: @sum(SCs(k): X2(i,j,k)) = X1(i,j,3));
        @for(linkSSS(i,j,k)| i #ne# j: X2(i,j,k) <= Z(k));
        @for(linkSS(i,j)| i #ne# j: Y(i,j) + t(i,j) <= t_I + M*(1 - (X1(i,j,1) + X1(i,j,2))));
        @for(linkSS(i,j)| i #ne# j: @abs(Y(i,j) - Y(j,i)) >= t(i,j)*X1(i,j,1));
        @for(linkSS(i,j)| i #ne# j: @abs(Y(i,j) - Y(j,i)) < t(i,j) + M*(1 - X1(i,j,2)));
        @for(linkSS(i,j)| i #ne# j: Y(i,j) + @sum(SCs(k): X2(i,j,k)*2*t(i,k)) <= t_I);
        @for(LinkSS(i,j)| i #ne# j: TEMP(i,j) = @if(Y(i,j) #lt# tw_O1, 0, @if(Y(i,j) #gt# tw_O2, 1, (Y(i,j) - tw_O1)/(tw_O2 - tw_O1))));
        @sum(LinkSS(i,j)| i #ne# j: w(i,j)*TEMP(i,j)) >= sita*@sum(SCs(i): Q(i));
        @for(LinkSS(i,j)| i #ne# j: Y(i,j) >= t_S);
        @for(SCs: @bin(Z));
        @for(linkSSS: @bin(X1));
        @for(linkSSL: @bin(X2));
不知道问题出在哪里,是Lingo自身问题还是模型问题?
3楼2014-07-13 22:51:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sunsuper

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by sunsuper at 2014-07-13 22:51:01
约束是个线性函数,太长就不列了,主要约束如下:
        @for(linkSS(i,j)| i #ne# j: @sum(Type(l): X1(i,j,l)) = 1);
        @for(linkSSL(i,j,l)| i #ne# j: X1(i,j,l) = X1(j,i,l));
        @for(linkSS(i,j)| i #ne# j: @su ...

错了,目标函数是个线性函数。。。
4楼2014-07-13 22:52:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

NicoleLas

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
sunsuper: 金币+5, ★★★很有帮助 2014-07-15 18:58:00
引用回帖:
4楼: Originally posted by sunsuper at 2014-07-13 22:52:46
错了,目标函数是个线性函数。。。...

你使用了些非线性函数,有可能造成求解数值不稳定性,乍看上去应该是MINLP问题,MINLP本身求解就比较困难。LINGO在求解MINLP问题时采用Branch and Bound(Integer Solver) + CONOPT(Local Nonlinear Solver),CONOPT要求模型Scale比较合理,所以,软件有可能求解出现数值精度问题。
   方便的话贴上程序及数据吧,我有最新的LINGO及LINDO API,有时间的话可以给你运行下,看是否结果有所改善。
   当然,最关键的可能是你优化自己的模型及程序编写,尽量转化为MILP或者MIQP,这样LINGO使用Branch and Bound + MOSEK( Interior Point) 效果可能会好一点。
Be water, my friend.
5楼2014-07-14 00:19:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sunsuper 的主题更新
信息提示
请填处理意见