QQ登录

只需要一步,快速开始

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

lingo和matlab求解

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

2

主题

7

听众

380

积分

234

升级  26.67%

  • TA的每日心情
    擦汗
    2015-10-26 18:13
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    社区QQ达人

    跳转到指定楼层
    1#
    发表于 2015-7-22 16:44 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    5体力
    这道题怎么做啊,求详细求解过程。matlab不写也可以,lingo怎么算
    360反馈意见截图1620072084103102.png

    最佳答案

    liwenhui 查看完整内容

    情况1:求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的最优值,这等价于求解20个非线性最优化问题,可以用下面的程序:情况2:求a 的值被约束为{0,1,2,3,4},b的值被约束为{2,4,6,7}的最优解,这可以考虑用一个多项式来约束a和b的值,可以试试如下的程序:在MATLAB中应该也有类似的方法。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    liwenhui        

    70

    主题

    65

    听众

    5199

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    情况1:求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的最优值,这等价于求解20个非线性最优化问题,可以用下面的程序:
    1. model:
    2.   sets:
    3.     looppt1/1..5/:a;
    4.     looppt2/1..4/:b;
    5.   endsets
    6.   data:
    7.     a=0,1,2,3,4;
    8.     b=2,4,6,7;
    9.   enddata
    10.   submodel model1:
    11.     min=4*x1^3-p1*x1-2*x2;
    12.     x1+x2<4;
    13.     2*x1+x2<5;
    14.     -x1+p2*x2>2;
    15.   endsubmodel
    16.   calc:
    17.     @for(looppt1(i):
    18.       @for(looppt2(j):
    19.         p1=a(i);
    20.         p2=b(j);
    21.         @solve(model1);
    22.       );
    23.     );
    24.   endcalc
    25. end
    复制代码
    情况2:求a 的值被约束为{0,1,2,3,4},b的值被约束为{2,4,6,7}的最优解,这可以考虑用一个多项式来约束a和b的值,可以试试如下的程序:
    1. model:
    2.   min=4*x1^3-a*x1-2*x2;
    3.   x1+x2<4;
    4.   2*x1+x2<5;
    5.   -x1+b*x2>2;  
    6.   a*(a-1)*(a-2)*(a-3)*(a-4)=0;
    7.   (b-2)*(b-4)*(b-6)*(b-7)=0;
    8. end
    复制代码
    在MATLAB中应该也有类似的方法。

    点评

    wujianjack2  不错! 我觉得这样会好一点: model: sets: bs/1..4/: b, b_c; endsets data: b = 2, 4, 6, 7; enddata min=4*x1^3-a*x1-2*x2; x1+x2  详情 回复 发表于 2015-7-23 18:50
    simonsnow  谢谢大哥热情帮助!我用matlab计算结果和你给的lingo结果是一样的  发表于 2015-7-23 16:36
    simonsnow  我觉得按照前者和后者的理解本质应该是一样的吧  详情 回复 发表于 2015-7-23 16:35
    四十岁后,不滞于物,草木竹石均可为剑。
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5199

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    你是想求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的值呢?还是想求a 的值被约束为{0,1,2,3,4},b的值被约束为{2,4,6,7}的值?

    点评

    simonsnow  题目就是这么出的,我的理解应该是后者  详情 回复 发表于 2015-7-23 16:29
    回复

    使用道具 举报

    Sassoon        

    3

    主题

    11

    听众

    31

    积分

    升级  27.37%

  • TA的每日心情

    2016-4-16 18:59
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    自我介绍
    认真 努力

    社区QQ达人

    用lingo规划  ,只能换值
    用matlab,对a,b进行循环就行了

    点评

    liwenhui  LINGO也有循环语句功能。  详情 回复 发表于 2015-7-23 16:22
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5199

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    Sassoon 发表于 2015-7-23 15:48
    用lingo规划  ,只能换值
    用matlab,对a,b进行循环就行了

    LINGO也有循环语句功能。
    四十岁后,不滞于物,草木竹石均可为剑。
    回复

    使用道具 举报

    simonsnow 实名认证       

    2

    主题

    7

    听众

    380

    积分

    234

    升级  26.67%

  • TA的每日心情
    擦汗
    2015-10-26 18:13
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    社区QQ达人

    liwenhui 发表于 2015-7-23 15:17
    你是想求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的值呢?还是想求a 的值被约束为{0,1,2,3,4},b ...

    题目就是这么出的,我的理解应该是后者
    234
    回复

    使用道具 举报

    simonsnow 实名认证       

    2

    主题

    7

    听众

    380

    积分

    234

    升级  26.67%

  • TA的每日心情
    擦汗
    2015-10-26 18:13
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    社区QQ达人

    liwenhui 发表于 2015-7-23 16:30
    情况1:求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的最优值,这等价于求解20个非线性最优化问题,可以 ...

    我觉得按照前者和后者的理解本质应该是一样的吧

    点评

    liwenhui  本质上不太一样, 前者其实可以看作一种情景分析,即参数取不同值时的最优解; 后者就是一个简单混合非线性优化问题; 就看你的研究目的是什么。  详情 回复 发表于 2015-7-23 16:47
    234
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5199

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    simonsnow 发表于 2015-7-23 16:35
    我觉得按照前者和后者的理解本质应该是一样的吧

    本质上不太一样,
    前者其实可以看作一种情景分析,即参数取不同值时的最优解;
    后者就是一个简单混合非线性优化问题;

    就看你的研究目的是什么。
    四十岁后,不滞于物,草木竹石均可为剑。
    回复

    使用道具 举报

    21

    主题

    97

    听众

    3110

    积分

  • TA的每日心情
    奋斗
    2014-3-2 00:26
  • 签到天数: 243 天

    [LV.8]以坛为家I

    liwenhui 发表于 2015-7-22 16:44
    情况1:求a分别等于 0,1,2,3,4, b分别等于2,4,6,7时的最优值,这等价于求解20个非线性最优化问题,可以 ...

      不错!
      我觉得这样会好一点:
    model:
      sets:
      bs/1..4/: b, b_c;
      endsets
      data:
      b = 2, 4, 6, 7;
      enddata
      min=4*x1^3-a*x1-2*x2;
      x1+x2<4;
      2*x1+x2<5;
      -x1+b_p*x2>2;  
      @bnd(0, a, 4); @gin(a);
      b_p = @sum(bs(i): b(i)*b_c(i));
      @for(bs(i): @bin(b_c(i)));
      @sum(bs(i): b_c(i)) = 1;
    end

    点评

    liwenhui  可能这是见仁见智,你给出的程序中这一段可能结构化不是很强:在a属于{0,1,2,3,4} b属于{2,4,6,7}的时候,你的表述可以实现。但如果 a属于{1,4,5,6,7,10} b属于{4,5,9,15,-2,0}的时候,你的约束条件就会变。同时  详情 回复 发表于 2015-7-24 11:24
    有什么好说的
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5199

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    wujianjack2 发表于 2015-7-23 18:50
    不错!
      我觉得这样会好一点:
    model:

    可能这是见仁见智,你给出的程序中这一段可能结构化不是很强:
    1. @bnd(0, a, 4); @gin(a);
    2.   b_p = @sum(bs(i): b(i)*b_c(i));
    3.   @for(bs(i): @bin(b_c(i)));
    4.   @sum(bs(i): b_c(i)) = 1;
    复制代码
    在a属于{0,1,2,3,4} b属于{2,4,6,7}的时候,你的表述可以实现。但如果 a属于{1,4,5,6,7,10} b属于{4,5,9,15,-2,0}的时候,你的约束条件就会变。同时,你这种约束方法虽可行,但繁琐。

    如果用多项式来约束的话结合@prod,可以用更简洁、紧凑,结构化更强。比如,我可以表示为 @prod(set_a:a-pet)=0。不知你是否同意。


    点评

    wujianjack2  另外,你可以试一下两段不同的表述的细微的运行时间与结果的差别,在我的LINGO 15上,我这段程序用local求解器返回的结果即也是global,你的表述在我这里不是。 也可以看看迭代步数的区别,当然,我这个表述的代  详情 回复 发表于 2015-7-24 12:36
    wujianjack2  确是见仁见智。 我这么写的原因是让约束的形式尽量一点,这样,如果LINGO求解效果不是很好,我可以用其它工具替代。所以,我在最初写模型时就会尽量考虑写成适用于更多求解器能够求解的形式,而不是只是LINGO。  详情 回复 发表于 2015-7-24 12:28
    四十岁后,不滞于物,草木竹石均可为剑。
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-7-25 23:12 , Processed in 0.744358 second(s), 116 queries .

    回顶部