原子¶
一个原子(小写“a”)是一个数学函数,可以应用于
Expression 对象并返回一个 Expression 对象。
原子及其组合正是允许你在CVXPY中构建数学表达式树的机制。
每个原子都标记了关于其领域、符号、曲率、对数-对数曲率和单调性的信息;这些信息让原子实例能够判断它们是否符合DCP或DGP。有关每个原子属性的简洁易懂的摘要,请参见原子函数页面。
- Affine Atoms
- Elementwise Atoms
- 其他原子
- cummax
- cumprod
- cvar
- diff_pos
- dotsort
- eye_minus_inv
- geo_mean
- gmatmul
- harmonic_mean
- inv_prod
- lambda_max
- lambda_min
- lambda_sum_largest
- lambda_sum_smallest
- log_det
- log_sum_exp
- matrix_frac
- max
- min
- mixed_norm
- norm
- norm1
- norm2
- norm_inf
- normNuc
- one_minus_pos
- perspective
- pf_eigenvalue
- pnorm
- Pnorm
- ptp
- prod
- quad_form
- quad_over_lin
- resolvent
- sigma_max
- std
- sum_largest
- sum_smallest
- sum_squares
- SuppFuncAtom
- tr_inv
- tv
- var
- von_neumann_entr
原子的表示¶
从实现的角度来看,一个原子可能是某个类的构造函数。
例如,原子 \(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]¶
描述表达式有限的区域闭包的约束列表。