The constraints can be divided into the following groups:
#::
and $::/2, which give upper
and lower bounds to their variables.
In addition, #::
also implies integrality.$=
, $>=
, >
, $\=
.
Note that in this context,
integers are considered a subset of the reals and can therefore
occur in these constraints.#
,
e.g. #=
, #\=
, #<
.
- If integer bounds are given to the eplex version of
::/2
the external solver does not consider this as an integrality constraint and only solves the continuous relaxation which can then be rounded to the next integer. To make the external solver solve a mixed integer problem, use the eplex version of integers/1.
Not all constraints are supported by all the solvers. For example, the eplex solver does not support any strict inequality constraints. Table 2.1 shows the constraints that are available from the various constraint solvers. In the table, a ‘yes’ entry indicates that the particular constraint is supported by the particular solver. Note that some further restrictions may apply for a particular solver. For example, the eplex solver can only handle linear expressions. Refer to the documentation for each individual solver to see what restrictions might apply.
Note that the ‘standard arithmetic’ operators
=:=/2
, =\=/2
, >=/2
, =</2
, >/2
and </2
which are automatically imported from the eclipse_language module
are declaratively the same as the corresponding ’$’ constraints.
On the other hand, they are not interchangeable because they
can only be used as tests (when all variables are instantiated),
not as active constraints.