最佳化與尋根 (scipy.optimize
)#
SciPy optimize
提供了用於最小化(或最大化)目標函數的功能,可能受限於約束條件。它包括用於非線性問題的求解器(支援區域和全域最佳化演算法)、線性規劃、約束和非線性最小平方、尋根和曲線擬合。
不同求解器之間共用的常用函數和物件有
|
顯示最佳化求解器的其他選項的文件。 |
表示最佳化結果。 |
|
最佳化#
純量函數最佳化#
|
單變數純量函數的局部最小化。 |
minimize_scalar
函數支援以下方法
局部(多元)最佳化#
|
單個或多個變數的純量函數的最小化。 |
minimize
函數支援以下方法
- minimize(method=’Nelder-Mead’)
- minimize(method=’Powell’)
- minimize(method=’CG’)
- minimize(method=’BFGS’)
- minimize(method=’Newton-CG’)
- minimize(method=’L-BFGS-B’)
- minimize(method=’TNC’)
- minimize(method=’COBYLA’)
- minimize(method=’COBYQA’)
- minimize(method=’SLSQP’)
- minimize(method=’trust-constr’)
- minimize(method=’dogleg’)
- minimize(method=’trust-ncg’)
- minimize(method=’trust-krylov’)
- minimize(method=’trust-exact’)
約束條件作為單個物件或來自以下類別的物件列表傳遞給 minimize
函數
|
變數的非線性約束。 |
|
變數的線性約束。 |
簡單邊界約束會單獨處理,並且有一個特殊的類別用於它們
|
變數的邊界約束。 |
實作 HessianUpdateStrategy
介面的擬牛頓策略可用於近似 minimize
函數中的 Hessian(僅適用於 ‘trust-constr’ 方法)。實作此介面的可用擬牛頓方法有
|
Broyden-Fletcher-Goldfarb-Shanno (BFGS) Hessian 更新策略。 |
|
對稱秩 1 Hessian 更新策略。 |
全域最佳化#
|
使用盆地跳躍演算法尋找函數的全域最小值。 |
|
通過暴力窮舉在給定範圍內最小化函數。 |
|
尋找多元函數的全域最小值。 |
|
使用 SHG 最佳化尋找函數的全域最小值。 |
|
使用雙重退火尋找函數的全域最小值。 |
|
使用 DIRECT 演算法尋找函數的全域最小值。 |
最小平方與曲線擬合#
非線性最小平方#
|
求解具有變數邊界的非線性最小平方問題。 |
線性最小平方#
|
求解 |
|
求解具有變數邊界的線性最小平方問題。 |
|
非參數等張回歸。 |
曲線擬合#
|
使用非線性最小平方將函數 f 擬合到數據。 |
尋根#
純量函數#
|
尋找純量函數的根。 |
|
使用 Brent 方法在括號區間中尋找函數的根。 |
|
使用帶有雙曲線外推的 Brent 方法在括號區間中尋找函數的根。 |
|
使用 Ridder 方法在區間中尋找函數的根。 |
|
使用二分法在區間內尋找函數的根。 |
|
使用牛頓-拉弗森(或正割或哈雷)方法尋找實數或複數函數的根。 |
|
使用 TOMS 演算法 748 方法尋找根。 |
|
表示尋根結果。 |
root_scalar
函數支援以下方法
下表列出了情況和適當的方法,以及每次迭代(和每次函數評估)的漸近收斂速率,以成功收斂到簡單根 (*)。二分法是其中最慢的方法,每次函數評估增加一位準確性,但保證收斂。其他括號方法都(最終)為每次函數評估將準確位數增加約 50%。基於導數的方法,都建立在 newton
之上,如果初始值接近根,則可以非常快速地收斂。它們也可以應用於在複數平面(的子集)上定義的函數。
f 的域 |
括號? |
導數? |
求解器 |
收斂 |
||
---|---|---|---|---|---|---|
fprime |
fprime2 |
保證? |
速率 (*) |
|||
R |
是 |
不適用 |
不適用 |
|
|
|
R 或 C |
否 |
否 |
否 |
正割法 |
否 |
1.62 (1.62) |
R 或 C |
否 |
是 |
否 |
牛頓法 |
否 |
2.00 (1.41) |
R 或 C |
否 |
是 |
是 |
哈雷法 |
否 |
3.00 (1.44) |
另請參閱
scipy.optimize.cython_optimize
– 尋根函數的類型化 Cython 版本
不動點尋找
|
尋找函數的不動點。 |
多維#
|
尋找向量函數的根。 |
root
函數支援以下方法
逐元素最小化和尋根#
線性規劃 / MILP#
|
混合整數線性規劃 |
|
線性規劃:最小化受線性等式和不等式約束的線性目標函數。 |
linprog
函數支援以下方法
單純形法、內點法和修正單純形法支援回呼函數,例如
一個示範 linprog 回呼介面的範例回呼函數。 |
指派問題#
解決線性總和指派問題。 |
|
|
近似二次指派問題和圖形匹配問題的解。 |
quadratic_assignment
函數支援以下方法
工具#
有限差分近似#
|
純量或向量值函數導數的有限差分近似。 |
|
通過將梯度函數與梯度的(前向)有限差分近似值進行比較,來檢查梯度函數的正確性。 |
線搜索#
|
括起函數的最小值。 |
|
尋找滿足強 Wolfe 條件的 alpha。 |
Hessian 近似#
|
L-BFGS 近似逆 Hessian 的線性運算子。 |
用於實作 Hessian 更新策略的介面。 |
基準問題#
|
Rosenbrock 函數。 |
|
Rosenbrock 函數的導數(即梯度)。 |
|
Rosenbrock 函數的 Hessian 矩陣。 |
|
Rosenbrock 函數的 Hessian 矩陣與向量的乘積。 |
舊版函數#
不建議在新腳本中使用以下函數;所有這些方法都可以通過更新、更一致的介面訪問,這些介面由上面的介面提供。
最佳化#
通用多元方法
|
使用下坡單純形演算法最小化函數。 |
|
使用修改後的 Powell 方法最小化函數。 |
|
使用非線性共軛梯度演算法最小化函數。 |
|
使用 BFGS 演算法最小化函數。 |
|
使用牛頓-CG 方法對函數進行無約束最小化。 |
約束多元方法
|
使用 L-BFGS-B 演算法最小化函數 func。 |
|
使用截斷牛頓演算法,在變數受邊界約束的情況下最小化函數。 |
|
使用線性近似約束最佳化 (COBYLA) 方法最小化函數。 |
|
使用循序最小平方規劃最小化函數 |
單變數(純量)最小化方法
|
純量函數的有界最小化。 |
|
給定一個單變數函數和一個可能的括號,傳回函數的局部最小值,該最小值被隔離到 tol 的分數精度。 |
|
使用黃金分割法傳回單變數函數的最小值。 |
最小平方#
|
最小化一組方程式的平方和。 |
尋根#
通用非線性求解器
|
尋找函數的根。 |
|
使用 Broyden 的第一種雅可比矩陣近似值尋找函數的根。 |
|
使用 Broyden 的第二種雅可比矩陣近似值尋找函數的根。 |
當非線性求解器在指定的 maxiter 內未能收斂時引發的例外。 |
大規模非線性求解器
|
使用 Krylov 近似逆雅可比矩陣尋找函數的根。 |
|
使用(擴展的)Anderson 混合尋找函數的根。 |
|
使用 Broyden 的第一種雅可比矩陣近似值尋找函數的根。 |
|
一個簡單的包裝器,使用 solve 方法反轉雅可比矩陣。 |
|
使用 Krylov 近似逆雅可比矩陣尋找函數的根。 |
簡單迭代求解器
|
使用調整後的對角雅可比矩陣近似值尋找函數的根。 |
|
使用純量雅可比矩陣近似值尋找函數的根。 |
|
使用對角 Broyden 雅可比矩陣近似值尋找函數的根。 |