# Constraints on Linear Functions Tensored with a Free Module¶

Here is an example of a vector-valued linear function:

sage: mip.<x> = MixedIntegerLinearProgram('ppl')   # base ring is QQ
sage: x[0] * vector([3,4]) + 1     # vector linear function
(1, 1) + (3, 4)*x_0


Just like linear_functions, (in)equalities become symbolic inequalities:

sage: 3 + x[0] + 2*x[1] <= 10
3 + x_0 + 2*x_1 <= 10
sage: x[0] * vector([3,4]) + 1 <= 10
(1, 1) + (3, 4)*x_0 <= (10, 10)
sage: x[0] * matrix([[0,0,1],[0,1,0],[1,0,0]]) + x[1] * identity_matrix(3) >= 0
[0 0 0]    [x_1 0         x_0]
[0 0 0] <= [0   x_0 + x_1 0  ]
[0 0 0]    [x_0 0         x_1]

class sage.numerical.linear_tensor_constraints.LinearTensorConstraint(parent, lhs, rhs, equality)

Formal constraint involving two module-valued linear functions.

Note

In the code, we use “linear tensor” as abbreviation for the tensor product (over the common base ring) of a linear function and a free module like a vector/matrix space.

Warning

This class has no reason to be instantiated by the user, and is meant to be used by instances of MixedIntegerLinearProgram.

INPUT:

EXAMPLES:

sage: mip.<b> = MixedIntegerLinearProgram()
sage: (b[2]+2*b[3]) * vector([1,2]) <= b[8] * vector([2,3]) - 5
(1.0, 2.0)*x_0 + (2.0, 4.0)*x_1 <= (-5.0, -5.0) + (2.0, 3.0)*x_2

is_equation()

Whether the constraint is a chained equation

OUTPUT:

Boolean.

EXAMPLES:

sage: mip.<b> = MixedIntegerLinearProgram()
sage: (b[0] * vector([1,2]) == 0).is_equation()
True
sage: (b[0] * vector([1,2]) >= 0).is_equation()
False

is_less_or_equal()

Whether the constraint is a chained less-or_equal inequality

OUTPUT:

Boolean.

EXAMPLES:

sage: mip.<b> = MixedIntegerLinearProgram()
sage: (b[0] * vector([1,2]) == 0).is_less_or_equal()
False
sage: (b[0] * vector([1,2]) >= 0).is_less_or_equal()
True

lhs()

Return the left side of the (in)equality.

OUTPUT:

Instance of sage.numerical.linear_tensor_element.LinearTensor. A linear function valued in a free module.

EXAMPLES:

sage: mip.<x> = MixedIntegerLinearProgram()
sage: (x[0] * vector([1,2]) == 0).lhs()
(1.0, 2.0)*x_0

rhs()

Return the right side of the (in)equality.

OUTPUT:

Instance of sage.numerical.linear_tensor_element.LinearTensor. A linear function valued in a free module.

EXAMPLES:

sage: mip.<x> = MixedIntegerLinearProgram()
sage: (x[0] * vector([1,2]) == 0).rhs()
(0.0, 0.0)

sage.numerical.linear_tensor_constraints.LinearTensorConstraintsParent(linear_functions_parent)

Return the parent for linear functions over base_ring.

The output is cached, so only a single parent is ever constructed for a given base ring.

INPUT:

OUTPUT:

The parent of the linear constraints with the given linear functions.

EXAMPLES:

sage: from sage.numerical.linear_functions import LinearFunctionsParent
sage: from sage.numerical.linear_tensor import LinearTensorParent
sage: from sage.numerical.linear_tensor_constraints import         ....:     LinearTensorConstraintsParent, LinearTensorConstraintsParent
sage: LF = LinearFunctionsParent(QQ)
sage: LT = LinearTensorParent(QQ^2, LF)
sage: LinearTensorConstraintsParent(LT)
Linear constraints in the tensor product of Vector space of dimension 2
over Rational Field and Linear functions over Rational Field

class sage.numerical.linear_tensor_constraints.LinearTensorConstraintsParent_class(linear_tensor_parent)

Parent for LinearTensorConstraint

Warning

This class has no reason to be instantiated by the user, and is meant to be used by instances of MixedIntegerLinearProgram. Also, use the LinearTensorConstraintsParent() factory function.

INPUT/OUTPUT:

EXAMPLES:

sage: p = MixedIntegerLinearProgram()
sage: LT = p.linear_functions_parent().tensor(RDF^2);  LT
Tensor product of Vector space of dimension 2 over Real Double
Field and Linear functions over Real Double Field
sage: from sage.numerical.linear_tensor_constraints import LinearTensorConstraintsParent
sage: LTC = LinearTensorConstraintsParent(LT);  LTC
Linear constraints in the tensor product of Vector space of
dimension 2 over Real Double Field and Linear functions over
Real Double Field
sage: type(LTC)
<class 'sage.numerical.linear_tensor_constraints.LinearTensorConstraintsParent_class'>

Element

alias of LinearTensorConstraint

linear_functions()

Return the parent for the linear functions

OUTPUT:

EXAMPLES:

sage: mip.<x> = MixedIntegerLinearProgram()
sage: ieq = (x[0] * vector([1,2]) >= 0)
sage: ieq.parent().linear_functions()
Linear functions over Real Double Field

linear_tensors()

Return the parent for the linear functions

OUTPUT:

EXAMPLES:

sage: mip.<x> = MixedIntegerLinearProgram()
sage: ieq = (x[0] * vector([1,2]) >= 0)
sage: ieq.parent().linear_tensors()
Tensor product of Vector space of dimension 2 over Real Double
Field and Linear functions over Real Double Field

sage.numerical.linear_tensor_constraints.is_LinearTensorConstraint(x)

Test whether x is a constraint on module-valued linear functions.

INPUT:

• x – anything.

OUTPUT:

Boolean.

EXAMPLES:

sage: mip.<x> = MixedIntegerLinearProgram()
sage: vector_ieq = (x[0] * vector([1,2]) <= x[1] * vector([2,3]))
sage: from sage.numerical.linear_tensor_constraints import is_LinearTensorConstraint
sage: is_LinearTensorConstraint(vector_ieq)
True
sage: is_LinearTensorConstraint('a string')
False