## 1.7 Linear Constraints

There are two libraries supporting linear constraint solving. The
first *eplex* provides an interface to external linear
programming packages.
It offers flexibility and scalability, but may
require a license for the external software.
The second *clpqr* can support infinite precision, but is less
efficient and scalable and offers fewer facilities.

### 1.7.1 External Linear Solvers: *eplex*

*eplex* supports a tight integration [3] between
external linear solvers (CPLEX [12] and XPRESS [19])
and ECL^{i}PS^{e}.
Constraints as well as variables can appear in both the external
linear solver and other ECL^{i}PS^{e} solvers.
Variable bounds are automatically passed from the ECL^{i}PS^{e} *range*
solver to the external solver.
Optimal solutions and other solutions can be returned to ECL^{i}PS^{e} as
required.
Search can be carried out either in ECL^{i}PS^{e} or in the external solver.

### 1.7.2 *clpqr*

The *clpqr* library offers two implementations of the Simplex
method for solving linear constraints [11].
One version uses rationals and
is exact. The other version uses floats.
This library employs public domain software, and can be used for small
problems (with less than 100 variables).

### 1.7.3 Piecewise Linear: *eplex_relax*

This library handles any user-defined piecewise linear function as a
constraint closely integrated with *eplex*. It offers better
pruning than the standard handling of piecewise linear constraints
in the external solvers [1].

### 1.7.4 Probing for Scheduling

For scheduling applications where the cost is dependent on each start
time, a combination of solvers can be very powerful.
For example, we can use finite domain
propagation to reason on
resources and linear constraint solving to reason on cost [4].

The *probing_for_scheduling* library supports such a combination,
via a similar user interface to the *cumulative* constraint mentioned
above.