minimize中各种优化器总结

python科学计算生态栈中的顶级开源库scipy提供了大量的数值优化求解器,尤其以optimize模块最为显著,其提供了统一的数值优化求解器接口minimize(),虽然方便使用,但是也对非数学专业的人员初次使用时带来存选择困难,尤其是十几种方法统一由同一个接口调用,各方法使用限制、优缺点难以把握,此外官方文档在对各求解器参数设置的解释略显晦涩,部分过于简略,甚至有些凌乱,导致使用起来并非得心应手,今天调研阅读现有优秀博客和官方文档,对该接口的各种方法进行总结,方便后续根据需要快速选择所需算法。

求解器

中文名

jac要求

hess要求

边界约束

条件约束

求解规模

Nelder-Mead

单纯形法

可选

Powell

鲍威尔法

可选

CG

共轭梯度法

可选

中小

BFGS

拟牛顿法

可选

中大

L-BFGS-B

限制内存BFGS法

可选

可选

中大

TNC

截断牛顿法

可选

可选

中大

COBYLA

线性近似法

可选

中大

SLSQP

序列最小二乘法

可选

可选

可选

中大

trust-constr

信赖域算法

可选

可选

可选

中大

Newton-CG

牛顿共轭梯度法

必须

可选

dogleg

信赖域狗腿法

必须

可选

中大

trust-ncg

牛顿共轭梯度信赖域法

必须

可选

trust-exact

高精度信赖域法

必须

可选

trust-krylov

子空间迭代信赖域法

必须

可选

注:
jac可选,代表jac有五种选项{callable, 2-point, 3-point, cs, bool},可任选其一。默认为None,即采用有限差分近似计算;2/3-point 或者 cs 采用2点、3点、中心差分近似计算;若为True,则目标函数需返回目标函数值和jac向量;若为callable,则提供jac计算函数。hess 也有五种选项{callable, 2-point, 3-point, cs, HessianUpdateStrategy},但要注意,只有jac提供计算函数,hess才可以使用差分近似,我想这也是避免因差分二次近似导致数值耗散的缘故。表中各算法适用问题规模乃个人总结,仅供参考。