Nelder Mead的停止标准


11

我正在尝试实现用于优化功能的Nelder-Mead算法。关于Nelder-Mead维基百科页面,除其停止标准外,对整个算法都非常清楚。可悲的是:

检查收敛性[需要澄清]

我自己尝试并测试了一些标准:

  • 如果则停止f(xN+1)f(x1)<ϵ,其中小,并且是单纯形的第个顶点,从低()到高()函数值。换句话说,当单纯形的最大值几乎等于最小值时。我发现这不能正常工作,因为这不能保证函数在单纯形内部的功能。例如,考虑函数:ϵxiif(x1fXñ+1个

    FX=X2
    当然,这对于优化来说是微不足道的,但是假设我们使用NM来做到这一点,并且让我们的两个单纯形点分别为和。该算法将在此处收敛,而找不到最佳值。X1个=-1个X2=1个
  • 第二种选择涉及评估单纯形的质心:如果。假设如果单纯形和质心的最低点具有类似的值,则单纯形足够小以调用收敛。|FX1个-FXC|<ϵ

这是检查收敛的正确方法吗?还是有一种确定的方法来检查这一点?我找不到任何相关资料,因为大多数搜索结果都集中在算法的复杂性上。


1.我不清楚您为什么要比较与;当然,您希望将其与发生的情况进行。2.收敛检查是许多优化中特别棘手的领域;您需要函数没有太大变化,但是如果参数变化很快(即使函数几乎没有变化),则可能尚未收敛,因此人们经常使用同时考虑这两个条件的标准。还有一个问题是您使用相对还是绝对标准(都不足够-例如,当您非常接近0时进行相对测试不会触发)Xñ+1个X1个Xñ
Glen_b -Reinstate Monica

3
Nelder Mead的最佳停止标准是在开始之前。
Mark L. Stone,

只是为了避免@Glen_b注释中的wrt表示法混淆...我相信这里的下标是指单纯形的顶点,而不是算法的迭代。因此,此问题中提出的第一个收敛准则比较了维参数空间中顶点的最低和最高函数值...在问题中未明确说明,但在链接的维基百科页面上对算法进行了描述(并在原始论文中)从最低函数值到最高函数值排序N +1 顶点。ññ+1个
Nate Pope

@NatePope这是我的意图,是的,我将对这个问题进行澄清。\
JAD

Answers:


6

在原始版本的《数字食谱》中,这种“下坡单纯形算法”的说明特别清楚和有用。因此,我将引用其中的相关部分。这是背景:

在一维最小化中,可以将最小值...括起来。唉! 多维空间中没有类似的过程。...我们能做的最好的就是给我们的算法一个开始的猜测;即,将自变量的向量作为第一个尝试点。然后,假定该算法通过N维地形的难以想象的复杂性走下坡路,直到遇到一个(至少是局部的)最小值。ññ

下坡单纯形方法不仅必须从单个点开始,而且还必须以个点开始,以定义初始单纯形。[你可以把这些点为初始的起点P 0与沿] P = P 0 + λ Ë 其中ë 的是Ñ单位矢量,并且其中λ是一个常数,它是你的问题的特性的猜测长度刻度。...ñ+1个P0

(10.4.1)P一世=P0+λË一世
Ë一世ñλ

大多数步骤只是将功能最大的单纯形点(“最高点”)通过单纯形的相对面移动到较低点。...

现在针对当前问题,终止算法。 请注意帐户的一般性:作者为终止任何多维优化器提供了直观而有用的建议,然后具体说明了它如何应用于该特定算法。第一段回答了摆在我们面前的问题:

终止标准可能很微妙。通常,我们可以识别多维算法的一个“周期”或“步骤”。然后,当在该步骤中移动的矢量距离的大小在一定程度上小于某个公差时,可能会终止TOL。或者,我们可以要求终止步骤中函数值的减小部分小于某个公差FTOL。...

请注意,上述一个标准可能被一个异常步骤所欺骗,该异常步骤由于一个或另一个原因未能到达任何地方。因此,通常最好在声称已发现最小值的点重新启动多维最小化例程。对于此重新启动,应重新初始化所有辅助输入量。在下降单纯形法中,例如,则应该重新初始化所述的Ñ + 1个再次单纯形的顶点由方程10.4.1 ,用P 0是所要求保护的最小的顶点中的一个。ññ+1个10.4.1P0

重新启动绝对不会太昂贵;毕竟,您的算法确实收敛到了重启点,现在您已经在此处启动算法了。

[第290-292页。]

数值食谱中与此文本随附的代码阐明了“小数”的含义:当y(自变量的值或函数的值)之间的差“小”于阈值T > 0XÿŤ>0

(1)|X|-|ÿ|FXÿ=2|X|-|ÿ||X|+|ÿ|<Ť

FXÿ=|X|+|ÿ|/2

的左侧有时称为“相对绝对差”。在某些字段中,它表示为百分比,在此称为“相对百分比误差”。有关更多选择和术语,请参阅Wikipedia上的相对变化和差异文章。1个

参考

William H.Press 等。数字食谱:科学计算的艺术。 剑桥大学出版社(1986)。请访问http://numerical.recipes/以获取最新版本。


1
感谢您对重启的见解。我以为这只是从不同的起点运行算法,但实际上似乎还有更多。
JAD

我之前从未考虑过“重新启动”的可能含义。在目前的情况下,我可能会使用“抛光”之类的术语来表示“重新开始”,但也许这也不完全正确。单纯形方法所倡导的“重新启动”类型可能对此非常特殊。
ub

9

答案不完整,但评论时间太长,可能会使您走上正轨。

John C. Nash在“计算机的紧凑数值方法”第二版的第171页上简要介绍了此主题。并且恰好是R optim()函数中实现的Nelder-Mead例程引用的参考。引用相关部分:

ŤËsŤ=[一世=1个ñ+1个[小号b一世-小号¯]2/ñ]1个/2
小号¯=一世=1个ñ+1个小号b一世/ñ+1个

小号bñ+1个ñbHb大号

小号b大号小号bH

快速查看的来源optim()表示它使用(定义单纯形的点的)最高和最低函数值之间的差来确定收敛性:高值和低值if (VH <= VL + convtol || VL <= abstol) break;在哪里。需要注意的是,我快速浏览了源代码,并且可能遗漏了一些内容。VHVL

现在,您的选择(1)似乎是Nash提倡的第二种方法。他还讨论了您遇到的问题:

ñ+1个ñ-1个ñ

Nash在这里引用的原始引用是:

Nelder JA,Mead R.,1965年。一种用于函数最小化的单纯形方法。计算机杂志7:308-313。

O'Neill R.1971。算法AS 47:使用单纯形过程进行函数最小化。应用统计20:338-345。


3

FŤ所有角落 FX一世Ť
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

ñ+1个

  1. 问题:崎rough的地形,可能具有不良的缩放比例或愚蠢的约束条件
  2. 算法,平衡探索和移动(以及软件复杂性)
  3. 适当的停止规则

仍有待观察-欢迎使用实际的测试用例。

Stopiter除了一个类,真实的类还具有许多停止条件patience;最简单的是挂钟时间。)

另请参阅:
NLopt:包括Nelder-Mead在内的许多算法,易于比较。尤其请参见有关下坡比较算法的说明 :耐心停止
min_improvement

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.