如何用lingo或matlab求最小值
已知数据:time=26,24,22,21,21,20,19,18,18,17,17,17,17,16,16,16,16,16,15,15,15,14,14,14,14,13,13,13,13,12,12,12,12,11,11,11,10,10,10,10,10,10,9,9,9,9,9,8,8,8,8;
v=9 10 14 10 9 16 23 24 16 21 19 17 15 20 15 9 9 6 21 14 8 16 9 9 8 16 16 12 7 22 17 14 12 16 8 6 24 14 12 12 11 9 19 16 15 14 12 14 10 10 5;
约束条件和目标函数见附件
model:
sets:
row/1..51/:time,v;
col/1..25/:t;
link(row,col):x;
endsets
data:
time=26 24 22 21 21 20 19 18 18 17 17 17 17 16 16 16 16 16 15 15 15 14 14 14 14 13 13 13 13 12 12 12 12 11 11 11 10 10 10 10 10 10 9 9 9 9 9 8 8 8 8;
v=9 10 14 10 9 16 23 24 16 21 19 17 15 20 15 9 9 6 21 14 8 16 9 9 8 16 16 12 7 22 17 14 12 16 8 6 24 14 12 12 11 9 19 16 15 14 12 14 10 10 5;
enddata
min=@sum(col:t);
@for(row(i):@sum(col(j):x(i,j))=1);
@for(col(j):@sum(row(i):x(i,j)*v(i))<40);
@for(col(j):@sum(row(i):x(i,j))<6);
@for(col(j):(t(j)=@max(row(i):x(i,j)*time(i))));
@for(link:@bin(x));
t(j)-t(@min(j))<5;
@for(link:x(i,j)*(t*(@min(j))-@min(x(i,j)*time(i))));
end {:3_50:}这么多错误
本帖最后由 zzpals 于 2012-7-31 12:34 编辑
model:
sets:
row/1..51/:time,v;
col/1..25/:t,tmin;
link(row,col):x;
endsets
data:
time=26 24 22 21 21 20 19 18 18 17 17 17 17 16 16 16 16 16 15 15 15 14 14 14 14 13 13 13 13 12 12 12 12 11 11 11 10 10 10 10 10 10 9 9 9 9 9 8 8 8 8;
v=9 10 14 10 9 16 23 24 16 21 19 17 15 20 15 9 9 6 21 14 8 16 9 9 8 16 16 12 7 22 17 14 12 16 8 6 24 14 12 12 11 9 19 16 15 14 12 14 10 10 5;
enddata
min=@sum(col(j):t(j));
@for(row(i):@sum(col(j):x(i,j))>1);
@for(row(i):@sum(col(j):x(i,j))<1);
@for(col(j):@sum(row(i):x(i,j)*v(i))<40);
@for(col(j):@sum(row(i):x(i,j))<6);
@for(col(j):t(j)=@max(row(i):x(i,j)*time(i)));
@for(col(j):tmin(j)=@if(@sum(row(i):x(i,j)),@min(row(i):x(i,j)*time(i)),0));
@for(col(j):t(j)-tmin(j)<5);
@for(link(i,j):@bin(x));
end貌似要运行很长时间,有两个问题:
1、tmin是一个有25个数的数列吧?
2、x(i,j)=0时tmin为什么?这一句有点不懂
建议楼主优化一下模型,x有51×25=1275个,太大了,可以尝试一下进化算法,直接用lingo或者matlab不一定能有结果。我以前一个210个0-1变量的模型lingo算了20个小时都没给出结果,只有结束后的临时结果。我的这个程序算了1个小时也没结果。当然也可能是我对你的模型理解错误所以程序有问题。 139851 发表于 2012-7-31 00:07 static/image/common/back.gif
model:
sets:
row/1..51/:time,v;
使用编辑上上面的那个“<>”这个符号,在里面写代码就不会错误了。 139851 发表于 2012-7-31 00:07 static/image/common/back.gif
model:
sets:
row/1..51/:time,v;
t(j)-t(@min(j))<5;
你的这一句我这总提示错误,我也不知道怎么改。
我编的程序我运行不出结果,你的有结果吗?
页:
[1]