原子

原子(小写字母”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]

Bases: Expression

Abstract base class for atoms.

property domain: List[Constraint]

A list of constraints describing the closure of the region where the expression is finite.

property grad

Gives the (sub/super)gradient of the expression w.r.t. each variable.

Matrix expressions are vectorized, so the gradient is a matrix. None indicates variable values unknown or outside domain.

Returns:

A map of variable to SciPy CSC sparse matrix or None.

is_atom_affine() bool[source]

Is the atom affine?

abstract is_atom_concave() bool[source]

Is the atom concave?

abstract is_atom_convex() bool[source]

Is the atom convex?

is_atom_log_log_affine() bool[source]

Is the atom log-log affine?

is_atom_log_log_concave() bool[source]

Is the atom log-log concave?

is_atom_log_log_convex() bool[source]

Is the atom log-log convex?

abstract is_decr(idx) bool[source]

Is the composition non-increasing in argument idx?

abstract is_incr(idx) bool[source]

Is the composition non-decreasing in argument idx?