QQ登录

只需要一步,快速开始

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

求一个lingo编程中的问题!悬赏20大洋!成功后加10大洋!关于lingo约束条件的编写....

[复制链接]
字体大小: 正常 放大
罗梦 实名认证       

5

主题

5

听众

100

积分

升级  0%

  • TA的每日心情
    擦汗
    2014-5-1 08:45
  • 签到天数: 66 天

    [LV.6]常住居民II

    群组Matlab讨论组

    跳转到指定楼层
    #
    发表于 2013-4-18 00:03 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    20体力
    本帖最后由 罗梦 于 2013-4-18 13:25 编辑

    其中Ni为决策变量,即i类木材的购买的数量,这个模型中有一个约束条件是绝对值(Vi-Vj)<=2 (即购买的不同型号的木材之间的长度差不大于2分米)    在lingo中如何编写这个约束啊    主要是这个约束 小弟弄不来   
       各位大神   帮帮忙  小弟在此谢了

    下面是我的程序  大神看下如何修改啊

    sets:
    Pvcell/1..13/:power,area,unitprice,count,voc;
    links(Pvcell,Pvcell):m;!为了好描述;
    endsets
    !目标函数;
    max=@sum(Pvcell(i):count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i):(power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i):@gin(count(i)));
    @for(links(i,j):@abs(voc(i)-voc(j))<=2); !小弟这样编写的,导致模型无解,不知原因,该如何编写这个约束条件呢?;                        
    !初始数据的输入;
    data:
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End

    模型.png (10.66 KB, 下载次数: 206)

    模型.png

    最佳答案

    kf22 查看完整内容

    加一个是非变量a(i)=1 (购买第i号) a(i)=0 不购买 sets: Pvcell/1..13/:a,power,area,unitprice,count,voc; links(Pvcell,Pvcell):m; endsets max=@sum(Pvcell(i):a(i)*count(i)*power(i)); !约束条件; @sum(Pvcell(i)power(i)*unitprice(i))*count(i))
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    罗梦 实名认证       

    5

    主题

    5

    听众

    100

    积分

    升级  0%

  • TA的每日心情
    擦汗
    2014-5-1 08:45
  • 签到天数: 66 天

    [LV.6]常住居民II

    群组Matlab讨论组

    kf22 发表于 2013-4-18 00:03
    加一个是非变量a(i)=1 (购买第i号) a(i)=0 不购买

    sets:

    多谢   不过我发现你这样编  当我加入另一个约束条件  即不同型号的购买数量相等时   运行需要很久   我这样编的就快很多;

    sets:
    Pvcell/1..13/:power,area,unitprice,count,voc,n;
    Pvcell1/1..13/:voc1,m;
    links(Pvcell,Pvcell1):k;
    endsets
    !目标函数;
    max=@sum(Pvcell(i):count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i)power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i)gin(count(i)));
    @for(Pvcell(i):n(i)=@if(count(i)#ne#0,voc(i),0));
    @for(Pvcell1(j):m(j)=@if(count(j)#ne#0,voc1(j),0));
    @for(links(i,j):k(i,j)=@if(m(j)#ne#0#and#n(i)#ne#0,@abs(m(j)-n(i)),0));
    @for(links(i,j):k(i,j)<=2);
    !初始数据的输入;
    data:
    voc1=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End
      另外可以用matlab优化工具箱解决这种问题不啊啊
    回复

    使用道具 举报

    罗梦 实名认证       

    5

    主题

    5

    听众

    100

    积分

    升级  0%

  • TA的每日心情
    擦汗
    2014-5-1 08:45
  • 签到天数: 66 天

    [LV.6]常住居民II

    群组Matlab讨论组

    kf22 发表于 2013-4-18 16:12
    @FOR(Pvcell(I):
       @FOR(Pvcell(J) : @ABS(count(J)-count(I))

    不是  可能是我题没表达清楚   不过问题已经自己解决了   
    程序;

    sets:
    Pvcell/1..13/:power,area,unitprice,count,voc,n;
    Pvcell1/1..13/:voc1,m;
    links(Pvcell,Pvcell1):k;
    endsets
    !目标函数;
    max=@sum(Pvcell(i):count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i)power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i)gin(count(i)));
    @for(Pvcell(i):n(i)=@if(count(i)#ne#0,voc(i),0));
    @for(Pvcell1(j):m(j)=@if(count(j)#ne#0,voc1(j),0));
    @for(links(i,j):k(i,j)=@if(m(j)#ne#0#and#n(i)#ne#0,@abs(m(j)-n(i)),0));
    @for(links(i,j):k(i,j)<=2);
    !初始数据的输入;
    data:
    voc1=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End
       另外可以用matlab优化工具箱解决吗
    回复

    使用道具 举报

    罗梦 实名认证       

    5

    主题

    5

    听众

    100

    积分

    升级  0%

  • TA的每日心情
    擦汗
    2014-5-1 08:45
  • 签到天数: 66 天

    [LV.6]常住居民II

    群组Matlab讨论组

    kf22 发表于 2013-4-18 16:10
    我也是新手 不过目测你的决策变量应该是count  首先 “@for(links(i,j)abs(voc(i)-voc(j))

    谢谢   我的问题已解决   可能是我题目没表达清楚   不过还是谢谢   
    我自己用if和for编的

    sets:
    Pvcell/1..13/:power,area,unitprice,count,voc,n;
    Pvcell1/1..13/:voc1,m;
    links(Pvcell,Pvcell1):k;
    endsets
    !目标函数;
    max=@sum(Pvcell(i):count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i)power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i)gin(count(i)));
    @for(Pvcell(i):n(i)=@if(count(i)#ne#0,voc(i),0));
    @for(Pvcell1(j):m(j)=@if(count(j)#ne#0,voc1(j),0));
    @for(links(i,j):k(i,j)=@if(m(j)#ne#0#and#n(i)#ne#0,@abs(m(j)-n(i)),0));
    @for(links(i,j):k(i,j)<=2);
    !初始数据的输入;
    data:
    voc1=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End
      问下我可以用matlab优化工具箱解决吗
    回复

    使用道具 举报

    罗梦 实名认证       

    5

    主题

    5

    听众

    100

    积分

    升级  0%

  • TA的每日心情
    擦汗
    2014-5-1 08:45
  • 签到天数: 66 天

    [LV.6]常住居民II

    群组Matlab讨论组

    小弟自己用if和for语句将模型成功求解  

    sets:
    Pvcell/1..13/:power,area,unitprice,count,voc,n;
    Pvcell1/1..13/:voc1,m;
    links(Pvcell,Pvcell1):k;
    endsets
    !目标函数;
    max=@sum(Pvcell(i):count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i)power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i)gin(count(i)));
    @for(Pvcell(i):n(i)=@if(count(i)#ne#0,voc(i),0));
    @for(Pvcell1(j):m(j)=@if(count(j)#ne#0,voc1(j),0));
    @for(links(i,j):k(i,j)=@if(m(j)#ne#0#and#n(i)#ne#0,@abs(m(j)-n(i)),0));
    @for(links(i,j):k(i,j)<=2);
    !初始数据的输入;
    data:
    voc1=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End
       另外我想用matlab优化工具箱解决可以吗????????????
    回复

    使用道具 举报

    zzpals       会长俱乐部认证 

    1

    主题

    3

    听众

    400

    积分

    升级  33.33%

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

    [LV.6]常住居民II

    邮箱绑定达人

    群组学术交流A

    kf22 发表于 2013-4-18 16:25
    刚才说错了 估计是要再加一部分是非变量来判断是否买第I号木材 你得把题说全

    但是程序怎么编呢?我尝试加入了一个由count决定的变量a,但是我感觉我还是编错了,因为不出结果。我写的程序是
    1. @for(Pvcell(i):a(i)=@if(count(i)#ge#1,1,0));
    2. @FOR(Pvcell(I):@FOR(Pvcell(J):@ABS(count(J)-count(I))<=2));
    复制代码
    回复

    使用道具 举报

    kf22        

    2

    主题

    7

    听众

    83

    积分

    升级  82.11%

  • TA的每日心情
    无聊
    2014-7-16 20:06
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    自我介绍
    嘿嘿哈哈
    刚才说错了 估计是要再加一部分是非变量来判断是否买第I号木材 你得把题说全

    点评

    zzpals  但是程序怎么编呢?我尝试加入了一个由count决定的变量a,但是我感觉我还是编错了,因为不出结果。我写的程序是  详情 回复 发表于 2013-4-18 17:44
    回复

    使用道具 举报

    kf22        

    2

    主题

    7

    听众

    83

    积分

    升级  82.11%

  • TA的每日心情
    无聊
    2014-7-16 20:06
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    自我介绍
    嘿嘿哈哈
    @FOR(Pvcell(I):
       @FOR(Pvcell(J) : @ABS(count(J)-count(I))<=2
    ));

    点评

    罗梦  不是 可能是我题没表达清楚 不过问题已经自己解决了 程序; sets: Pvcell/1..13/:power,area,unitprice,count,voc,n; Pvcell1/1..13/:voc1,m; links(Pvcell,Pvcell1):k; endsets !目标函数; max=@s  详情 回复 发表于 2013-4-19 17:26
    回复

    使用道具 举报

    kf22        

    2

    主题

    7

    听众

    83

    积分

    升级  82.11%

  • TA的每日心情
    无聊
    2014-7-16 20:06
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    自我介绍
    嘿嘿哈哈
    我也是新手 不过目测你的决策变量应该是count  首先 “@for(links(i,j):@abs(voc(i)-voc(j))<=2); ”中voc我想应该是count     你试试
    @FOR(Pvcell(I):
       @FOR(Pvcell(J):@ABS(count(J)-count(I))<=2
    ));

    点评

    罗梦  谢谢 我的问题已解决 可能是我题目没表达清楚 不过还是谢谢 我自己用if和for编的 sets: Pvcell/1..13/:power,area,unitprice,count,voc,n; Pvcell1/1..13/:voc1,m; links(Pvcell,Pvcell1):k; ends  详情 回复 发表于 2013-4-19 17:17
    回复

    使用道具 举报

    kf22        

    2

    主题

    7

    听众

    83

    积分

    升级  82.11%

  • TA的每日心情
    无聊
    2014-7-16 20:06
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    自我介绍
    嘿嘿哈哈
    加一个是非变量a(i)=1 (购买第i号) a(i)=0 不购买

    sets:
    Pvcell/1..13/:a,power,area,unitprice,count,voc;
    links(Pvcell,Pvcell):m;
    endsets

    max=@sum(Pvcell(i):a(i)*count(i)*power(i));
    !约束条件;
    @sum(Pvcell(i):(power(i)*unitprice(i))*count(i))<=65000;
    @sum(Pvcell(i):area(i)*count(i))<=30000000;
    @for(Pvcell(i):@gin(count(i)));

    @for(pvcell(i):
      @for(pvcell(j)|@abs(voc(j)-voc(i))#gt#2:a(i)+a(j)<=1
    )
    );


    @for(pvcell(i):@bin(a(i))
    );


    !初始数据的输入;
    data:
    voc=46.1 46.91 46.1 38.1 37.73 45.92 37.91 45.98 33.6 36.9 44.8 45.1 37.83;
    power=215 325 200 270 245 295 265 320 210 240 280 295 250;
    area=1276640 1938396 1276640 1637792 1635150 1938396 1635150 1938396 1470144 1626880 1940352 1940352 1668000;
    unitprice=14.9 14.9 14.9 14.9 14.9 14.9 12.5 12.5 12.5 12.5 12.5 12.5 12.5;
    enddata
    End


    在lingo/option中勾选全局最优解再运行 如果是非破解版运行结果不一样 我试过了 只买第1,2,8号木材
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-8-2 20:38 , Processed in 0.646341 second(s), 108 queries .

    回顶部