doilovematlab 发表于 2014-2-3 14:42

lingo求解最大值问题和matlab结果不一致

本帖最后由 doilovematlab 于 2014-2-3 14:43 编辑

函数函数y=2.1*(1-x+2.*x.^2).*exp(-x.^2/2);的图像为:

明明在x=-1处取到最大值,但是在lingo求解却不是:

这是怎么回事,我的lingo代码有错吗?


madio 发表于 2014-2-3 15:06

上面不是说了找到了local optimal solution,就是说这只是一个局部最优解,你可能对于优化算法了解的不多,一般非线性的是不能保证找到全局最优的,需要使用全局求解器或者选择更加合适的初始值

doilovematlab 发表于 2014-2-3 15:11

madio 发表于 2014-2-3 15:06 static/image/common/back.gif
上面不是说了找到了local optimal solution,就是说这只是一个局部最优解,你可能对于优化算法了解的不多, ...

额,不好意思,我是初学者,但是我已经勾选了全局求解器,还是不能得到全局最优解:

如果确实如你所说,那么怎样用lingo求解全局最优解呢?其实这个题目我用matlab的遗传算法或粒子群算法可以求解,只是代码稍显复杂,所以我看lingo能不能求,结果就这样了。。。

doilovematlab 发表于 2014-2-3 15:19

madio 发表于 2014-2-3 15:06 static/image/common/back.gif
上面不是说了找到了local optimal solution,就是说这只是一个局部最优解,你可能对于优化算法了解的不多, ...
很奇怪的是,我勾选了使用全局求解器,得到的结果还是这样:

上面说全局最优解已经找到了,但是这个最优解并不是正确的,正确的应该在-1取到最大值。为什么。

madio 发表于 2014-2-3 15:21

doilovematlab 发表于 2014-2-3 15:11 static/image/common/back.gif
额,不好意思,我是初学者,但是我已经勾选了全局求解器,还是不能得到全局最优解:

如果确实如你所 ...

我觉得你可能需要看一下数学中国有关优化的培训,优化算法都是有局限的,初始值很重要,你可以使用init段去加入初始值,对于启发式算法确实好一些,但是需要设置的问题也很多,不是可以随便用的,需要对优化算法有一定的了解才可以。

doilovematlab 发表于 2014-2-3 15:59

madio 发表于 2014-2-3 15:21 static/image/common/back.gif
我觉得你可能需要看一下数学中国有关优化的培训,优化算法都是有局限的,初始值很重要,你可以使用init段 ...

嫩不能举个例子啊,比如我这个问题要怎样才能得到全局最优解,init部分怎么写呢?

wujianjack2 发表于 2014-2-4 16:35

    自己的电脑不在身边,没有LINGO软件,略显遗憾啊。
    你用的是LINGO 14么?你把@exp(-x^2/2)改为:@exp(-(x^2)/2)试试看,我回学校后有时间再帮你看看吧。
    欢迎积极发言讨论,祝新年快乐!

wujianjack2 发表于 2014-2-4 21:15

   结果如下:
   

doilovematlab 发表于 2014-2-5 11:34

wujianjack2 发表于 2014-2-4 21:15 static/image/common/back.gif
结果如下:

good,非常感谢你的帮助,我后来看了lingo运算符优先级才知道负号是先运算的,学习了。

问心 发表于 2014-2-5 20:45

楼主好人。。。我也遇到同样的问题
页: [1] 2
查看完整版本: lingo求解最大值问题和matlab结果不一致