CVXMOD – Relations

Relations

A relation is formed by comparing two expressions with one of the symbols =, <, <=, > or >=. Valid relations compare two expressions of the same size, or compare one matrix-valued expression with a scalar. All relations (regardless of the sign) are interpreted as non-strict. All relations are elementwise.

Example: Relations
>>> x = optvar('x', 5)
>>> a = param('a')

>>> x <= 0
<5x1 inequality x <= 0; optvars: x>

>>> 2*x <= -a
<5x1 inequality 2*x <= -a; optvars: x>

>>> x == 0
<5x1 equality x == 0; optvars: x>

The logical value of relations can be tested using value(rel). Relations can also be analyzed for their convex properties.

  • isaffine(rel) returns True if rel is of the form expr1 RELOP expr2 where expr1 and expr2 are both affine, and where RELOP is a placeholder for =, <, <=, > or >=.

  • isconvex(rel) returns True if rel is of the form expr1 <= expr2 (or <) where expr1 is convex and expr2 is concave, or if if rel is of the form expr3 >= expr4 (or >) where expr3 is concave and expr4 is convex.

  • classify(rel) prints a summary of the properties of rel.

Example: Testing relations
>>> x = optvar('x', 3)
>>> x.value = matrix((-3, -4, -8))
>>> x <= 0
<3x1 inequality x <= 0; optvars: x>

>>> value(x <= 0)
True

>>> x.value = matrix((-3, -4, 15))
>>> value(x <= 0)
False
Warning: Inconsistency

The current implementation of matrices in CVXOPT gives inconsistent behavior with the relational operators. For example, the statement matrix((1,2,3)) <= 0 will return False. The inconsistency will hopefully be resolved.

Example: Classification for relations
>>> x = optvar('x', 3)
>>> classify(x <= 0)
affine in x.

>>> classify(norm2(x) <= 0)
convex in x.