如何为 scipy.optimize.minimize 选择正确的方法?

Sha*_*nam 15 minimization scipy-optimize scipy-optimize-minimize

我想知道如何为 scipy.optimize.minimize 选择最佳的最小化方法以及结果可能有多大不同?

我试图最小化以下表达式(求解 g):

|a1.g.x + a2.g.x^3 - K|

Avi*_*eyi 21

Scipy 有一个关于数学优化的讲座,其中有一个关于选择最小化方法的部分。摘自该部分的片段:

在不知道梯度的情况下:

  • 一般来说,即使您必须近似数值梯度,也更喜欢 BFGS 或 L-BFGS。如果省略参数方法,这些也是默认值 - 取决于问题是否有约束或界限
  • 对于良条件问题,Powell 和 Nelder-Mead 这两种无梯度方法在高维条件下效果很好,但对于病态问题它们就会崩溃。

有了梯度的知识

  • BFGS 或 L-BFGS。
  • BFGS的计算开销比L-BFGS大,其本身也比共轭梯度大。另一方面,BFGS 通常需要比 CG 更少的功能评估。因此,共轭梯度法在优化计算成本低的函数方面比 BFGS 更好。

与黑森州

  • 如果您可以计算 Hessian,请首选牛顿法(Newton-CG 或 TCG)。

如果您的测量有噪音

  • 使用内尔德-米德或鲍威尔。

如果我正确地解释了你的等式,我认为这两者都BFGS or L-BFGS可能适合你。