# 14.2.9 Class Domain¶

mosek::fusion::Domain

The Domain class defines a set of static method for creating various variable and constraint domains. A Domain object specifies a subset of $$\real^n$$, which can be used to define the feasible domain of variables and expressions.

For further details on the use of these, see Model.variable and Model.constraint.

Static members

Domain.axis – Set the dimension along which the cones are created.

Domain.binary – Creates a domain of binary variables.

Domain.equalsTo – Defines the domain consisting of a fixed point.

Domain.greaterThan – Defines the domain specified by a lower bound in each dimension.

Domain.inDExpCone – Defines the dual exponential cone.

Domain.inDPowerCone – Defines the dual power cone.

Domain.inPExpCone – Defines the primal exponential cone.

Domain.inPPowerCone – Defines the primal power cone.

Domain.inPSDCone – Creates a domain of Positive Semidefinite matrices.

Domain.inQCone – Defines the domain of quadratic cones.

Domain.inRange – Creates a domain specified by a range in each dimension.

Domain.inRotatedQCone – Defines the domain of rotated quadratic cones.

Domain.integral – Creates a domain of integral variables.

Domain.isLinPSD – Creates a domain of Positive Semidefinite matrices.

Domain.isTrilPSD – Creates a domain of Positive Semidefinite matrices.

Domain.lessThan – Defines the domain specified by an upper bound in each dimension.

Domain.sparse – Use a sparse representation.

Domain.symmetric – Impose symmetry on a given linear domain.

Domain.unbounded – Creates a domain in which variables are unbounded.

Domain.axis
ConeDomain::t Domain::axis(ConeDomain::t c, int a)


Set the dimension along which the cones are created. If this conic domain is used for a variable or expression of dimension $$d$$, then the conic constraint will be applicable to all vectors obtained by fixing the coordinates other than $$a$$-th and moving along the $$a$$-th coordinate. If $$d=2$$ this can be used to define the conditions “every row of the matrix is in a cone” and “every column of a matrix is in a cone”.

The default is the last dimension $$a=d-1$$.

Parameters
Return
Domain.binary
RangeDomain::t Domain::binary(int n)
RangeDomain::t Domain::binary(int m, int n)
RangeDomain::t Domain::binary(shared_ptr<ndarray<int,1>> dims)
RangeDomain::t Domain::binary()


Create a domain of binary variables. A binary domain can only be used when creating variables, but is not allowed in a constraint. Another way of restricting variables to be integers is the method Variable.makeInteger.

Parameters
• n (int) – Dimension size.

• m (int) – Dimension size.

• dims (int[]) – A list of dimension sizes.

