|
Release Notes
|
Version 5.5 (2002-11-21)
The highlights in this version are:
-
full version of XPRESS-MP for academic use is included, allowing to tackle
large-scale LP/MIP problems
-
new tutorial document "ECLiPSe - An Introduction"
-
new library implementing SBDS (symmetry breaking during search)
-
new development support libraries for source checking and cross referencing
-
performance and functionality enhancements to the interval constraint solver
lib(ic)
Embedded XPRESS-MP LP/MIP solver from Dash
Optimization
Previous releases only included a severely restricted student version of
the commercial LP/MIP solver XPRESS-MP. With the kind agreement of Dash
Optimization, a full version of XPRESS-MP R13 is now included with
ECLiPSe. The academic use of this solver via the ECLiPSe eplex-interface
is covered by your standard ECLiPSe license agreement. We hope that this
will open up new horizons for research on large-scale real-life problems.
Download and install the package if_xpress1326icp.tgz from the distribution.
ECLiPSe Tutorial
The new ECLiPSe tutorial provides an introduction to programming in ECLiPSe.
It assumes a broad understanding of constrained optimisation
problems, some background in mathematical logic and in programming
languages. The tutorial tries to cover most of the basic aspects of using
ECLiPSe:
underlying concepts, the programming language, library functionality
and interaction with the system.
LP/MIP solver interface: lib(eplex)
-
The new XPRESS-MP library API is now used by the eplex interface. This
change should be largely transparent to the user, except that:
-
There is no longer a hard limit on the number of problems (eplex instances)
that can be solved at the same time.
-
XPRESS solver parameters are now local to a problem, rather than global
to all problems.
-
If XPRESS solver parameters are accessed directly, then be aware that they
have changed completely under the new API. Refer to the XPRESS 13 manual
for a full list of the parameters and how they correspond to the parameters
from the old API.
-
Various restrictions have been lifted on when and how constraints can be
posted to an eplex instance/problem. Essentially there should no longer
be any restrictions on when constraints (both integers/1 and the arithmetic
constraints) can be posted:
-
integers/1 constraint can be posted for any problem variables at any time
(previously there were various restrictions on which variables and when
the integers constraints can be posted).
-
If the XPRESS MP solver is used, a problem can now be freely modified by
posting extra constraints to it and re-solved. Previously, if a problem
had integers/1 constraints (i.e. a MIP problem), then it cannot be modified
after it has been solved once.
-
Added new predicates for eplex instances:
-
eplex_read/2
-
eplex_write/2
-
eplex_set/2.
-
Added options to the setup of a problem:
-
post_equality_when_unified
-
write_before_solve
-
mip_use_copy
-
Solver's parameters needs to be wrapped by optimizer_param(Param) when
they are accessed, instead of just passing Param directly.
-
Solver parameters can now be accessed via a problem as well as globally.
-
lp_unify_same_handle event has been removed; added lp_set_default_warning
event.
-
Added shortcuts lib(ic_eplex_xpress) and lib(ic_eplex_cplex).
-
Various bug fixes.
-
Added support for CPLEX 8.0, XPRESS 13.26 (support withdrawn from CPLEX
4.0). Note that CPLEX 8.0 for Linux does not load with glibc 2.1.
Interval constraint solver: lib(ic)
-
Revised low-level interface. Click here
for details. This should only affect users who have written their own constraints
or access information about the domains of variables.
-
Improved efficiency, improved precision and bug fixes.
-
Added reified domain assignment/check ::/3, for single variables.
Symmetry Breaking During Search library: lib(fd_sbds/ic_sbds)
-
New library for dealing with symmetry in constraint programming, implemented
by W. Harvey (Imperial College London) and K. Petrie (University of Huddersfield),
and based on the approach presented in
I.P. Gent and B.M. Smith. Symmetry breaking in constraint programming.
In W. Horn, editor, Proceedings of ECAI-2000, IOS Press, 2000, pp.
599-603.
-
Works with finite integer domains, finite set domains, and in principle
other domains as well.
-
Available in both FD and IC versions.
-
Supported as an option in the fd_search and ic_search modules.
-
Supported as an option by insetdomain/4 in fd_sets and ic_sets.
Other Libraries
-
lib(ech)
-
Introduced priorities for CHR constraints. Previously, ECH/CHR could have
problems when used with other solvers due to differences in the priority
at which the CHR rules are executed. (lib(chr) still has this problem).
-
Various bug fixes.
-
lib(fd_sets/ic_sets)
-
Added ic_sets, a port of fd_sets to the IC solver.
-
Added reified in/3 constraint.
-
Set expressions have been allowed in more contexts.
-
lib(graph_algorithms)
-
New graph manipulation predicates:
-
graph_get_edges/4
-
graph_reverse_edges/2
-
is_sub_graph/2
-
New shortest path predicates (see overview in reference manual):
-
all_short_paths_as_edges/6
-
all_short_paths_as_graph/6
-
single_pair_short_path/6
-
single_pair_all_short_paths_as_graph/7
-
possible_path/6
-
shortest_paths_bellman_ford/4
-
single_pair_shortest_path_bellman_ford/5
-
Deprecated predicates:
-
all_shortest_paths/4
-
single_pair_all_shortest_paths/5
-
single_pair_all_short_paths/6
-
Performance enhancements for shortest path functionality.
-
lib(hash)
-
New predicates:
-
hash_contains/2
-
hash_count/2
-
hash_delete/2
-
hash_erase/1
-
hash_get/3
-
hash_set/3
-
lib(test_util)
-
Now prints line numbers for the failed tests.
-
lib(lists)
-
splice/3 now works backwards.
-
lib(iso)
-
Added missing sub_atom/5 compatibility predicate.
-
New library: lib(xref)
-
A development tool for computing cross-reference information.
-
New library: lib(lint)
-
A development tool for finding likely programming errors and checking programming
conventions.
Development Environment
-
Visualisation tools
-
The visualisation tools have been made more scalable and light-weight.
-
Tracer/Debugger:
-
Added display of execution priority on a trace line if the current priority
is not the default.
-
Several primitives that were previously hidden are now visible during tracing
(arg/3, arithmetic).
-
TkECLiPSe/Development tools:
-
Auxiliary predicates generated by the compiler are now filtered by default
in the predicate browser tool.
-
Added starting of Visualisation client to the tools menu.
-
Tested with Tcl/Tk 8.4 (so the Tcl/Tk interface should also work with 8.4).
-
Emacs eclipse mode significantly enhanced:
-
Shortcuts for navigation: goto beginning/end of clause/predicate.
-
Shortcuts for marking regions: mark buffer/clause/predicate.
-
New indentation facilities: indent clause/predicate.
-
Shortcuts for anonymising variables (adding "_") or replacing variables
by "_", for all variables in current region.
-
Shortcuts for inserting:
-
Predicate template ("foo(,,)").
-
Predicate specification ("foo/3").
-
Clause head ("foo(,,) :-").
-
Shortcuts for inserting comment/2 clause heads without or with arguments.
-
Four levels of fontification.
-
help/1 now also lists library summaries.
Kernel features
New built-in predicates:
-
substring/5
-
For creating user-defined tracer ports for debugging:
-
trace_call_port/3
-
trace_point_port/3
-
trace_exit_port/0
-
trace_parent_port/1
-
attached_suspensions/2, for retrieving the suspensions attached to a global
trigger.
New features:
-
The local declaration accepts a new specifier reference/2 which is used
to declare a reference with an initial value.
-
Error handlers can now be of arity 4. The extra argument is the lookup
module which is needed to call the culprit goal from within the error handler
in case the goal is not visible there.
Improved features:
-
Bounded real arithmetic should now be faster and more precise.
Incompatibilities
-
Floating point: support for single precision floats has been removed.
-
Floating point: negative (-0.0) and positive zeros (0.0) are no
longer considered identical by the "syntactical" equality operators like
=/2, ==/2, \=/2, \==/2. The term comparison builtins compare/3, @=<,
etc. now consider -0.0 to be before 0.0 in the term order rather than being
identical. Predicates that use term order are also affected, for example
sort/2 will no longer consider zeros with different signs as duplicates
and eliminate them. The behaviour of arithmetic comparisons and operations
has not changed: -0.0 and 0.0 are considered equal by =:=/2, </2 etc.
-
Bounded reals: similar to floats, the different zeros are treated
as different by the "syntactical" equality operators, but are considered
identical by the arithmetic comparisons.
-
Bounded reals: the "syntactical" equality operators now consider
bounded reals as identical when they have identical bounds. The 'undecidable
comparison of bounded reals' exception is no longer raised by default.
A global flag 'breal_exceptions' has been added which can be set
to enable the previous behaviour. The arithmetic comparison operators still
delay when the comparison is undecidable.
-
Struct-declarations: when a struct is defined twice, the second
definition no longer overrides the first; a warning is raised instead and
the redefinition is ignored.
-
Suspension list names in suspend/3,4: the structure declaration
that defines the name must be visible in the module where suspend/3,4 is
called.
-
setarg/3 detects the error of modifying a read-only ground term.
-
lib(eplex) for solvers with parameters local to a problem
(currently XPRESS 13), the `global' parameters now refer to the global
default values.
-
The obsolete library lib(structures) should no longer be used, it is only
backward compatible for the basic functionality.
Previous release notes