lingo发生错误63.。。。求高手解答8
发布网友
发布时间:2023-09-15 02:39
我来回答
共2个回答
热心网友
时间:2023-09-15 02:40
1.建议你将变量写成大写,这是一个习惯问题,可以培养,譬如以上的 l 很容易写成数字1,容易
出错,不易检查出来;
2.对于多元变量,如links(i,j),在双重循环中可以直接使用,因此
@for(station(I)|l(I,J)#eq#1: tr(I,J)<rl(I,J));有误,只是单循环,但模型中存在index J,
修改为:
@for(links(I,J)|l(I,J)#eq#1: tr(I,J)<rl(I,J));
3.@for(station(I):
@sum(station(J)|l(I,J)#eq#1: l(I,J)*(tr(I,J)+r(J)*t(J)))<【r(J)】;
);
显然是有问题的,因为【】内的index是J,而外部循环index是I,你再依据模型重新考虑,这里可能是你手误!将【】内改正为r(I),运行结果没有可行解:
我把运行结果贴上,希望对你有用!!
No feasible solution found.
Infeasibilities: 155.7000
Total solver iterations: 0
Lingo很容易上手,使用一本好的参考书更有助于你的提高,而且要经常训练,能够形成模型MODE与代码CODE之间的快速映射,将有助于你对优化理论的学习。
祝好运!!
热心网友
时间:2023-09-15 02:40
@for(station(I):
@sum(station(J)|l(I,J)#eq#1: l(I,J)*(tr(I,J)+r(J)*t(J)))<r(J)); !此句有错,r(J)改成r(I);
@for(station(I)|l(I,J)#eq#1: tr(I,J)<rl(I,J)); !此句有错,station(I)改成links(i,j);
更改之后如下:
model:
!TSC问题;
sets:
station/1..6/: r,t;
links(station,station): l,rl,tr;
endsets
!这里是数据;
data:
r=40 40 40 40 63 63;
l= 0 1 0 0 0 0
1 0 1 0 1 0
0 1 0 1 1 1
0 0 1 0 1 1
0 1 1 1 0 1
0 0 1 1 1 0;
rl=0 40 0 0 0 0
40 0 6.35 0 11.3 0
0 6.35 0 40 7.64 4.43
0 0 40 0 8.83 6.02
0 11.3 7.64 8.83 0 63
0 0 4.43 6.02 63 0;
enddata
!目标函数;
max=@sum(station(I): r*t);
!需求约束;
@for(station(I):
@sum(station(J)|l(I,J)#eq#1: l(I,J)*tr(I,J))=r(I)*t(I));
@for(station(I):
@sum(station(J)|l(I,J)#eq#1: l(I,J)*(tr(I,J)+r(J)*t(J)))<r(I));
@for(links(i,j)|l(I,J)#eq#1: tr(I,J)<rl(I,J));
@for(station(I):@bnd(0,t(I),0.95));
@for(station(I):r(I)*t(I)>162);
end
最终结果无错误,但找不到可行解。。。。