测试数值优化方法:Rosenbrock 与真实测试函数

计算科学 优化 数据集
2021-12-17 23:44:09

无导数优化器似乎有两种主要的测试函数:

是否可以将 10d Rosenbrock 与任何真正的 10d 问题进行比较?
可以通过多种方式进行比较:描述局部最小值的结构,
或者在 Rosenbrock 和一些实际问题上运行优化器 ABC;
但这两个似乎都很难。

(也许理论家和实验者只是两种截然不同的文化,所以我要一个嵌合体?)

也可以看看:


(2014 年 9 月添加):
下图从 10 个随机起点比较了 8d 中 14 个测试函数上的 3 个 DFO 算法:来自NLOpt
× 的 BOBYQA PRAXIS SBPLX 14 个 N 维测试函数, 来自这个Matlab的gist.github下的 Python由 A. Hedar × 每个函数的边界框中的 10 个统一随机起点。

例如,在 Ackley 上,第一行显示 SBPLX 是最好的,而 PRAXIS 很糟糕;在 Schwefel 上,右下角的面板显示 SBPLX 在第 5 个随机起点上找到最小值。

总体而言,BOBYQA 在 1 项上最好,PRAXIS 在 5 项上,SBPLX(~ Nelder-Mead 重启)在 13 个测试功能中的 7 项上最好,Powersum 是一个折腾。YMMV!特别是,约翰逊说,“我建议你不要在全局优化中使用函数值 (ftol) 或参数容差 (xtol)。”

结论:不要把所有的钱都放在一匹马或一个测试功能上。

在此处输入图像描述

4个回答

Rosenbrock 之类的简单函数用于调试和预测试新编写的算法:它们实现和执行速度很快,而不能很好地解决标准问题的方法不太可能很好地解决现实生活中的问题。

有关昂贵函数的无导数方法的最新全面比较,请参阅无导数优化:算法回顾和软件实现比较LM Rios, NV Sahinidis - doi 10.1007/s10898-012-9951-y Journal of Global Optimization, 2012。(另见网页:http ://archimedes.cheme.cmu.edu/?q=dfocomp )

像 Rosenbrock 函数这样的合成测试用例的优点是可以与现有的文献进行比较,并且在社区中有一种感觉,即好的方法在这些测试用例上的表现如何。如果每个人都使用自己的测试用例,就很难就哪些方法有效,哪些无效。

(我希望没有人反对我结束这次讨论。我是新来的,所以如果我违反了请告诉我!)

进化算法的测试函数现在比 2 或 3 年前要复杂得多,正如(最近的)2015 进化计算大会等会议上竞赛中使用的套件所见。看:

http://www.cec2015.org/

这些测试套件现在包括在变量之间具有多个非线性交互的函数。变量的数量可以多达 1000 个,我猜在不久的将来可能会增加。

另一项最近的创新是“黑盒优化竞赛”。见:http ://bbcomp.ini.rub.de/

算法可以查询点 x 的值 f(x),但它不能获取梯度信息,特别是它不能对目标函数的解析形式做任何假设。

从某种意义上说,这可能更接近您所说的“真正的问题”,但在一个有组织的、客观的环境中。

你可以两全其美。NIST 有一系列关于最小化器的问题,比如拟合这个10 次多项式,具有预期的结果和不确定性。当然,证明这些值是实际的最佳解,或者其他局部最小值的存在和性质比在受控数学表达式上更困难。