数学建模社区-数学中国

标题: 求一位lingo大神 帮我看看这个程序哪里有问题.提示我:Improper use of @FOR()functio [打印本页]

作者: 新徒弟    时间: 2013-8-30 10:33
标题: 求一位lingo大神 帮我看看这个程序哪里有问题.提示我:Improper use of @FOR()functio
本帖最后由 wujianjack2 于 2013-8-30 15:59 编辑

model:
sets:
  demand/1..31/:a,b,d;
  supply/1..2/:x,y,e;
  link(demand,supply):c;
endsets
data:
a=1.2,0.8,0.5,5.7,3,7.2,0.9,3.3,5.1,2.1,3,4,3.8,3,4.5,2.5,1.5,6.3,9,3,4.6,1.6,0.6,0.9,1.2,1.5,5.6,9.7,14,6.2,1;
b=1.2,0.7,4,5,6.5,7.7,1.6,2,1.7,6,1.1,2,2.2,0.9,2.1,6.6,1.8,7.2,5,3.5,0.8,8.3,3.6,2.5,1.4,0.3,3.7,7.1,11,2,0.7;
d=3,5,4,7,6,11,2,4,3,6,2,5,8,2,7,5,3,4,2,6,8,2,1,5,3,9,3,4,1,6,2;
e=100,100;
enddata
init:
x=5,2;
y=1,7;
endinit
min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));
@for(demand(i):
     @sum(supply(j):c(i,j))=d(i));
@for(supply(i):
     @sum(demand(j):c(j,i))<=e(i));
@for(supply:@free(x),@free(y) );
end

作者: wujianjack2    时间: 2013-8-30 16:07
    楼主你好,冒昧回答下你的问题。
    一.不必在标题中写出“求大神”这样的字样,只需简要概括说明自己的具体问题即可;
    二.估计现在你的问题已经解决了,本程序的疏漏之处在于
    “@for(supply:@free(x),@free(y) );”
    应做:
     “@for(supply:@free(x);@free(y) );”
    还有一点,这一句可以优化,可以根据给定的数据限定X,Y的一个取值范围,这样可以缩小求解空间。
   以上是个人的一点见解,仅供楼主参考。
作者: 新徒弟    时间: 2013-8-30 18:43
wujianjack2 发表于 2013-8-30 16:07
楼主你好,冒昧回答下你的问题。
    一.不必在标题中写出“求大神”这样的字样,只需简要概括说明自己 ...

感谢您的回复 ,可是通过调试还是出现原来的问题,提示:Improper use of @FOR()function.  (位置提示在第一个for 函数),不知我是不是函数调用的不对,还是其他问题。希望帮忙指导,谢谢~~~
作者: wujianjack2    时间: 2013-8-30 19:28
新徒弟 发表于 2013-8-30 18:43
感谢您的回复 ,可是通过调试还是出现原来的问题,提示:Improper use of @FOR()function.  (位置提示在 ...

   抱歉,先前忘了向你说明,我直接编辑了你的原帖,其中可能把你的目标函数中似乎缺的一个括号给补上了,但是没有修改那个逗号。也就是说,你复制1楼的程序,把那个逗号改成分号的话,程序应该是可以运行的,我用LINGO 11测试通过了。
   我仅尝试了求解下局部最优解,结果如下:

  Local optimal solution found.
  Objective value:                              300.2570
  Infeasibilities:                                    0.000000
  Total solver iterations:                           134
   
  Variable           Value            Reduced Cost
    X( 1)          5.761903            0.000000
    X( 2)          3.318816           0.5186792E-07
    Y( 1)          6.764566            0.000000
    Y( 2)          1.938485          -0.7218611E-08

作者: 新徒弟    时间: 2013-8-30 20:29
wujianjack2 发表于 2013-8-30 19:28
抱歉,先前忘了向你说明,我直接编辑了你的原帖,其中可能把你的目标函数中似乎缺的一个括号给补上了, ...

问题解决了 真是太感谢您了  谢谢~~~~
作者: wujianjack2    时间: 2013-8-30 20:47
新徒弟 发表于 2013-8-30 20:29
问题解决了 真是太感谢您了  谢谢~~~~

  不用客气,多花一些时间看下基本用法吧!这是基础,一定要掌握牢。
  再者,系统地看下LINGO的相关书籍,如果英文水平不错的话,我推荐看官方教程,如果欠佳的话可以阅读《优化建模与LINDO/LINGO软件》和《LINGO和Excel在数学建模中的应用》这两本书,论坛置顶帖中有下载,你攒些体力后可以下载下。
  攒体力方法:见http://www.madio.net/thread-198334-1-1.html中的4楼。
  欢迎常逛论坛,也谢谢你的支持!




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