Return
Domain.equalsTo
LinearDomain::t Domain::equalsTo(double b)
LinearDomain::t Domain::equalsTo(double b, int n)
LinearDomain::t Domain::equalsTo(double b, int m, int n)
LinearDomain::t Domain::equalsTo(double b, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::equalsTo(shared_ptr<ndarray<double,1>> a1)
LinearDomain::t Domain::equalsTo(shared_ptr<ndarray<double,2>> a2)
LinearDomain::t Domain::equalsTo(shared_ptr<ndarray<double,1>> a1, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::equalsTo(Matrix::t mx)


Defines the domain consisting of a fixed point.

Parameters
• b (double) – A single value. This is scalable: it means that each element in the variable or constraint is fixed to $$b$$.

• n (int) – Dimension size.

• m (int) – Dimension size.

• dims (int[]) – A list of dimension sizes.

• a1 (double[]) – A one-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• a2 (double[][]) – A two-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• mx (Matrix) – A matrix of bound values. The shape must match the variable or constraint with which it is used.

Return
Domain.greaterThan
LinearDomain::t Domain::greaterThan(double b)
LinearDomain::t Domain::greaterThan(double b, int n)
LinearDomain::t Domain::greaterThan(double b, int m, int n)
LinearDomain::t Domain::greaterThan(double b, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::greaterThan(shared_ptr<ndarray<double,1>> a1)
LinearDomain::t Domain::greaterThan(shared_ptr<ndarray<double,2>> a2)
LinearDomain::t Domain::greaterThan(shared_ptr<ndarray<double,1>> a1, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::greaterThan(Matrix::t mx)


Defines the domain specified by a lower bound in each dimension.

Parameters
• b (double) – A single value. This is scalable: it means that each element in the variable or constraint is greater than or equal to $$b$$.

• n (int) – Dimension size.

• m (int) – Dimension size.

• dims (int[]) – A list of dimension sizes.

• a1 (double[]) – A one-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• a2 (double[][]) – A two-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• mx (Matrix) – A matrix of bound values. The shape must match the variable or constraint with which it is used.

Return
Domain.inDExpCone
ConeDomain::t Domain::inDExpCone()
ConeDomain::t Domain::inDExpCone(int m)
ConeDomain::t Domain::inDExpCone(shared_ptr<ndarray<int,1>> dims)


Defines the domain of dual exponential cones:

$\left\{ x\in \real^3 ~:~ x_1 \geq -x_3 e^{-1} e^{x_2/x_3},\ x_1> 0,\ x_3< 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to an exponential cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.inDPowerCone
ConeDomain::t Domain::inDPowerCone(double alpha)
ConeDomain::t Domain::inDPowerCone(double alpha, int m)
ConeDomain::t Domain::inDPowerCone(double alpha, shared_ptr<ndarray<int,1>> dims)


Defines the domain of dual power cones:

$\left\{ x\in \real^n ~:~ \left(\frac{x_1}{\alpha}\right)^\alpha \left(\frac{x_2}{1-\alpha}\right)^{1-\alpha} \geq \sqrt{\sum_{i=3}^n x_i^2},\ x_1,x_2\geq 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to a power cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• alpha (double) – The exponent of the power cone.

• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.inPExpCone
ConeDomain::t Domain::inPExpCone()
ConeDomain::t Domain::inPExpCone(int m)
ConeDomain::t Domain::inPExpCone(shared_ptr<ndarray<int,1>> dims)


Defines the domain of primal exponential cones:

$\left\{ x\in \real^3 ~:~ x_1 \geq x_2 e^{x_3/x_2},\ x_1,x_2> 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to an exponential cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.inPPowerCone
ConeDomain::t Domain::inPPowerCone(double alpha)
ConeDomain::t Domain::inPPowerCone(double alpha, int m)
ConeDomain::t Domain::inPPowerCone(double alpha, shared_ptr<ndarray<int,1>> dims)


Defines the domain of primal power cones:

$\left\{ x\in \real^n ~:~ x_1^\alpha x_2^{1-\alpha} \geq \sqrt{\sum_{i=3}^n x_i^2},\ x_1,x_2\geq 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to a power cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• alpha (double) – The exponent of the power cone.

• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.inPSDCone
PSDDomain::t Domain::inPSDCone()
PSDDomain::t Domain::inPSDCone(int n)
PSDDomain::t Domain::inPSDCone(int n, int m)


When used to create a new variable in Model.variable it defines a domain of symmetric positive semidefinite matrices, that is

$\PSD^n = \left\{ X \in \real^{n\times n} ~:~ X=X^T,\ y^TXy\geq 0,\ \mbox{for all}\ y \right\}.$

The shape of the result is $$n\times n$$. If $$m$$ was given the domain is a product of $$m$$ such cones, that is of shape $$m\times n\times n$$.

When used to impose a constraint in Model.constraint it defines a domain

$\left\{ X \in \real^{n\times n} ~:~ \half (X + X^T) \in \PSD^n \right\}.$

i.e. a positive semidefinite matrix without the symmetry assumption.

Parameters
• n (int) – Dimension of the PSD matrix.

• m (int) – Number of matrices (default 1).

Return
Domain.inQCone
ConeDomain::t Domain::inQCone()
ConeDomain::t Domain::inQCone(int n)
ConeDomain::t Domain::inQCone(int m, int n)
ConeDomain::t Domain::inQCone(shared_ptr<ndarray<int,1>> dims)


Defines the domain of quadratic cones:

$\left\{ x\in \real^n ~:~ x_1^2 \geq \sum_{i=2}^n x_i^2,~ x_1 \geq 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to a quadratic cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• n (int) – The size of each cone; at least 2.

• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.inRange
RangeDomain::t Domain::inRange(double lb, double ub)
RangeDomain::t Domain::inRange(double lb, shared_ptr<ndarray<double,1>> uba)
RangeDomain::t Domain::inRange(shared_ptr<ndarray<double,1>> lba, double ub)
RangeDomain::t Domain::inRange(shared_ptr<ndarray<double,1>> lba, shared_ptr<ndarray<double,1>> uba)
RangeDomain::t Domain::inRange(double lb, double ub, shared_ptr<ndarray<int,1>> dims)
RangeDomain::t Domain::inRange(double lb, shared_ptr<ndarray<double,1>> uba, shared_ptr<ndarray<int,1>> dims)
RangeDomain::t Domain::inRange(shared_ptr<ndarray<double,1>> lba, double ub, shared_ptr<ndarray<int,1>> dims)
RangeDomain::t Domain::inRange(shared_ptr<ndarray<double,1>> lba, shared_ptr<ndarray<double,1>> uba, shared_ptr<ndarray<int,1>> dims)
RangeDomain::t Domain::inRange(shared_ptr<ndarray<double,2>> lba, shared_ptr<ndarray<double,2>> uba)
RangeDomain::t Domain::inRange(Matrix::t lbm, Matrix::t ubm)


Creates a domain specified by a range in each dimension.

Parameters
• lb (double) – The lower bound as a common scalar value.

• ub (double) – The upper bound as a common scalar value.

• uba (double[]) – The upper bounds as an array.

• uba (double[][]) – The upper bounds as an array.

• lba (double[]) – The lower bounds as an array.

• lba (double[][]) – The lower bounds as an array.

• dims (int[]) – A list of dimension sizes.

• lbm (Matrix) – The lower bounds as a Matrix object.

• ubm (Matrix) – The upper bounds as a Matrix object.

Return
Domain.inRotatedQCone
ConeDomain::t Domain::inRotatedQCone()
ConeDomain::t Domain::inRotatedQCone(int n)
ConeDomain::t Domain::inRotatedQCone(int m, int n)
ConeDomain::t Domain::inRotatedQCone(shared_ptr<ndarray<int,1>> dims)


Defines the domain of rotated quadratic cones:

$\left\{ x\in\real^n ~:~ 2x_1 x_2 \geq \sum_{i=3}^n x_i^2,~ x_1,x_2 \geq 0 \right\}$

The conic domain scales as follows. If a variable or expression constrained to a quadratic cone is not a single vector but a $$d$$-dimensional variable then the conic domain is applicable to all vectors obtained by fixing the first $$d-1$$ coordinates and moving along the last coordinate. If $$d=2$$ it means that each row of a matrix must belong to a cone. See also Domain.axis.

If $$m$$ was given the domain is a product of $$m$$ such cones.

Parameters
• n (int) – The size of each cone; at least 3.

• m (int) – The number of cones (default 1).

• dims (int[]) – Shape of the domain.

Return
Domain.integral
ConeDomain::t Domain::integral(ConeDomain::t c)
LinearDomain::t Domain::integral(LinearDomain::t ld)
RangeDomain::t Domain::integral(RangeDomain::t rd)


Modify a given domain restricting its elements to be integral. An integral domain can only be used when creating variables, but is not allowed in a constraint. Another way of restricting variables to be integers is the method Variable.makeInteger.

Parameters
Return
Domain.isLinPSD
LinPSDDomain::t Domain::isLinPSD()
LinPSDDomain::t Domain::isLinPSD(int n)
LinPSDDomain::t Domain::isLinPSD(int n, int m)


Creates an domain of vectors of length $$\half n(n+1)$$ which are the flattenings of the lower-triangular part of a symmetric positive-semidefinite matrix $$X$$. The shape of the result is $$\half n(n+1)$$. If $$m$$ was given the domain is a product of $$m$$ such domains, that is of shape $$m \times \half n(n+1)$$.

Parameters
• n (int) – Dimension of the PSD matrix.

• m (int) – Number of matrices (default 1).

Return
Domain.isTrilPSD
PSDDomain::t Domain::isTrilPSD()
PSDDomain::t Domain::isTrilPSD(int n)
PSDDomain::t Domain::isTrilPSD(int n, int m)


Creates an object representing a cone of the form

$\left\{ X \in \real^{n\times n} ~:~ \mbox{tril}(X) \in \PSD^n \right\}.$

i.e. the lower triangular part of $$X$$ defines the symmetric matrix that is positive semidefinite. The shape of the result is $$n\times n$$. If $$m$$ was given the domain is a product of $$m$$ such cones, that is of shape $$m\times n\times n$$.

Parameters
• n (int) – Dimension of the PSD matrix.

• m (int) – Number of matrices (default 1).

Return
Domain.lessThan
LinearDomain::t Domain::lessThan(double b)
LinearDomain::t Domain::lessThan(double b, int n)
LinearDomain::t Domain::lessThan(double b, int m, int n)
LinearDomain::t Domain::lessThan(double b, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::lessThan(shared_ptr<ndarray<double,1>> a1)
LinearDomain::t Domain::lessThan(shared_ptr<ndarray<double,2>> a2)
LinearDomain::t Domain::lessThan(shared_ptr<ndarray<double,1>> a1, shared_ptr<ndarray<int,1>> dims)
LinearDomain::t Domain::lessThan(Matrix::t mx)


Defines the domain specified by an upper bound in each dimension.

Parameters
• b (double) – A single value. This is scalable: it means that each element in the variable or constraint is less than or equal to $$b$$.

• n (int) – Dimension size.

• m (int) – Dimension size.

• dims (int[]) – A list of dimension sizes.

• a1 (double[]) – A one-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• a2 (double[][]) – A two-dimensional array of bounds. The shape must match the variable or constraint with which it is used.

• mx (Matrix) – A matrix of bound values. The shape must match the variable or constraint with which it is used.

Return
Domain.sparse
LinearDomain::t Domain::sparse(LinearDomain::t ld, shared_ptr<ndarray<int,1>> sparsity)
LinearDomain::t Domain::sparse(LinearDomain::t ld, shared_ptr<ndarray<int,2>> sparsity)
RangeDomain::t Domain::sparse(RangeDomain::t rd, shared_ptr<ndarray<int,1>> sparsity)
RangeDomain::t Domain::sparse(RangeDomain::t rd, shared_ptr<ndarray<int,2>> sparsity)


Given a linear domain, this method explicitly suggest to Fusion that a sparse representation is helpful.

Parameters
• ld (LinearDomain) – The linear sparse domain.

• sparsity (int[]) – Sparsity pattern.

• sparsity (int[][]) – Sparsity pattern.

• rd (RangeDomain) – The ranged sparse domain.

Return
Domain.symmetric
SymmetricLinearDomain::t Domain::symmetric(LinearDomain::t ld)
SymmetricRangeDomain::t Domain::symmetric(RangeDomain::t rd)


Given a linear domain $$D$$ whose shape is that of square matrices, this method returns a domain consisting of symmetric matrices in $$D$$.

Parameters
Return
Domain.unbounded
LinearDomain::t Domain::unbounded()
LinearDomain::t Domain::unbounded(int n)
LinearDomain::t Domain::unbounded(int m, int n)
LinearDomain::t Domain::unbounded(shared_ptr<ndarray<int,1>> dims)


Creates a domain in which variables are unbounded.

Parameters
• n (int) – Dimension size.

• m (int) – Dimension size.

• dims (int[]) – A list of dimension sizes.

Return