14.2.9 Class Domain¶
- mosek::fusion::Domain¶
The
Domain
class defines a set of static method for creating various variable and constraint domains. ADomain
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
andModel.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
c
(ConeDomain
) – A conic domain.a
(int
) – The axis.
- 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.
- 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
c
(ConeDomain
) – A conic domain.ld
(LinearDomain
) – A linear domain.rd
(RangeDomain
) – A ranged domain.
- 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
ld
(LinearDomain
) – The linear domain to be symmetrized.rd
(RangeDomain
) – The ranged domain to be symmetrized.
- 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