当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。