我想知道如何为 scipy.optimize.minimize 选择最佳最小化方法,结果可能会有多大不同?
我正在尝试最小化以下表达式(求解 g):
|a1.g.x + a2.g.x^3 - K|
我想知道如何为 scipy.optimize.minimize 选择最佳最小化方法,结果可能会有多大不同?
我正在尝试最小化以下表达式(求解 g):
|a1.g.x + a2.g.x^3 - K|
Scipy 有一个关于数学优化的讲座,其中有一个关于选择最小化方法的部分。摘自该部分的片段:
在不了解梯度的情况下:
- 一般来说,更喜欢 BFGS 或 L-BFGS,即使你必须近似数值梯度。如果您省略参数方法,这些也是默认值 - 取决于问题是否有约束或界限
- 在条件良好的问题上,Powell 和 Nelder-Mead 都是无梯度的方法,在高维上工作得很好,但在条件恶劣的问题上它们会崩溃。
了解梯度:
- BFGS 或 L-BFGS。
- BFGS的计算开销比L-BFGS大,本身也比共轭梯度大。另一方面,BFGS 通常比 CG 需要更少的功能评估。因此,共轭梯度法在优化计算成本低的函数方面优于 BFGS。
与黑森州:
- 如果您可以计算 Hessian,则更喜欢 Newton 方法(Newton-CG 或 TCG)。
如果您有嘈杂的测量结果:
- 使用 Nelder-Mead 或 Powell。
如果我正确解释了您的方程式,我认为这两种方法都BFGS or L-BFGS
可能对您有用。