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