9.11 Solver Specific Information
The external solvers currently supported by the eplex library are:

XPRESSMP, a product of Dash Optimisation (www.dashoptimization.com)
 CPLEX, a product of ILOG (www.ilog.com)
Both companies offer academic licences at discounted prices, or academic
partner programs.
To load a specific solver explicitly, use:
: lib(eplex_cplex).
: lib(eplex_xpress).
The first line explicitly requests the CPLEX solver, the second line
explicitly requests the XPRESSMP solver. Note that these solvers must be
available for your machine for the above to work.
9.11.1 Versions and Licences
All the solvers supported by the library come in various versions.
The set of supported solver versions may vary between different
releases of ECL^{i}PS^{e}; please refer to the release notes.
Depending on which solver licence you have, which version of it,
and which hardware and operating system,
you need to use the matching version of this interface.^{2}
Because an ECL^{i}PS^{e} installation can be shared between several
computers on a network, we have provided you with the possibility
to tell the system which licence you have on which machine.
To configure your local installation, simply add one line for
each computer with the appropriate licence to the file
<eclipsedir>/lib/eplex_lic_info.ecl
, where <eclipsedir>
is the directory or folder where your ECL^{i}PS^{e} installation resides.
The file contains lines of the form
licence(Hostname, Solver, Version, LicStr, LicNum).
For example, if you have CPLEX version 7.5 on machine workhorse
,
and XPRESSMP version 15.20 (with the license file located in
/my/xpress/license
) on machine mule
, and your Internet
domain is +icparc.ic.ac.uk
,
you would add the lines
licence('workhorse.icparc.ic.ac.uk', cplex, '75', '', 0).
licence('mule.icparc.ic.ac.uk', xpress, '1520', '/my/xpress/license', 0).
The hostname must match the result of get_flag(hostname,H),
converted to an atom (this is normally the complete Internet domain name,
rather than just the machine).
Version is formed from the concatenation of the major and minor version
numbers.
The meaning of LicStr and LicNum depends on the optimiser:
For CPLEX with normal licenses, they are unused (the environment
variable ILOG_LICENSE_FILE
should be set to the CPLEX
license file access.ilm
as usual).
For XPRESSMP,
LicStr is a string specifying the directory where
licence file is located (overrides value of XPRESS environment
variable). LicNum is unused. If a machine has more than one licence and lib(eplex) is called, the
first one listed in eplex_lic_info.ecl
will be used.
9.11.2 Access to External Solver's Control Parameters
The external solver has a number of control
parameters that affect the way it works.
These can be queried and modified using the
lp_get/2,
eplex_get/2,
lp_get/3, and
lp_set/2,
eplex_set/2,
lp_set/3 predicates respectively:
Retrieve the value of a control parameter for the external solver for the
problem represented by Handle. These
parameters are solver specific; see
lp_get/3 for more details..
Like lp_get/3, but get a control parameter for the external solver
associated with the specified eplex instance.
Retrieve the global value of a control parameter for the external solver. The
parameters and the exact meaning of `global' is solver specific: if the
solver does not have global parameters, this gets the global default value,
rather than the globally applicable value. The parameters are as in lp_get/3.
Set a control parameter for the external solver for the problem represented
by Handle. If the external solver does not have problem specific
parameters, this will raise an unimplemented functionality exception.
The parameters are as in lp_get/3.
Like lp_set/3, but set a control parameter for the external solver
associated with the specified eplex instance.
Set a control parameter for the external solver for the problem globally.
If the external solver does not have global parameters, this will set the
global default for the parameter. The parameters are as in lp_get/3.
Retrieve the name (currently 'cplex' or 'xpress') and version of the external optimizer.
This can be used to write portable code even when using solverspecific settings:
( lp_get(optimizer, xpress) >
( lp_get(optimizer_version, Version), Version >= 13 >
lp_set(Handler, optimize_param(maxnode), 100)
;
lp_set(Handler, optimize_param(maxnod), 100)
)
; lp_get(optimizer, cplex) >
lp_set(Handler, optimize_param(node_limit), 100)
), ...