Linear Constraints

## 1.7 Linear Constraints

- External Linear Solvers: eplex
- clpqr
- Piecewise Linear: eplex_relax
- Probing for Scheduling

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 ECLiPSe. Constraints as well as variables can appear in both the external linear solver and other ECLiPSe solvers. Variable bounds are automatically passed from the ECLiPSe range solver to the external solver. Optimal solutions and other solutions can be returned to ECLiPSe as required. Search can be carried out either in ECLiPSe 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.