我想知道如何为scipy.optimize.minimize选择最佳的最小化方法,以及结果有何不同?
我正在尝试最小化以下表达式(求解g):
|a1.g.x + a2.g.x^3 - K|
答案 0 :(得分:0)
Scipy举办了有关数学优化的讲座,他们在课堂上有section on choosing a minimization method。该部分摘录:
不了解渐变:
- 通常,首选BFGS或 L-BFGS,即使您必须近似于数字梯度。这些 如果省略参数方法,也是默认值-取决于是否 问题有局限性
- 关于条件良好的问题, Powell和Nelder-Mead都是无梯度方法,在高温下效果很好 维度,但因病情恶化而崩溃。
了解渐变:
- BFGS或L-BFGS。
- 计算开销 BFGS的值大于L-BFGS的值,而L-BFGS本身的值大于 共轭梯度。另一方面,BFGS通常需要更少 功能评价比CG。因此共轭梯度法更好 在优化计算便宜的函数方面比BFGS更好。
使用黑森州:
- 如果您可以计算粗麻布,则首选牛顿法(Newton-CG或TCG)。
如果测量噪声很大:
- 使用Nelder-Mead或Powell。
如果我正确地解释了您的方程式,我认为BFGS or L-BFGS
都可能对您有用。