當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy optimize.NonlinearConstraint用法及代碼示例


本文簡要介紹 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)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.NonlinearConstraint。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。