数学建模社区-数学中国
标题:
如何用lingo或matlab求最小值
[打印本页]
作者:
梦溪517
时间:
2012-7-27 15:11
标题:
如何用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;
约束条件和目标函数见附件
2012-7-27 15:11 上传
下载附件
(949.27 KB)
约束条件和目标函数
作者:
139851
时间:
2012-7-31 00:07
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
作者:
139851
时间:
2012-7-31 00:10
这么多错误
作者:
zzpals
时间:
2012-7-31 10:55
本帖最后由 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个小时也没结果。当然也可能是我对你的模型理解错误所以程序有问题。
作者:
darker50
时间:
2012-7-31 11:27
139851 发表于 2012-7-31 00:07
model:
sets:
row/1..51/:time,v;
使用编辑上上面的那个“<>”这个符号,在里面写代码就不会错误了。
作者:
zzpals
时间:
2012-7-31 11:49
139851 发表于 2012-7-31 00:07
model:
sets:
row/1..51/:time,v;
t(j)-t(@min(j))<5;
你的这一句我这总提示错误,我也不知道怎么改。
我编的程序我运行不出结果,你的有结果吗?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5