cvxpy.atoms.elementwise package¶
All of the atoms listed here operate elementwise on expressions. For example,
exp
exponentiates each entry of
expressions that are supplied to it.
abs¶
entr¶
exp¶
huber¶
- class cvxpy.atoms.elementwise.huber.huber(x, M: int = 1)[source]¶
Bases:
Elementwise
The Huber function
\[\begin{split}\operatorname{Huber}(x, M) = \begin{cases} 2M|x|-M^2 & \text{for } |x| \geq |M| \\ |x|^2 & \text{for } |x| \leq |M|. \end{cases}\end{split}\]\(M\) defaults to 1.
- Parameters:
x (Expression) – The expression to which the huber function will be applied.
M (Constant) – A scalar constant.
inv_pos¶
kl_div¶
- class cvxpy.atoms.elementwise.kl_div.kl_div(x, y)[source]¶
Bases:
Elementwise
\(x\log(x/y) - x + y\)
For disambiguation between kl_div and rel_entr, see https://github.com/cvxpy/cvxpy/issues/733
log¶
log1p¶
logistic¶
maximum¶
minimum¶
neg¶
pos¶
power¶
- class cvxpy.atoms.elementwise.power.power(x, p, max_denom: int = 1024)[source]¶
Bases:
Elementwise
Elementwise power function \(f(x) = x^p\).
If
expr
is a CVXPY expression, thenexpr**p
is equivalent topower(expr, p)
.For DCP problems, the exponent p must be a numeric constant. For DGP problems, p can also be a scalar Parameter.
Specifically, the atom is given by the cases
\[\begin{split}\begin{array}{ccl} p = 0 & f(x) = 1 & \text{constant, positive} \\ p = 1 & f(x) = x & \text{affine, increasing, same sign as $x$} \\ p = 2,4,8,\ldots &f(x) = |x|^p & \text{convex, signed monotonicity, positive} \\ p < 0 & f(x) = \begin{cases} x^p & x > 0 \\ +\infty & x \leq 0 \end{cases} & \text{convex, decreasing, positive} \\ 0 < p < 1 & f(x) = \begin{cases} x^p & x \geq 0 \\ -\infty & x < 0 \end{cases} & \text{concave, increasing, positive} \\ p > 1,\ p \neq 2,4,8,\ldots & f(x) = \begin{cases} x^p & x \geq 0 \\ +\infty & x < 0 \end{cases} & \text{convex, increasing, positive}. \end{array}\end{split}\]Note
For DCP problems,
p
cannot be represented exactly, so a rational, i.e., fractional, approximation must be made. (No such approximation is made for DGP problems.)Internally,
power
computes a rational approximation top
with a denominator up tomax_denom
. Increasingmax_denom
can give better approximations.When
p
is anint
orFraction
object, the approximation is usually exact.Note
The final domain, sign, monotonicity, and curvature of the
power
atom are determined by the rational approximation top
, not the input parameterp
.For example,
>>> from cvxpy import Variable, power >>> x = Variable() >>> g = power(x, 1.001) >>> g.p Fraction(1001, 1000) >>> g Expression(CONVEX, POSITIVE, (1, 1)) results in a convex atom with implicit constraint :math:`x \geq 0`, while >>> g = power(x, 1.0001) >>> g.p 1 >>> g Expression(AFFINE, UNKNOWN, (1, 1))
results in an affine atom with no constraint on
x
.When \(p > 1\) and
p
is not a power of two, the monotonically increasing version of the function with full domain,\[\begin{split}f(x) = \begin{cases} x^p & x \geq 0 \\ 0 & x < 0 \end{cases}\end{split}\]can be formed with the composition
power(pos(x), p)
.The symmetric version with full domain,
\[f(x) = |x|^p\]can be formed with the composition
power(abs(x), p)
.
- Parameters:
x (cvxpy.Variable) –
p (int, float, Fraction, or Parameter.) – Scalar power.
p
may be a Parameter in DGP programs, but not in DCP programs.max_denom (int) – The maximum denominator considered in forming a rational approximation of
p
; only relevant when solving as a DCP program.
rel-entr¶
- class cvxpy.atoms.elementwise.rel_entr.rel_entr(x, y)[source]¶
Bases:
Elementwise
\(x\log(x/y)\)
For disambiguation between rel_entr and kl_div, see https://github.com/cvxpy/cvxpy/issues/733