无导数优化器似乎有两种主要的测试函数:
- 像Rosenbrock 函数ff.这样的单行 函数,带有起点
- 带有插值器的真实数据点集
是否可以将 10d Rosenbrock 与任何真正的 10d 问题进行比较?
可以通过多种方式进行比较:描述局部最小值的结构,
或者在 Rosenbrock 和一些实际问题上运行优化器 ABC;
但这两个似乎都很难。
(也许理论家和实验者只是两种截然不同的文化,所以我要一个嵌合体?)
也可以看看:
- scicomp.SE 问题:在哪里可以获得用于测试算法/例程的良好数据集/测试问题?
- Hooker,“测试启发式:我们都错了”是尖刻的:“对竞争的强调......告诉我们哪些算法更好,而不是为什么。”
(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)。”
结论:不要把所有的钱都放在一匹马或一个测试功能上。