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