青枫浦上本 发表于 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;
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): @SUM(SUPPLY(J):C(I,J)=D););
!SUPPLY CONSTRAINTS;
@FOR(SUPPLY(I): @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 static/image/common/back.gif
换个输入法吧。。

是输入法的问题吗?我在LINGO里面输的时候是@的,不是表情    但是就是会出现上面的那个错误提示~不知道到底是怎么了

magic2728 发表于 2013-8-31 01:28

X,Y=5,1,2,7;
这样写合法吗?

madio 发表于 2013-8-31 08:28

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=5,1;
Y=2,7;
ENDINIT
!OBJECTIVE FUNCTION;
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): @SUM(SUPPLY(J):C(I,J))=D);
!SUPPLY CONSTRAINTS;
@FOR(SUPPLY(I): @SUM(DEMAND(J):C(J,I))<=E(I));
@FOR(SUPPLY:@FREE(Y));
end我把语法错误给你改了!

青枫浦上本 发表于 2013-8-31 09:56

magic2728 发表于 2013-8-31 01:28 static/image/common/back.gif
X,Y=5,1,2,7;
这样写合法吗?

这样写是可以的吧 。。。。   等同于X=5,2;Y=1,7   难道是错的?我看到LINGO的教程里面是这么说的:L

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;
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): @SUM(SUPPLY(J):C(I,J))=D(I));
!SUPPLY CONSTRAINTS;
@FOR(SUPPLY(I): @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 static/image/common/back.gif
我把语法错误给你改了!

恩恩    超级感谢啊~ 但是我刚把代码复制试了下还是提示说有错误。。。。提示如下:
Invalid input.A syntax error has occurred
SETS:
DEMAND/1..6/:A,B,D;
SUPPLY      ^
真的是不懂问题出在哪啊:'(
页: [1] 2
查看完整版本: LINGO编程问题,求大神帮解答~~~