Catnan 发表于 2013-8-22 14:56

lingo一个奇怪的问题_跪求帮忙修改代码

求高手帮忙修改代码,能让他正常运行
错误好像主要在@FOR(ZHILU(I):FR(I)=(FI(I)-FX(I))/FX(I));这句话附近
显示的错误如下:
Error 72
unable to solve for fixed variable
FR(ZHILU1)

in constraint
20

loosening  the variable's bounds may help
谢谢耐心解答MODEL:
SETS:
JIZHU/JIZHU1..JIZHU8/:GI0,GI1,V;
DUAN/DUAN1..DUAN10/:D;
ZHILU/ZHILU1..ZHILU6/:CC,FI,FX,FD,FR;
LINKS(JIZHU,DUAN):DJ,DR;
LINK(ZHILU,JIZHU):C;
ENDSETS
DATA:
GI0=120,73,180,80,125,125,81.1,90;
V=2.2,1,3.2,1.3,1.8,2,1.4,1.8;
CC=1.111224786317819   1.318676323930283  -1.096597047551148   0.783854251638765   1.338126254232463   1.220559749861743;
FX=165     150      160     155     132     162;
FD= 186.4500  177.0000  174.4000  172.0500  151.8000  184.6800;
DR=
70  0   50  0   0   30  0   0   0 40
30  0   20  8   15  6   2   0   0   8
110 0   40  0   30  0   20  40  0   40
55  5   10  10  10  10  15  0   0   1
75  5   15  0   15  15  0   10  10  10
95  0   10  20  0   15  10  20  0   10
50  15  5   15  10  10  5   10  3   2
70  0   20  0   20  0   20  10  15  5;
DJ=
-505    0   124 168 210 252 312 330 363 489
-560    0   182 203 245 300 320 360 410 495
-610    0   152 189 233 258 308 356 415 500
-500    150 170 200 255 302 325 380 435 800
-590    0   116 146 188 215 250 310 396 510
-607    0   159 173 205 252 305 380 405 520
-500    120 180 251 260 306 315 335 348 548
-800    153 183 233 253 283 303 318 400 800;

C= 0.0814    0.0482    0.0523    0.1197   -0.0277    0.1187    0.1259   -0.0021
   -0.0550    0.1264   -0.0009    0.0331    0.0860   -0.1149   -0.0170    0.0988
   -0.0680    0.0627   -0.1565   -0.0099    0.1258    0.0040   -0.0039   -0.1994
   -0.0355   -0.1046    0.2048   -0.0207   -0.0140    0.0042    0.1472    0.0743
    0.0003    0.2408   -0.0662   -0.0414   -0.0662    0.0689   -0.0021   -0.0104
    0.2349   -0.0619   -0.0790    0.0930    0.0447   -0.0028    0.1677   -0.0011;
ENDDATA
MIN=@SUM(ZHILU(I):(FI(I)-FX(I))/FX(I));

@FOR(JIZHU(I):GI1(I)<=GI0(I)+GI0(I)*V(I));
@FOR(JIZHU(I):GI1(I)<=@SUM(DUAN(J):DR(I,J)));
@FOR(JIZHU(I):GI1(I)>=GI0(I)-GI0(I)*V(I));
@SUM(JIZHU(I):GI1(I))=1052.8;

@FOR(ZHILU(I):FI(I)=@SUM(JIZHU(J):C(I,J)*GI1(J)+CC(I)));
@FOR(ZHILU(I):FI(I)=@ABS(FI(I)));
@FOR(ZHILU(I):FI(I)<=FD(I));
!@FOR(ZHILU(I):FR(I)=(FI(I)-FX(I))/FX(I));

END

madio 发表于 2013-8-22 15:16

FR这个集的属性没有赋值,最后一个约束是判断FR(I)=(FI(I)-FX(I))/FX(I))一个等式是否成立,没有值也无法判断相等,这显然不符合要求。

Catnan 发表于 2013-8-22 15:25

madio 发表于 2013-8-22 15:16 static/image/common/back.gif
FR这个集的属性没有赋值,最后一个约束是判断FR(I)=(FI(I)-FX(I))/FX(I))一个等式是否成立,没有值也无法判 ...

FR(I)=(FI(I)-FX(I))/FX(I))这个地方我想表达的是:由自变量gi1得到变量fi   然后再通过FI得到FR。想单纯表达这么一个计算的过程  所以FR肯定没有值,FI也肯定没有值都是要通过lingo要求出的,所以我应该怎么写这种单纯的计算过程的式子呢?

lingogo 发表于 2013-8-22 19:04

你这个问题根据错误提示,应该是约束条件里面设定了固定变量约束了,仔细分析一下,应该是第46行,@SUM(JIZHU(I):GI1(I))=1052.8;这里,删除这个约束即可得到最优值 -5.687719
Global optimal solution found.
  Objective value:                             -5.687719
  Objective bound:                             -5.687719
  Infeasibilities:                              0.000000
  Extended solver steps:                               0
  Total solver iterations:                             7

lingogo 发表于 2013-8-22 19:29

进一步分析,如果,@SUM(JIZHU(I):GI1(I))=1052.8这个约束是必须的话,那么可以尝试,将这个条件换成,@SUM(JIZHU(I):GI1(I))>=1052.8和,@SUM(JIZHU(I):GI1(I))<=1052.8两个条件分别计算,,@SUM(JIZHU(I):GI1(I))>=1052.8这个条件依然报错,而@SUM(JIZHU(I):GI1(I))<=1052.8时,可以得到最优解,而且和删除@SUM(JIZHU(I):GI1(I))=1052.8约束得到的最优解一样,可以初步认定在@SUM(JIZHU(I):GI1(I))=1052.8约束下无法得到最优解,以上是我的一个简单分析,对此问题有更好处理的可以进一步交流

wujianjack2 发表于 2013-8-22 19:48

lingogo 发表于 2013-8-22 19:29 static/image/common/back.gif
进一步分析,如果,@SUM(JIZHU(I):GI1(I))=1052.8这个约束是必须的话,那么可以尝试,将这个条件换成,@SUM(JIZH ...

lingogo,你好!很感谢你的积极发言讨论,此题我已和楼主私聊,后来楼主自己发现了错误并改正,得到了自己想要的结果,欢迎以后继续积极发言讨论,视情况我将给你奖励!
页: [1]
查看完整版本: lingo一个奇怪的问题_跪求帮忙修改代码