数学建模社区-数学中国

标题: lingo程序错误 求高手来看看那里出错!! [打印本页]

作者: 799687157    时间: 2011-8-4 15:57
标题: lingo程序错误 求高手来看看那里出错!!
本帖最后由 799687157 于 2011-8-4 16:24 编辑

sets:
  produce/Dec..Jun/:alpha;!每月生产机器台数,alpha表示成本的增长率;
  sell/Jan..Jun/:amount;!每月销售机器台数,amount为预计销售数量;
  link(produce,sell):x;!x(i,j)表示在第i月生产在第j月卖出的台数;
endsets
data:
  alpha = 0 0.1 0.1 0.2 0.2 0.3 0.3;
  amount = 42 32 41 67 25 29;
enddata
max z = 226*48 - @for(produce(i):(1+alpha(i))*0.5*@sum(sell(j):x(i,j))^2) -  @for(produce(i):@sum(sell(j):0.1*(j-i)*x(i,j)));

@for(sell(j):@sum(produce(i)|i #le# j:x(i,j) = amount(j));
@sum(link(i,j)|i #eq# 1:x(i,j)) = 49;!12月剩余49台机器;
@for(link(i,j)|i #gt# j:x = 0);
@for(link:@gin(x));
作者: I_know__!!!!    时间: 2011-8-4 17:07
有model和end吗?
还有 max 后的 z 不用加的。
检查一下程序是否错漏。
作者: 799687157    时间: 2011-8-4 17:16
I_know__!!!! 发表于 2011-8-4 17:07
有model和end吗?
还有 max 后的 z 不用加的。
检查一下程序是否错漏。

还是不行  错误应该是在目标函数中@for和@sum这两个函数的语法里面  但怎么看都找不出错误在哪  不知道lingo的后续版本里面有没有提示错误的  我用的是lingo9.0
作者: I_know__!!!!    时间: 2011-8-4 17:24
哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。

作者: 799687157    时间: 2011-8-4 17:38
I_know__!!!! 发表于 2011-8-4 17:24
哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。

我下了个11  提示错误是语法错误  也是在@for上   
作者: 799687157    时间: 2011-8-4 17:39
I_know__!!!! 发表于 2011-8-4 17:24
哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。

很纠结啊  对照了很多程序还是没发现问题
作者: I_know__!!!!    时间: 2011-8-4 17:42
这样啊,那看看题目有没什么出入咯。
作者: wu1234nai    时间: 2011-8-4 18:36
首先是2楼说的加上model和end,还有去掉 z

接着就是max后的那个循环了
好像目标中不能有for
只是好像,也不确定
我把好几个正确的程序加上for后就都不行了
作者: 799687157    时间: 2011-8-4 19:15
本帖最后由 799687157 于 2011-8-4 19:15 编辑
wu1234nai 发表于 2011-8-4 18:36
首先是2楼说的加上model和end,还有去掉 z

接着就是max后的那个循环了


max = z;
z = 226*48 - @for(produce(i):(1+alpha(i))*0.5*
                   @sum(sell(j):x(i,j))^2)
               - @for(produce(i):
                   @sum(sell(j):0.1*(j-i)*x(i,j)));
但是我用这种方法处理  问题还是出现在z中@for上面啊~
作者: wu1234nai    时间: 2011-8-4 20:27
经过三个小时的不断奋战,查资料,问同学
终于解决
下面是我改的程序
不过有一句你的约束是错的,因为我不知道你的表达式,所以给你改了一下
不过这样没有最优解了
你看一下程序,然后把那个约束改一下就好了

model:

sets:
  produce/1..7/:alpha;!每月生产机器台数,alpha表示成本的增长率;
  sell/1..6/:amount;!每月销售机器台数,amount为预计销售数量;
  link(produce,sell):x;!x(i,j)表示在第i月生产在第j月卖出的台数;
endsets
data:
  alpha = 0 0.1 0.1 0.2 0.2 0.3 0.3;
  amount = 42 32 41 67 25 29;
enddata
max = 226*48-a-b;
@for(produce(i):  a=(1+alpha(i))*0.5*@sum(sell(j):x(i,j))^2);
@for(produce(i):b=@sum(sell(j):0.1*(j-i)*x(i,j)));

@@for(link(i,j)|i #le# j: x(i,j)=amount(j));
@sum(link(i,j)|i #eq# 1:x(i,j)) = 49;!12月剩余49台机器;
@for(link(i,j)|i #gt# j:x = 0);
@for(linkgin(x));      !取整

end

作者: I_know__!!!!    时间: 2011-8-4 20:51
799687157 发表于 2011-8-4 19:15
max = z;
z = 226*48 - @for(produce(i):(1+alpha(i))*0.5*
                   @sum(sell(j):x(i, ...

这和原来在有区别吗。
作者: 799687157    时间: 2011-8-4 20:55
wu1234nai 发表于 2011-8-4 20:27
经过三个小时的不断奋战,查资料,问同学
终于解决
下面是我改的程序

实在是太感谢了!!我好好看看!
作者: 799687157    时间: 2011-8-4 21:06
I_know__!!!! 发表于 2011-8-4 20:51
这和原来在有区别吗。

主要还是语法问题
作者: I_know__!!!!    时间: 2011-8-4 21:18
wu1234nai 发表于 2011-8-4 20:27
经过三个小时的不断奋战,查资料,问同学
终于解决
下面是我改的程序

没有最优解耶,要用分支定界法咯。
作者: garfieldme    时间: 2011-8-4 21:33
looklooklook
作者: 799687157    时间: 2011-8-5 14:44
wu1234nai 发表于 2011-8-4 20:27
经过三个小时的不断奋战,查资料,问同学
终于解决
下面是我改的程序

哎哎  ~修改了很多次  还是没有全局最优解  然后用笨办法写了一次发现是能求解出来了   说明错误还是@for和@sum没用好  还得学习啊~~
作者: wu1234nai    时间: 2011-8-5 20:12
799687157 发表于 2011-8-5 14:44
哎哎  ~修改了很多次  还是没有全局最优解  然后用笨办法写了一次发现是能求解出来了   说明错误还是@for ...

你加我QQ吧,把那个题目给我

作者: wu1234nai    时间: 2011-8-5 20:16
799687157 发表于 2011-8-5 14:44
哎哎  ~修改了很多次  还是没有全局最优解  然后用笨办法写了一次发现是能求解出来了   说明错误还是@for ...

我QQ515148695
作者: I_know__!!!!    时间: 2011-8-5 20:48
这个问题如果约束条件没有问题,那就是没有最优整数解,需要用其他方法(如分支定界法)解出来,这样子的话还是要用lingo才行。
作者: 799687157    时间: 2011-8-6 11:12
I_know__!!!! 发表于 2011-8-5 20:48
这个问题如果约束条件没有问题,那就是没有最优整数解,需要用其他方法(如分支定界法)解出来,这样子的话 ...

是有解的  程序问题
作者: qianlei    时间: 2011-8-7 10:16
有原题没有   都不知道  约束条件是什么?




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