minimize(method='trust-constr')#
- scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
最小化受限於約束的純量函數。
- 參數:
- gtolfloat, optional
以拉格朗日梯度範數作為終止條件的容忍度。當拉格朗日梯度的無窮範數(即最大絕對值)和約束違反都小於
gtol
時,演算法將終止。預設值為 1e-8。- xtolfloat, optional
以自變數的變化作為終止條件的容忍度。當
tr_radius < xtol
時,演算法將終止,其中tr_radius
是演算法中使用的信任區域的半徑。預設值為 1e-8。- barrier_tolfloat, optional
演算法終止的障礙參數閾值。當存在不等式約束時,演算法僅在障礙參數小於 barrier_tol 時終止。預設值為 1e-8。
- sparse_jacobian{bool, None}, optional
決定如何表示約束的 Jacobian 矩陣。如果為布林值,則所有約束的 Jacobian 矩陣都將轉換為相應的格式。如果為 None(預設值),則 Jacobian 矩陣將不會轉換,但只有當它們都具有相同的格式時,演算法才能繼續。
- initial_tr_radius: float, optional
初始信任半徑。信任半徑給出了連續迭代中解點之間的最大距離。它反映了演算法對最佳化問題的局部近似的信任程度。對於精確的局部近似,信任區域應該很大;對於僅在當前點附近有效的近似,信任區域應該很小。信任半徑在整個最佳化過程中自動更新,
initial_tr_radius
是其初始值。預設值為 1([1],第 19 頁建議)。- initial_constr_penaltyfloat, optional
初始約束懲罰參數。懲罰參數用於平衡減少目標函數和滿足約束的要求。它用於定義評價函數:
merit_function(x) = fun(x) + constr_penalty * constr_norm_l2(x)
,其中constr_norm_l2(x)
是包含所有約束的向量的 l2 範數。評價函數用於接受或拒絕試驗點,而constr_penalty
權衡減少目標函數和約束這兩個衝突的目標。懲罰在整個最佳化過程中自動更新,initial_constr_penalty
是其初始值。預設值為 1([1],第 19 頁建議)。- initial_barrier_parameter, initial_barrier_tolerance: float, optional
障礙子問題的初始障礙參數和初始容忍度。兩者僅在存在不等式約束時使用。對於處理受不等式約束
c(x) <= 0
約束的最佳化問題min_x f(x)
,演算法引入鬆弛變數,求解問題min_(x,s) f(x) + barrier_parameter*sum(ln(s))
,受限於等式約束c(x) + s = 0
,而不是原始問題。此子問題針對barrier_parameter
的遞減值以及終止容忍度的遞減值求解,從障礙參數的initial_barrier_parameter
和障礙容忍度的initial_barrier_tolerance
開始。兩個值的預設值均為 0.1([1],第 19 頁建議)。另請注意,barrier_parameter
和barrier_tolerance
以相同的預因子更新。- factorization_methodstring or None, optional
分解約束 Jacobian 矩陣的方法。使用 None(預設值)進行自動選擇,或使用以下方法之一
‘NormalEquation’ (需要 scikit-sparse)
‘AugmentedSystem’
‘QRFactorization’
‘SVDFactorization’
方法 ‘NormalEquation’ 和 ‘AugmentedSystem’ 只能與稀疏約束一起使用。演算法所需的投影將分別使用法線方程式和增廣系統方法計算,如 [1] 中所述。‘NormalEquation’ 計算
A A.T
的 Cholesky 分解,而 ‘AugmentedSystem’ 執行增廣系統的 LU 分解。它們通常提供相似的結果。‘AugmentedSystem’ 預設用於稀疏矩陣。方法 ‘QRFactorization’ 和 ‘SVDFactorization’ 只能與稠密約束一起使用。它們分別使用 QR 和 SVD 分解計算所需的投影。‘SVDFactorization’ 方法可以處理行秩不足的 Jacobian 矩陣,並且將在其他分解方法失敗時使用(這可能意味著在需要時將稀疏矩陣轉換為稠密格式)。預設情況下,‘QRFactorization’ 用於稠密矩陣。
- finite_diff_rel_stepNone or array_like, optional
有限差分近似的相對步長。
- maxiterint, optional
演算法迭代的最大次數。預設值為 1000。
- verbose{0, 1, 2, 3}, optional
演算法詳細程度的級別
0(預設值):靜默工作。
1:顯示終止報告。
2:在迭代期間顯示進度。
3:在迭代期間顯示進度(更完整的報告)。
- dispbool, optional
如果為 True(預設值),則當 verbose 為 0 時,將其設定為 1。
- 回傳值:
OptimizeResult
具有以下文件中記錄的欄位。請注意以下事項所有對應於約束的值都按照它們傳遞給求解器的順序排列。並且對應於 bounds 約束的值放在其他約束之後。
所有函數、Jacobian 矩陣或 Hessian 矩陣的評估次數都對應於實際 Python 函數呼叫的次數。例如,這表示如果 Jacobian 矩陣是通過有限差分估算的,則 Jacobian 矩陣的評估次數將為零,而函數評估次數將通過有限差分估算期間的所有呼叫次數遞增。
- xndarray, shape (n,)
找到的解。
- optimalityfloat
解處拉格朗日梯度的無窮範數。
- constr_violationfloat
解處的最大約束違反。
- funfloat
解處的目標函數值。
- gradndarray, shape (n,)
解處目標函數的梯度。
- lagrangian_gradndarray, shape (n,)
解處拉格朗日函數的梯度。
- nitint
總迭代次數。
- nfevinteger
目標函數評估次數。
- njevinteger
目標函數梯度評估次數。
- nhevinteger
目標函數 Hessian 矩陣評估次數。
- cg_niterint
共軛梯度法迭代總次數。
- method{‘equality_constrained_sqp’, ‘tr_interior_point’}
使用的最佳化方法。
- constrlist of ndarray
解處的約束值列表。
- jaclist of {ndarray, sparse matrix}
解處約束的 Jacobian 矩陣列表。
- vlist of ndarray
解處約束的拉格朗日乘數列表。對於不等式約束,正乘數表示上限有效,負乘數表示下限有效,如果乘數為零,則表示約束無效。
- constr_nfevlist of int
每個約束的約束評估次數列表。
- constr_njevlist of int
每個約束的 Jacobian 矩陣評估次數列表。
- constr_nhevlist of int
每個約束的 Hessian 矩陣評估次數列表。
- tr_radiusfloat
最後一次迭代時信任區域的半徑。
- constr_penaltyfloat
最後一次迭代時的懲罰參數,請參閱 initial_constr_penalty。
- barrier_tolerancefloat
最後一次迭代時障礙子問題的容忍度。僅適用於具有不等式約束的問題。
- barrier_parameterfloat
最後一次迭代時的障礙參數。僅適用於具有不等式約束的問題。
- execution_timefloat
總執行時間。
- messagestr
終止訊息。
- status{0, 1, 2, 3, 4}
終止狀態
0:超出函數評估的最大次數。
1:滿足 gtol 終止條件。
2:滿足 xtol 終止條件。
3:callback 函數請求終止。
4:約束違反超出 'gtol'。
在版本 1.15.0 中變更:如果約束違反超出 gtol,則
result.success
現在將為 False。- cg_stop_condint
最後一次迭代時 CG 子問題終止的原因
0:未評估 CG 子問題。
1:達到迭代限制。
2:達到信任區域邊界。
3:偵測到負曲率。
4:滿足容忍度。
參考文獻