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、Ubarray_like

约束的下界和上界。每个数组必须具有形状(m,)或标量,在后一种情况下,约束的所有组件的边界将相同。使用 np.inf 使用适当的符号来指定单侧约束。设置组件 lbub 等于表示相等约束。注意,通过设置不同的组件,可以混合不同类型的约束:间隔约束、单边约束或相等约束 lbub 如果有必要的话。

jac{可调用,‘2点’,‘3点’,‘cs’},可选

计算雅可比矩阵(m×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},可选

计算黑森矩阵的方法。关键字{‘2-point’,‘3-point’,‘cs’}选择用于数值估计的有限差分格式。或者,对象实现 HessianUpdateStrategy 界面可以用来近似黑森语。目前可用的实施包括:

可调用对象必须返回的Hessian矩阵 dot(fun, v) 并且必须有以下签名: hess(x, v) -> {{LinearOperator, sparse matrix, array_like}}, shape (n, n) 。这里 v 是包含拉格朗日乘子的形状(m,)的ndarray。

keep_feasiblebool的array_like,可选

是否使约束组件在整个迭代过程中保持可用。单个值会为所有组件设置此属性。默认值为False。对相等约束无效。

finite_diff_rel_step: None or array_like, optional

有限差分近似的相对步长。默认值为None,它将根据有限差分方案自动选择一个合理的值。

finite_diff_jac_sparsity: {{None, array_like, sparse matrix}}, optional

定义了用于有限差分估计的雅可比矩阵的稀疏结构,其形状必须为(m,n)。如果雅可比函数中只有几个非零元素 each 行,提供稀疏结构将大大加快计算速度。零条目表示雅可比中的相应元素等同为零。如果提供,则强制使用“lsmr”信任区域解算器。如果无(默认),则将使用密集差异。

注意事项

有限差分格式{‘2点’,‘3点’,‘cs’}可以用来逼近雅可比或黑森。然而,我们不允许同时使用它来近似两者。因此,无论何时通过有限差分来估计雅可比,我们都需要使用拟牛顿策略之一来估计海森。

方案‘CS’可能是最精确的,但是需要函数来正确地处理复杂输入,并且能够解析地连续到复杂平面。“3点”方案比“2点”方案更精确,但需要的运算量是“2点”方案的两倍。

示例

约束 x[0] < sin(x[1]) + 1.9

>>> from scipy.optimize import NonlinearConstraint
>>> con = lambda x: x[0] - np.sin(x[1])
>>> nlc = NonlinearConstraint(con, -np.inf, 1.9)