数学建模社区-数学中国

标题: LINGO编程问题,求大神帮解答~~~ [打印本页]

作者: 青枫浦上本    时间: 2013-8-30 11:16
标题: LINGO编程问题,求大神帮解答~~~
SETS:
     DEMAND/1..6/:A,B,D;
     SUPPLY/1..2/:X,Y,E;
     LINK(DEMAND,SUPPLY):C;
ENDSETS
DATA:
!LOCATIONS FOR THE DEMAND;
A=1.25,8.75,0.5,5.75,3,7.25;
B=1.25,0.75,4.75,5,6.5,7.75,
!QUANTITIES OF THE SUPPLY AND DEMAND   ;
D=3,5,4,7,6,11;E=20,20;
ENDDATA
INIT:
!INITIAL LOCATIONS FOR THE SUPPLY;
X,Y=5,1,2,7;
ENDINIT
!OBJECTIVE FUNCTION;
[OBJ]MIN=@SUM[LINK(I,J):C(I,J)*{([X(J)-A(I)^2+Y(J)-B(I)^2)^(1/2)};
!DEMAND CONSTRAINTS;
@FOR(DEMAND(I):[DEMEND_CON] @SUM(SUPPLY(J):C(I,J)=D););
!SUPPLY CONSTRAINTS;
@FOR(SUPPLY(I):[SUPPLY_CON] @SUM(DEMAND(J):C(J,I)<=E(I););
@FOR(SUPPLY:@FREE(Y););
end
上面就是我在LINGO中写的解决一个最优化问题的程序,但是我每次运行的时候都会出现错误提醒如下:
Invalid number of initialization values in a DATA /INIT/CALC
statement.    The required number of values is:             6.
13]    D=3,5,4,7,6,11;E=20,20;
         ^
我真的不知道错误是出在了哪里啊啊啊!!!请大神帮我解答一下吧~~超级感谢~~








作者: 青枫浦上本    时间: 2013-8-30 11:20
本帖最后由 袁海亮 于 2013-8-31 00:32 编辑

额   一不小心打错了。。。。
程序的倒数第二行应该是:
@FOR(SUPPLY:@FREE(Y););
发帖的时候不知道怎么不小心改成了那个表情了{:soso_e127:}
请各位懂得大神帮忙解答下吧     先在这谢过了~~
作者: 青枫浦上本    时间: 2013-8-30 11:22
我明明想打的是“@”啊    怎么都是出现那个表情替代啊。。。。
作者: 老肖    时间: 2013-8-30 15:33
换个输入法吧。。
作者: 青枫浦上本    时间: 2013-8-30 22:25
老肖 发表于 2013-8-30 15:33
换个输入法吧。。

是输入法的问题吗?我在LINGO里面输的时候是@的,不是表情    但是就是会出现上面的那个错误提示~不知道到底是怎么了
作者: magic2728    时间: 2013-8-31 01:28
X,Y=5,1,2,7;
这样写合法吗?
作者: madio    时间: 2013-8-31 08:28
  1. SETS:
  2.      DEMAND/1..6/:A,B,D;
  3.      SUPPLY/1..2/:X,Y,E;
  4.      LINK(DEMAND,SUPPLY):C;
  5. ENDSETS
  6. DATA:
  7. !LOCATIONS FOR THE DEMAND;
  8. A=1.25,8.75,0.5,5.75,3,7.25;
  9. B=1.25,0.75,4.75,5,6.5,7.75;
  10. !QUANTITIES OF THE SUPPLY AND DEMAND   ;
  11. D=3,5,4,7,6,11;
  12. E=20,20;
  13. ENDDATA
  14. INIT:
  15. !INITIAL LOCATIONS FOR THE SUPPLY;
  16. X=5,1;
  17. Y=2,7;
  18. ENDINIT
  19. !OBJECTIVE FUNCTION;
  20. [OBJ]MIN=@SUM(LINK(I,J):C(I,J)*((X(J)-A(I)^2+Y(J)-B(I)^2)^(1/2)));
  21. !DEMAND CONSTRAINTS;
  22. @FOR(DEMAND(I):[DEMEND_CON] @SUM(SUPPLY(J):C(I,J))=D);
  23. !SUPPLY CONSTRAINTS;
  24. @FOR(SUPPLY(I):[SUPPLY_CON] @SUM(DEMAND(J):C(J,I))<=E(I));
  25. @FOR(SUPPLY:@FREE(Y));
  26. end
复制代码
我把语法错误给你改了!

作者: 青枫浦上本    时间: 2013-8-31 09:56
magic2728 发表于 2013-8-31 01:28
X,Y=5,1,2,7;
这样写合法吗?

这样写是可以的吧 。。。。   等同于X=5,2;Y=1,7   难道是错的?我看到LINGO的教程里面是这么说的
作者: wujianjack2    时间: 2013-8-31 10:17
本帖最后由 wujianjack2 于 2013-8-31 10:23 编辑

    楼主你好!很抱歉昨天没有看到你的问题,这里我对这个问题做出一个回答:
    正确的代码如下:
MODEL:
SETS:
     DEMAND/1..6/:A,B,D;
     SUPPLY/1..2/:X,Y,E;
     LINK(DEMAND,SUPPLY):C;
ENDSETS
DATA:
!LOCATIONS FOR THE DEMAND;
A=1.25,8.75,0.5,5.75,3,7.25;
B=1.25,0.75,4.75,5,6.5,7.75;
!QUANTITIES OF THE SUPPLY AND DEMAND;
D=3,5,4,7,6,11;E=20,20;
ENDDATA
INIT:
!INITIAL LOCATIONS FOR THE SUPPLY;
X,Y=5,1,2,7;
ENDINIT
!OBJECTIVE FUNCTION;
[OBJ]MIN=@SUM(LINK(I,J):C(I,J)*((X(J)-A(I))^2+(Y(J)-B(I))^2)^(1/2));
!DEMAND CONSTRAINTS;
@FOR(DEMAND(I):[DEMEND_CON] @SUM(SUPPLY(J):C(I,J))=D(I));
!SUPPLY CONSTRAINTS;
@FOR(SUPPLY(I):[SUPPLY_CON] @SUM(DEMAND(J):C(J,I))<=E(I));
@FOR(SUPPLY:@FREE(Y);@FREE(X));
END

在LINGO 11上运行得到如下结果:
  Local optimal solution found.
  Objective value:                              85.26604
  Infeasibilities:                                   0.000000
  Total solver iterations:                          68

  Variable               Value             Reduced Cost
     X( 1)           3.254883            0.000000
     X( 2)           7.250000          -0.1853513E-05
     Y( 1)           5.652332            0.000000
     Y( 2)           7.750000          -0.1114154E-05

或许楼主已经解决了这个问题,但是,我想再给出我的建议:
一.本问题应该来自谢金星的《优化建模与LINDO/LINGO软件》,希望楼主在输入代码时一定要仔细,注意括号的匹配
二.LINGO中的语句均以圆括号开始结束,暂时不存在花括号与方括号,数据输入以分号结束,切记!
三.本程序可以对X,Y作一个范围限定,以减少程序的搜索空间,或许可以改善下求解步骤;
四.madio站长和magic2728超级版主很辛苦,他们对于这个问题的回答或许不如楼主意,madio站长的程序的目标函数或许不是楼主想要的,但其余语法是没有问题的。至于赋初值,你的做法是可以的,可能magic2728看错了,抱歉!希望你能够理解并继续支持我们,再次表示感谢!

以上是我个人的一些建议,仅供楼主参考,谢谢!

作者: 青枫浦上本    时间: 2013-8-31 10:45
madio 发表于 2013-8-31 08:28
我把语法错误给你改了!

恩恩    超级感谢啊~ 但是我刚把代码复制试了下还是提示说有错误。。。。提示如下:
Invalid input.A syntax error has occurred
SETS:
DEMAND/1..6/:A,B,D;
SUPPLY      ^
真的是不懂问题出在哪啊
作者: wujianjack2    时间: 2013-8-31 10:55
青枫浦上本 发表于 2013-8-31 10:45
恩恩    超级感谢啊~ 但是我刚把代码复制试了下还是提示说有错误。。。。提示如下:
Invalid input.A sy ...

   楼主,你为什么不看我给你的解答呢?好桑心啊!
作者: 青枫浦上本    时间: 2013-8-31 10:57
wujianjack2 发表于 2013-8-31 10:17
楼主你好!很抱歉昨天没有看到你的问题,这里我对这个问题做出一个回答:
    正确的代码如下:
MODE ...

超级超级感谢aaa,我复制你写的代码试了,没有问题,出来结果了~~真的是太感谢了
我之前一直不对是不是因为我的括号出错了啊~我仔细对比下   嘿嘿
作者: 青枫浦上本    时间: 2013-8-31 11:00
wujianjack2 发表于 2013-8-31 10:55
楼主,你为什么不看我给你的解答呢?好桑心啊!

刚看到嘛,刚给你回复啊
嘿嘿,不管怎么说   还是很感谢啦~~
作者: wujianjack2    时间: 2013-8-31 11:02
青枫浦上本 发表于 2013-8-31 10:57
超级超级感谢aaa,我复制你写的代码试了,没有问题,出来结果了~~真的是太感谢了
我之前一直不对是不是 ...

   对的,楼主你少写了括号,还有用了花括号和方括号,再就是数据段赋值时有一个没有以分号结束,再就是没有对于X取消非负限制,虽然与结果无关,但程序上是不太完整的。
   输入程序时一定要仔细,细心。再就是把LINGO的基础知识好好巩固下,谢谢你的支持!
作者: 青枫浦上本    时间: 2013-8-31 11:12
wujianjack2 发表于 2013-8-31 11:02
对的,楼主你少写了括号,还有用了花括号和方括号,再就是数据段赋值时有一个没有以分号结束,再就是没 ...

恩恩  以后一定会注意的   这还是我第一次接触LINGO~自己在看教程自学  以后有不懂的再向你们请教~~




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