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)); 有model和end吗?
还有 max 后的 z 不用加的。
检查一下程序是否错漏。 I_know__!!!! 发表于 2011-8-4 17:07 static/image/common/back.gif
有model和end吗?
还有 max 后的 z 不用加的。
检查一下程序是否错漏。
还是不行 错误应该是在目标函数中@for和@sum这两个函数的语法里面 但怎么看都找不出错误在哪 不知道lingo的后续版本里面有没有提示错误的 我用的是lingo9.0 哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。
I_know__!!!! 发表于 2011-8-4 17:24 static/image/common/back.gif
哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。
我下了个11 提示错误是语法错误 也是在@for上 I_know__!!!! 发表于 2011-8-4 17:24 static/image/common/back.gif
哦,我用lingo12,提示错误是在 max 后的 for啊,这点我想不通。
很纠结啊 对照了很多程序还是没发现问题 这样啊,那看看题目有没什么出入咯。 首先是2楼说的加上model和end,还有去掉 z
接着就是max后的那个循环了
好像目标中不能有for
只是好像,也不确定
我把好几个正确的程序加上for后就都不行了 本帖最后由 799687157 于 2011-8-4 19:15 编辑
wu1234nai 发表于 2011-8-4 18:36 static/image/common/back.gif
首先是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上面啊~ 经过三个小时的不断奋战,查资料,问同学
终于解决
下面是我改的程序
不过有一句你的约束是错的,因为我不知道你的表达式,所以给你改了一下
不过这样没有最优解了
你看一下程序,然后把那个约束改一下就好了
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(link:@gin(x)); !取整
end