fminunc没有收敛

时间:2015-06-15 09:59:47

标签: matlab optimization

我使用fminunc来最小化450个变量的函数,这里是行

 opts = optimset('Display','Iter','MaxIter', 10000000,'MaxFunEvals', 100000000,'TolX', 1e-12,'TolFun', 1e-12);
 [x,fval,exitflag] = fminunc(@function,x0,opts);

请注意,我不提供渐变,因此fminunc使用准牛顿算法。 在一些迭代之后,它会使用此最终消息

fminunc stopped because it cannot decrease the objective function
along the current search direction.

但是,如果我使用获得的新点重新启动代码,它会继续减少,所以我不是最小的。 在我看来,算法只是沿着一个方向寻找最小值,当它找到它时,它停止而是开始在其他方向中搜索。

任何线索如何修改问题以便不会发生并找到最小值?或者我应该使用其他程序来更快地完成它?

编辑:函数是凸的

1 个答案:

答案 0 :(得分:0)

如果您的目标函数中存在数字噪声,则可能会出现此类问题。然后渐变/粗麻布变得嘈杂并且步骤关闭,并且线搜索以精确的错误结束。

尝试在起始值周围的间隔中绘制标准,但将其中一个参数从x0(i)更改为 linspace(x0(i)(1-1e07,x(i)(1 + 1e07),100),当时是一个数字。

如果功能看起来很紧张,那可能是你的问题。

或者,也许你是在一个功能不凸的区域开始的?在那种情况下,尝试fminsearch开始。

否则,请考虑使用分析梯度。

另外,也许您的公差设置得太精细了。尝试将tolfun和tolx减少到1e-08。你的问题是非常高的维度。

相关问题