0

我正在使用 fminunc。具体来说,我使用 BFGS 的准牛顿法和用户提供的梯度来最小化函数。它进行了大约 3 次迭代,然后进行了一堆函数评估。我有一个函数,我试图在调用它时最小化显示它的值,我可以看到,在第 4 次迭代的几次调用之后,它明显小于第 3 次迭代时的值,但是 Matlab 继续评估函数和我不确定为什么。我可以调整什么来告诉它接受更新并进入下一个迭代吗?

4

1 回答 1

1

听起来您对优化器非常了解,让我们看看我们是否可以帮助优化集设置。从mathworks 文档中,它指出了如何放宽公差以使用以下参数终止优化:

TolFun 函数值的终止容差,一个正标量。默认值为 1e-6。

TolX x 上的终止容差,一个正标量。默认值为 1e-6。

听起来你有优化工具箱,在这种情况下,我相信你可以使用optimset来获取优化参数,然后使用fminunc来初始化它。(常规 optimset 的文档没有指出你可以将 optimsetfminunc作为参数传递,但我认为它适用于工具箱版本。

options = optimset('fminunc');
% you can try either of these two or both, but I would
% recommend only changing one at a time :-)
options = optimset(options,'TolFun',myNewTolFun)
options = optimset(options,'TolX',myNewTolX)
% then you can make your call to the optimizer
x = fminunc(fun,x0,options)

可以在此处找到有关 optim-settings 的令人痛苦的细节。

于 2013-06-29T01:03:20.623 回答