QQ登录

只需要一步,快速开始

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

最优解为什么用matlab和lingo差的这么多?

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

3503

主题

538

听众

5990

积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    跳转到指定楼层
    1#
    发表于 2013-8-6 11:36 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    QQ截图20130806113608.png


    lingo:
    min=(4*x1^2+2*x2^2+4*x1*x2+2*x2+1)*@exp(x1);
    x2*@sqrt(x1+20)-2*x1<=11;
    x2*@abs(0.1*x1+1.8)+x1>=-11;
    目标函数最优解求得为1

    matlab:
    function [cx,ceqx]=exm041203_nonlcon(x)
    cx=[(-x(1)+x(2)*sqrt(x(1)+20)-11);(-x(1)-x(2)*abs(0.1*x(1)+1.8)-11)];
    ceqx=[ ];

    fx=@(x)(exp(x(1)).*(4*x(1).^2+2*x(2).^2+4*x(1).*x(2)+2*x(2)+1));
    x0=[-16,-12,-8;10,4,-2];
    opts = optimset('Algorithm','active-set');[x,fval]=fmincon(fx,x0,[ ],[ ],[ ],[ ],[],[ ],@exm041203_nonlcon,opts)
    目标函数最优解求得为 0.0081

    这,这是什么情况啊?
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    madio        

    3万

    主题

    1311

    听众

    5万

    积分

  • TA的每日心情
    奋斗
    2024-7-1 22:21
  • 签到天数: 2014 天

    [LV.Master]伴坛终老

    自我介绍
    数学中国站长

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

    群组数学建模培训课堂1

    群组数学中国美赛辅助报名

    群组Matlab讨论组

    群组2013认证赛A题讨论群组

    群组2013认证赛C题讨论群组

    这是非线性规划,一般只能得到局部最优解,局部最优解是依赖于初始值和算法的,所以不同的算法和初始值得到的结果是不一样的,lingo是专业在优化领域的,相对来说求解的解要好很多,lingo也有全局求解器,可以在Lingo->options中开启,这样就可以得到全局最优解了。

      Linearization components added:
          Constraints:           4
          Variables:             4
          Integers:              1

      Global optimal solution found.
      Objective value:                              1.000000
      Objective bound:                              1.000000
      Infeasibilities:                              0.000000
      Extended solver steps:                               0
      Total solver iterations:                            31

      Model Class:                                     MINLP

      Total variables:                      6
      Nonlinear variables:                  3
      Integer variables:                    1

      Total constraints:                    7
      Nonlinear constraints:                3

      Total nonzeros:                      17
      Nonlinear nonzeros:                   6

                                    Variable           Value        Reduced Cost
                                          X1        0.000000            1.000000
                                          X2        0.000000            2.000000

                                         Row    Slack or Surplus      Dual Price
                                           1        1.000000           -1.000000
                                           2        11.00000            0.000000
                                           3        11.00000            0.000000

    点评

    wujianjack2  感谢madio大哥的回复,对于这个问题,我已尝试解决成功,有时间您可以看看6楼我的回复,辛苦您了!  详情 回复 发表于 2013-8-11 19:50
    数学建模社会化
    回复

    使用道具 举报

    1

    主题

    5

    听众

    467

    积分

    升级  55.67%

  • TA的每日心情
    奋斗
    2015-4-2 08:02
  • 签到天数: 88 天

    [LV.6]常住居民II

    2013挑战赛参赛者

    群组2013认证赛A题讨论群组

    群组2013认证赛C题讨论群组

    群组2013年数学建模国赛备

    回复

    使用道具 举报

    3503

    主题

    538

    听众

    5990

    积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    回复

    使用道具 举报

    0

    主题

    7

    听众

    51

    积分

    升级  48.42%

  • TA的每日心情

    2014-2-9 09:25
  • 签到天数: 31 天

    [LV.5]常住居民I

    自我介绍
    = =啦啦啦

    群组2013年数学建模国赛备

    = =研究研究啊~~

    点评

    wujianjack2  该问题我已尝试解决,你可以看看我的回复,欢迎提出你的想法,谢谢支持!  详情 回复 发表于 2013-8-11 19:47
    回复

    使用道具 举报

    21

    主题

    97

    听众

    3110

    积分

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

    [LV.8]以坛为家I

    本帖最后由 wujianjack2 于 2013-8-11 19:58 编辑

       楼主提了一个很好的问题!也很感谢madio大哥的解答,在此给出我就这一问题的想法。
       首先要指出的是楼主的MATLAB程序中出现的一处小疏漏:
       由题意,“cx=[(-x(1)+x(2)*sqrt(x(1)+20)-11);(-x(1)-x(2)*abs(0.1*x(1)+1.8)-11)];”
       应为“cx=[(-2*x(1)+x(2)*sqrt(x(1)+20)-11);(-x(1)-x(2)*abs(0.1*x(1)+1.8)-11)];”这样约束才与原题相同。
    经过这个修改后,再次用MATLAB计算得:
       当x1=-0.9071,x2=-2.1604时,取得最优值feval=0.0475。

      再看用LINGO解决该问题的方案,之所以与MATLAB求解的结果出现如此大的不同,是因为LINGO默认变量非负,而由MATLAB结果知,最优点的x1,x2均取负值,解决的办法是取消对变量非负的限制,修改后的程序代码如下:
    min=(4*x1^2+2*x2^2+4*x1*x2+2*x2+1)*@exp(x1);
    x2*@sqrt(x1+20)-2*x1<=11;
    x2*@abs(0.1*x1+1.8)+x1>=-11;
    @free(x1);@free(x2);

    一般我们先尝试不勾选Global Solver求解,得到的结果如下:
      Linearization components added:
          Constraints:           4
          Variables:             4
          Integers:              1

      Local optimal solution found.
      Objective value:                             0.4753628E-01
      Objective bound:                           0.4753628E-01
      Infeasibilities:                                  0.4746425E-11
      Extended solver steps:                            2
      Total solver iterations:                            37

      Variable           Value        Reduced Cost
          X1         -9.070999         0.000000
          X2         -2.160377         0.000000
    从这个结果来看,与MATLAB的结果是一致的。

    然而,本问题是一个非线性规划问题,局部最优解不一定是全局最优解,勾选Global Solver后求解结果如下:
      Global optimal solution found.
      Objective value:                             0.8053973E-14
      Objective bound:                           -0.1000000E-09
      Infeasibilities:                                   0.000000
      Extended solver steps:                         100
      Total solver iterations:                         11510

      Variable           Value        Reduced Cost
          X1         0.5000000         0.000000
          X2         -1.000000          0.000000
    最优点与之前求解的有明显不同,可见之前求解的局部最优解不是全局最优解。
    事实上,将X1=0.5,X2=-1代入原式中发现最优解结果就是0!

    以上是我个人就这一问题的一点想法,仅供参考,如果有什么疑问与建议,请不吝指出,谢谢支持!
      收起(5)
    有什么好说的
    回复

    使用道具 举报

    21

    主题

    97

    听众

    3110

    积分

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

    [LV.8]以坛为家I

    小熊伴嫁nori 发表于 2013-8-8 13:39
    = =研究研究啊~~

    该问题我已尝试解决,你可以看看我的回复,欢迎提出你的想法,谢谢支持!
    有什么好说的
    回复

    使用道具 举报

    21

    主题

    97

    听众

    3110

    积分

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

    [LV.8]以坛为家I

    madio 发表于 2013-8-6 11:46
    这是非线性规划,一般只能得到局部最优解,局部最优解是依赖于初始值和算法的,所以不同的算法和初始值得到 ...

    感谢madio大哥的回复,对于这个问题,我已尝试解决成功,有时间您可以看看6楼我的回复,辛苦您了!
    有什么好说的
    回复

    使用道具 举报

    0

    主题

    9

    听众

    261

    积分

    升级  80.5%

  • TA的每日心情
    擦汗
    2014-2-11 02:34
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    自我介绍
    Only the strong survive
    回复

    使用道具 举报

    1

    主题

    3

    听众

    309

    积分

    升级  3%

  • TA的每日心情
    开心
    2016-6-7 09:46
  • 签到天数: 53 天

    [LV.5]常住居民I

    自我介绍
    200 字节以内&lt;br /&gt;
    不支持自定义 Discuz! 代码

    社区QQ达人

    群组数学建模

    群组2011年第一期数学建模

    function sh
    fx=@(x)(exp(x(1)).*(4*x(1).^2+2*x(2).^2+4*x(1).*x(2)+2*x(2)+1));
    %  x0=[-16,-12,-8;10,4,-2];这个初值费解,怎么是这样呢?
    x0=zeros(1,2)-1;
    [x,fval]=fmincon(fx,x0,[ ],[ ],[ ],[ ],[],[ ],@exm041203_nonlcon)
    function [cx,ceqx]=exm041203_nonlcon(x)
    cx=[(-2*x(1)+x(2)*sqrt(x(1)+20)-11);(-x(1)-x(2)*abs(0.1*x(1)+1.8)-11)];
    ceqx=[ ];


    结果:
    x =

        0.5000   -1.0000


    fval =

      4.5312e-010
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-7-7 06:23 , Processed in 0.802945 second(s), 109 queries .

    回顶部