QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4176|回复: 5
打印 上一主题 下一主题

如何用lingo或matlab求最小值

[复制链接]
字体大小: 正常 放大
梦溪517        

18

主题

5

听众

230

积分

升级  65%

  • TA的每日心情
    开心
    2014-2-12 10:47
  • 签到天数: 52 天

    [LV.5]常住居民I

    群组Matlab讨论组

    群组C 语言讨论组

    群组学术交流B

    群组学术交流A

    群组2013年数学建模国赛备

    跳转到指定楼层
    1#
    发表于 2012-7-27 15:11 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    2体力
    已知数据:

    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;

    约束条件和目标函数见附件 约束条件和目标函数

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    139851        

    0

    主题

    4

    听众

    5

    积分

    升级  0%

    该用户从未签到

    自我介绍
    润无声
    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(linkbin(x));
    t(j)-t(@min(j))<5;
    @for(link:x(i,j)*(t*(@min(j))-@min(x(i,j)*time(i))));
    end
    回复

    使用道具 举报

    139851        

    0

    主题

    4

    听众

    5

    积分

    升级  0%

    该用户从未签到

    自我介绍
    润无声
    回复

    使用道具 举报

    zzpals       会长俱乐部认证 

    1

    主题

    3

    听众

    400

    积分

    升级  33.33%

  • TA的每日心情
    开心
    2015-5-6 23:41
  • 签到天数: 108 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组学术交流A

    本帖最后由 zzpals 于 2012-7-31 12:34 编辑
    1. model:
    2. sets:
    3. row/1..51/:time,v;
    4. col/1..25/:t,tmin;
    5. link(row,col):x;
    6. endsets
    7. data:
    8. 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;
    9. 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;
    10. enddata
    11. min=@sum(col(j):t(j));
    12. @for(row(i):@sum(col(j):x(i,j))>1);
    13. @for(row(i):@sum(col(j):x(i,j))<1);
    14. @for(col(j):@sum(row(i):x(i,j)*v(i))<40);
    15. @for(col(j):@sum(row(i):x(i,j))<6);
    16. @for(col(j):t(j)=@max(row(i):x(i,j)*time(i)));
    17. @for(col(j):tmin(j)=@if(@sum(row(i):x(i,j)),@min(row(i):x(i,j)*time(i)),0));
    18. @for(col(j):t(j)-tmin(j)<5);
    19. @for(link(i,j):@bin(x));
    20. end
    复制代码
    貌似要运行很长时间,有两个问题:
    1、tmin是一个有25个数的数列吧?
    2、x(i,j)=0时tmin为什么?这一句有点不懂

    建议楼主优化一下模型,x有51×25=1275个,太大了,可以尝试一下进化算法,直接用lingo或者matlab不一定能有结果。我以前一个210个0-1变量的模型lingo算了20个小时都没给出结果,只有结束后的临时结果。我的这个程序算了1个小时也没结果。当然也可能是我对你的模型理解错误所以程序有问题。
    回复

    使用道具 举报

    darker50        

    107

    主题

    45

    听众

    1万

    积分

  • TA的每日心情
    开心
    2015-4-9 15:42
  • 签到天数: 47 天

    [LV.5]常住居民I

    自我介绍
    开朗,爱各种娱乐的不老男生就是我了,喜欢数学建模,喜欢那种帮助别人的感觉。

    社区QQ达人 助人为乐奖 新人进步奖

    139851 发表于 2012-7-31 00:07
    model:
    sets:
    row/1..51/:time,v;

    使用编辑上上面的那个“<>”这个符号,在里面写代码就不会错误了。
    回复

    使用道具 举报

    zzpals       会长俱乐部认证 

    1

    主题

    3

    听众

    400

    积分

    升级  33.33%

  • TA的每日心情
    开心
    2015-5-6 23:41
  • 签到天数: 108 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组学术交流A

    139851 发表于 2012-7-31 00:07
    model:
    sets:
    row/1..51/:time,v;
    t(j)-t(@min(j))<5;

    你的这一句我这总提示错误,我也不知道怎么改。
    我编的程序我运行不出结果,你的有结果吗?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-28 05:34 , Processed in 0.883684 second(s), 84 queries .

    回顶部