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才可以使用差分近似,我想這也是避免因差分二次近似導致數值耗散的緣故。表中各算法適用問題規模乃個人總結,僅供參考。
參考鏈接
https://blog.csdn.net/youcans/article/details/118396836
https://blog.csdn.net/weixin_41645983/article/details/93191580
https://wuli.wiki/online/NelMea.html
https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html