原子

一个原子(小写“a”)是一个数学函数,可以应用于 Expression 对象并返回一个 Expression 对象。

原子及其组合正是允许你在CVXPY中构建数学表达式树的机制。

每个原子都标记了关于其领域、符号、曲率、对数-对数曲率和单调性的信息;这些信息让原子实例能够判断它们是否符合DCP或DGP。有关每个原子属性的简洁易懂的摘要,请参见原子函数页面。

原子的表示

从实现的角度来看,一个原子可能是某个类的构造函数。 例如,原子 \(X \mapsto \lambda_{\max}(X)\) 是通过构造 lambda_max 类的实例来应用的,该类直接继承自 Atom 并间接继承自 Expression。 大多数原子都是这样实现的。

或者,一个原子可以是一个包装器,它初始化并返回其他类的原子。例如,运行

import cvxpy as cp
X = cp.Variable(shape=(2,2), symmetric=True)
expr = cp.lambda_min(X)
print(type(expr))

显示

<class 'cvxpy.atoms.affine.unary_operators.NegExpression'>

这是因为 (1) CVXPY 实现了 lambda_min() 作为

\[\lambda_{\min}(X) = -\lambda_{\max}(-X),\]

(2) 否定运算符是一个基于类的原子,(3) 表达式的精确类型基于应用于它的最后一个基于类的原子(如果已经应用了这样的原子)。

Atom

class cvxpy.atoms.atom.Atom(*args)[source]

基础类:Expression

原子的抽象基类。

property domain : list[Constraint]

描述表达式有限的区域闭包的约束列表。

property grad

给出表达式相对于每个变量的(子/超)梯度。

矩阵表达式是向量化的,因此梯度是一个矩阵。 None表示变量值未知或超出域。

Returns:

变量到SciPy CSC稀疏矩阵或None的映射。

is_atom_affine() bool[source]

原子是仿射的吗?

abstract is_atom_concave() bool[source]

原子是凹的吗?

abstract is_atom_convex() bool[source]

原子是凸的吗?

is_atom_log_log_affine() bool[source]

原子对数-对数是否仿射?

is_atom_log_log_concave() bool[source]

原子对数-对数函数是凹的吗?

is_atom_log_log_convex() bool[source]

原子对数-对数凸吗?

abstract is_decr(idx) bool[source]

组合在参数idx中是非递增的吗?

abstract is_incr(idx) bool[来源]

组合在参数 idx 中是否非递减?