百年孤独 发表于 2013-8-6 11:36

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




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 =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');=fmincon(fx,x0,[ ],[ ],[ ],[ ],[],[ ],@exm041203_nonlcon,opts)
目标函数最优解求得为 0.0081

这,这是什么情况啊?

madio 发表于 2013-8-6 11:46

这是非线性规划,一般只能得到局部最优解,局部最优解是依赖于初始值和算法的,所以不同的算法和初始值得到的结果是不一样的,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

秋晨之梦 发表于 2013-8-6 13:38

顶!!!!!!!!!

百年孤独 发表于 2013-8-6 14:27

秋晨之梦 发表于 2013-8-6 13:38 static/image/common/back.gif
顶!!!!!!!!!

谢了~~~

小熊伴嫁nori 发表于 2013-8-8 13:39

{:3_49:}= =研究研究啊~~

wujianjack2 发表于 2013-8-11 19:16

本帖最后由 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!

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

wujianjack2 发表于 2013-8-11 19:47

小熊伴嫁nori 发表于 2013-8-8 13:39 static/image/common/back.gif
= =研究研究啊~~

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

wujianjack2 发表于 2013-8-11 19:50

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

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

warriorIverson 发表于 2014-2-6 19:26

高端啊…………

shengshengchina 发表于 2015-7-25 09:11

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;
=fmincon(fx,x0,[ ],[ ],[ ],[ ],[],[ ],@exm041203_nonlcon)
function =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
页: [1]
查看完整版本: 最优解为什么用matlab和lingo差的这么多?