Previous Up Next

Chapter 4  Porting to Standalone Eplex

Since ECLiPSe version 5.7, standalone eplex have become the standard eplex, loaded with lib(eplex). The previous lib(eplex), which loads eplex with the range bounds keeper and the IC variant have now been phased out, so users of these old variants must now move to using standalone eplex.

There are some differences at the source level between standalone and the older non-standalone eplex. This chapter outlines these differences to help users to port their existing code to standalone eplex.

4.1  Differences between Standalone Eplex and Older Non-Standalone Eplex

The main difference between the standalone eplex and the non-standalone eplex is that the standalone version does not use an ECLiPSe `bounds keeper' like lib(ic) or lib(range) to provide the ranges for the problem variables. Instead, ranges for variables are treated like another type of eplex constraint, i.e., they are posted to an eplex instance, and are stored with the external solver state.

In the non-standalone eplex, the bounds of all problem variables are transferred from the bounds keeper to the external solver each time the solver is invoked, regardless of if the bounds for the variables have changed or not since the last invocation. This can become very expensive if a problem has many variables. With the standalone eplex, this overhead is avoided as the external solver bounds for variables are only updated if they are explicitly changed. A possible inconvenience is that for hybrid programming, where eplex is being used with another ECLiPSe solver, any bound updates due to inferences made by the ECLiPSe solver are not automatically transferred to the external solver. This can be an advantage in that it leaves the programmer the freedom of when and how these bound changes should be transferred to the external solver.

The main user visible differences with the non-standalone eplex are:

Previous Up Next