约束条件¶
约束是限制优化问题域的等式或不等式。CVXPY有七种类型的约束:非正、等式或零、半正定、二阶锥、指数锥、三维幂锥和N维幂锥。绝大多数用户只需要创建前三种类型的约束。此外,大多数用户除了如何创建约束外,不需要了解关于约束的其他任何信息。然而,约束API确实提供了一些高级用户可能会觉得有用的方法;例如,一些API允许您检查对偶变量值和残差。
约束¶
-
class cvxpy.constraints.constraint.Constraint(args, constr_id=
None)[源代码]¶ 基础类:
Canonical约束的基类。
约束是施加在数学表达式或其列表上的等式、不等式或更一般地,广义不等式。
NonPos¶
-
class cvxpy.constraints.nonpos.NonPos(expr, constr_id=
None)[source]¶ 基础类:
Constraint一个形式为 \(x \leq 0\) 的不等式约束。
创建不等式约束的首选方法是通过运算符重载。要将表达式
x约束为非正数,请写x <= 0;要将x约束为非负数,请写x >= 0。与此约束相关的对偶变量是非负的,而不是非正的。因此,此约束的对偶变量属于极锥而不是对偶锥。
注意:严格不等式不受支持,因为它们在数值环境中没有意义。
- Parameters:¶
- expr : Expression¶
要约束的表达式。
- constr_id : int¶
约束的唯一标识符。
零¶
-
class cvxpy.constraints.zero.Zero(expr, constr_id=
None)[source]¶ 基础类:
Constraint形式为 \(x = 0\) 的约束。
创建
Zero约束的首选方法是通过运算符重载。要将表达式x约束为零,只需编写x == 0。前者会创建一个以x为参数的Zero约束。
PSD¶
-
class cvxpy.constraints.psd.PSD(expr, constr_id=
None)[源代码]¶ 基础类:
Cone一个形式为 \(\frac{1}{2}(X + X^T) \succcurlyeq_{S_n^+} 0\) 的约束
对二维表达式
X应用PSD约束,约束其对称部分为半正定:即,它约束X使得\[z^T(X + X^T)z \geq 0,\]对于所有的 \(z\)。
创建
PSD约束的首选方法是通过运算符重载。要将表达式X约束为PSD,请写X >> 0;要将其约束为负半定,请写X << 0。不提供严格的定值约束,因为它们在数值环境中没有意义。
SOC¶
-
class cvxpy.constraints.second_order.SOC(t, X, axis: int =
0, constr_id=None)[source]¶ 基础类:
Cone每行/每列的二阶锥约束。
假设
t是一个与X的列(行)长度相同的向量,适用于axis == 0(1)。- t¶
二阶约束的标量部分。
- X¶
一个矩阵,其行/列都是锥体。
- axis¶
按列0或行1切片。
ExpCone¶
-
class cvxpy.constraints.exponential.ExpCone(x: Expression, y: Expression, z: Expression, constr_id=
None)[source]¶ 基础类:
Cone重新表述的指数锥约束。
对 \(x, y, z\) 进行元素操作。
原始圆锥体:
\[K = \{(x,y,z) \mid y > 0, ye^{x/y} <= z\} \cup \{(x,y,z) \mid x \leq 0, y = 0, z \geq 0\}\]重新表述的锥体:
\[K = \{(x,y,z) \mid y, z > 0, y\log(y) + x \leq y\log(z)\} \cup \{(x,y,z) \mid x \leq 0, y = 0, z \geq 0\}\]- Parameters:¶
- x : Expression¶
x 在指数锥中。
- y : Expression¶
y 在指数锥中。
- z : Expression¶
z 在指数锥中。
RelEntrConeQuad¶
-
class cvxpy.constraints.exponential.RelEntrConeQuad(x: Expression, y: Expression, z: Expression, m: int, k: int, constr_id=
None)[source]¶ 基础类:
Cone标量相对熵锥的近似构造
定义:
\[K_{re}=\text{cl}\{(x,y,z)\in\mathbb{R}_{++}\times \mathbb{R}_{++}\times\mathbb{R}_{++}\:x\log(x/y)\leq z\}\]由于上述定义与ExpCone非常相似,我们提供了一个转换方法。
关于近似的更多细节可以在论文第10页的定理3中找到: 半定矩阵对数的近似。
- Parameters:¶
- x : Expression¶
x 在(近似)标量相对熵锥中
- y : Expression¶
y 在(近似)标量相对熵锥中
- z : Expression¶
z 在(近似)标量相对熵锥中
- m : Parameter directly related to the number of generated nodes for the quadrature¶
- algorithm : approximation used in the
- k : Another parameter controlling the approximation¶
PowCone3D¶
-
class cvxpy.constraints.power.PowCone3D(x, y, z, alpha, constr_id=
None)[source]¶ 基础类:
Cone一个表示3D功率锥约束集合的对象
x[i]**alpha[i] * y[i]**(1-alpha[i]) >= |z[i]| 对于所有 i x >= 0, y >= 0
如果参数 alpha 是一个标量,它将被提升为一个与 x、y、z 的(共同)大小匹配的向量。alpha 的数值(或在向量情况下的其分量)必须是开区间 (0, 1) 中的一个数字。
我们将参数(x, y, z, 和 alpha)的扁平化表示存储为 Expression 对象。我们针对这些扁平化表示构造对偶变量。
PowConeND¶
-
class cvxpy.constraints.power.PowConeND(W, z, alpha, axis: int =
0, constr_id=None)[source]¶ 基础类:
Cone表示一组N维幂锥约束,这些约束在数学上等同于以下代码片段(该片段在cvxpy对象上错误地使用了numpy函数):
np.prod(np.power(W, alpha), axis=axis) >= np.abs(z), W >= 0
所有参数必须是类似Expression的,并且z必须满足 z.ndim <= 1。当axis=0(axis=1)时,alpha的列(行)必须总和为1。
注意:与PowCone3D不同,我们不会尝试将alpha提升为适当的形状。W和alpha的维度必须完全匹配。
注意:目前尚未为此类约束实现对偶变量。
FiniteSet¶
-
class cvxpy.constraints.finite_set.FiniteSet(expre, vec, ineq_form: bool =
False, constr_id=None)[源代码]¶ 基础类:
Constraint将表达式的每个条目限制在给定的实数集合中取值。
- Parameters:¶
- expre : Expression¶
给定的表达式需要被约束。这个表达式必须是仿射的。 如果
expre有多个元素,那么约束将分别应用于每个元素。也就是说,在解决带有此约束的问题后,我们应该有:for e in expre.flatten(): print(e.value in vec) # => True- vec : Union[Expression, np.ndarray, set]¶
每个
expre条目被约束到的有限值集合。- ineq_form : bool¶
控制此约束如何规范化为混合整数线性约束。
如果为True,则我们使用一个包含
vec.size - 1个不等式约束、一个等式约束和vec.size - 1个二进制变量的公式,用于expre的每个元素。如果为False,则我们使用一个包含
vec.size个二进制变量和两个等式约束的公式,用于expre的每个元素。默认为False。对于使用简单分支定界方法的混合整数求解器,
ineq_form=True的情况可能会加快求解速度。
- property ineq_form : bool¶
在两种约束方法之间选择,使用
ineq_form=False时,与Parameter类型一起工作。
OpRelEntrConeQuad¶
-
class cvxpy.constraints.exponential.OpRelEntrConeQuad(X: Expression, Y: Expression, Z: Expression, m: int, k: int, constr_id=
None)[source]¶ 基础类:
Cone算子相对熵锥的近似构造
定义:
\[K_{re}^n=\text{cl}\{(X,Y,T)\in\mathbb{H}^n_{++}\times \mathbb{H}^n_{++}\times\mathbb{H}^n_{++}\:D_{\text{op}}\succeq T\}\]关于近似的更多细节可以在论文第10页的定理3中找到: 半定矩阵对数的近似。
- Parameters:¶
- X : Expression¶
x 在(近似)算子相对熵锥中
- Y : Expression¶
y 在(近似)算子相对熵锥中
- Z : Expression¶
Z 在(近似)算子相对熵锥中
- m : int¶
必须为正数。控制用于矩阵对数局部近似中的正交节点数。增加此值会提高局部近似的质量,但不会显著扩大近似有效的输入区域。
- k : int¶
必须为正数。设置执行正交近似的缩放点数量。增加此值将扩大近似有效的输入区域。
:param 这个近似使用了 \(m + k\) 个半定约束。: