本文簡要介紹 python 語言中 scipy.optimize.NonlinearConstraint
的用法。
用法:
class scipy.optimize.NonlinearConstraint(fun, lb, ub, jac='2-point', hess=<scipy.optimize._hessian_update_strategy.BFGS object>, keep_feasible=False, finite_diff_rel_step=None, finite_diff_jac_sparsity=None)#
對變量的非線性約束。
約束具有一般不等式形式:
lb <= fun(x) <= ub
在這裏,自變量 x 的向量作為形狀 (n,) 的 ndarray 傳遞,
fun
返回具有 m 個分量的向量。可以使用等界來表示等式約束,或使用無限界來表示單側約束。
- fun: 可調用的
定義約束的函數。簽名是
fun(x) -> array_like, shape (m,)
。- lb, ub: array_like
約束的下限和上限。每個數組必須具有形狀 (m,) 或為標量,在後一種情況下,約束的所有分量的界限都相同。使用
np.inf
用適當的符號來指定單方麵的約束。設置組件磅和ubequal 表示等式約束。請注意,您可以通過設置不同的組件來混合不同類型的約束:間隔、單邊或相等磅和ub有必要的。- jac: {callable, ‘2-point’, ‘3-point’, ‘cs’}, 可選
計算雅可比矩陣的方法(m-by-n 矩陣,其中元素 (i, j) 是 f[i] 對 x[j] 的偏導數)。關鍵字 {‘2-point’, ‘3-point’, ‘cs’} 選擇有限差分方案進行數值估計。可調用對象必須具有以下簽名:
jac(x) -> {ndarray, sparse matrix}, shape (m, n)
。默認為“2 點”。- hess: {callable, ‘2-point’, ‘3-point’, ‘cs’, HessianUpdateStrategy, None}, 可選
計算 Hessian 矩陣的方法。關鍵字 {‘2-point’, ‘3-point’, ‘cs’} 選擇用於數值估計的有限差分方案。或者,實現
HessianUpdateStrategy
接口的對象可用於近似 Hessian。當前可用的實現有:可調用對象必須返回
dot(fun, v)
的 Hessian 矩陣,並且必須具有以下簽名:hess(x, v) -> {LinearOperator, sparse matrix, array_like}, shape (n, n)
。這裏v
是形狀為 (m,) 的 ndarray,其中包含拉格朗日乘數。- keep_feasible: 類似於 bool 的數組,可選
是否在整個迭代過程中保持約束組件可行。單個值為所有組件設置此屬性。默認為假。對等式約束沒有影響。
- finite_diff_rel_step: None or array_like, optional:
有限差分近似的相對步長。默認為無,它將根據有限差分方案自動選擇一個合理的值。
- finite_diff_jac_sparsity: {None, array_like, sparse matrix}, optional:
定義用於有限差分估計的雅可比矩陣的稀疏結構,其形狀必須為 (m, n)。如果 Jacobian 在每一行中隻有很少的非零元素,則提供稀疏結構將大大加快計算速度。零條目意味著雅可比行列式中的相應元素相同為零。如果提供,則強製使用 ‘lsmr’ trust-region 求解器。如果 None (默認),則將使用密集差分。
參數 ::
注意:
有限差分方案 {‘2-point’, ‘3-point’, ‘cs’} 可用於逼近 Jacobian 或 Hessian。但是,我們不允許將其用於同時逼近兩者。因此,每當通過finite-differences 估計雅可比時,我們都需要使用quasi-Newton 策略之一來估計 Hessian。
方案‘cs’ 可能是最準確的,但需要該函數正確處理複雜的輸入,並在分析上可連續到複平麵。方案“3-point”比“2-point”更準確,但需要兩倍的操作。
例子:
約束
x[0] < sin(x[1]) + 1.9
>>> from scipy.optimize import NonlinearConstraint >>> import numpy as np >>> con = lambda x: x[0] - np.sin(x[1]) >>> nlc = NonlinearConstraint(con, -np.inf, 1.9)
相關用法
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.line_search用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.minimize_scalar用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.KrylovJacobian用法及代碼示例
- Python SciPy optimize.toms748用法及代碼示例
- Python SciPy optimize.linprog_verbose_callback用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
- Python SciPy optimize.brute用法及代碼示例
- Python SciPy optimize.newton用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
- Python SciPy optimize.Bounds用法及代碼示例
- Python SciPy optimize.fixed_point用法及代碼示例
- Python SciPy optimize.rosen_hess用法及代碼示例
- Python SciPy optimize.nnls用法及代碼示例
- Python SciPy optimize.broyden1用法及代碼示例
- Python SciPy optimize.broyden2用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.NonlinearConstraint。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。