|
Release Notes
|
Version 5.6 (2003-06-07)
The highlights in this version are new libraries for column generation,
symbolic constraint solving, and code analysis, as well as new visualisation
features.
LP/MIP solver interface
-
New library lib(colgen) for performing hybrid LP/CP column generation
with user-specified subproblem solvers. The solutions returned by subproblem
solvers are used to generate new columns - variables and their associated
coefficients in the linear linking constraints and objective of the LP
master problem. Subproblems may be solved by any ECLiPSe solver. In combination
with the new bfs library branch-and-price algorithms can be developed
with user-specified subproblem solution and node separation methods.
-
New library lib(bfs) for performing generic branch-and-bound search
with alternative node ordering techniques. This library is primarily
intended for use with the new colgen library in creating branch-and-price
algorithms, but may be used with any node solution method. Rather than
searching depth-first via the usual backtracking of ECLiPSe, open nodes
are selected for expansion according to the specified node-ordering criteria:
best-first, best-estimate or depth-first. The problem at each node is solved
by a user-specified solver. Several variable and constraint dichotomy based
node separation schemes are built-in and users may also specify application
specific schemes.
-
New experimental standalone eplex library, lib(s_eplex), which we
hope will replace the current eplex library in a future release. In this
version, the bounds for the problem variables are maintained in the external
solver, rather than an ECLiPSe bounds keeper like lib(ic). The main advantages
are that bounds constraints are no longer treated differently from other
eplex constraints, and a generally improved performance. We encourage people
to try out this library and report their experiences to us. Note that there
are some incompatibilities with previous versions of eplex. Please see
the eplex chapter in the constraints manual for details.
-
Official release of XPRESS-MP 14 with lib(eplex). The version included
with this release, 14.21, is the latest version of Xpress from Dash. Support
for release 12 has been removed.
New Libraries
lib(bfs)
See above.
lib(colgen)
See above.
lib(s_eplex)
See above.
(ic_probing_for_scheduling)
A port of lib(probing_for_scheduling) for lib(ic)
lib(ic_symbolic)
A solver for constraints over ordered symbolic domains. Supported constraints
are equality, disequality, ordering and offset, as well as a number of
global constraints like alldifferent, occurrences, etc.
lib(instrument)
A tool that enables predicate definitions or all calls to a specific predicate
to be annotated with user-defined predicates.
These instrumentation predicates are free to perform such actions as collect
program statistics or write debugging data to a stream during program execution.
lib(port_profiler)
A tool to produce execution profiles in terms of box-model ports.
lib(timeout)
A library for imposing time limits on goals in a flexible way.
Changes to Libraries
The Common Numeric Solver Interface (see Constraint Library Manual)
has been extended, mainly providing aliases to make code easier to read
and to reduce ambiguities: the six comparison constraints ($=, $\=, $>=,
$=<, $>, $<) are aliases for (=:=, =\=, >=, =<, >, <), but
avoid name clashes with the Prolog arithmetic comparisons. There are also
two variants of the range constraint ::/2, namely $::/2 to impose real
bounds, and #::/2 to impose bounds and integrality together.
-
lib(eplex), lib(ic_eplex)
-
Added $::/2, $=/2, $=</2, $>=/2.
-
New options during setup: temp_dir, timeout. The location of where temporary
files used by the external solver can now be specified, and this can
lead to significant improvements in performances if the temporary files
were written to a relatively slow file system like NFS.
-
Warnings are printed when trying to load incompatible variants of this
solver.
-
lib(eplex_relax)
-
The piecewise_linear_hull/3 constraint from lib(eplex_relax) has been folded
into lib(eplex) and extended to work with eplex instances. A port
of this constraint has also been added to lib(ic_eplex).
-
lib(fd)
-
Added #::/2 and #::/3.
-
Warnings are printed when trying to use lib(fd) and lib(ic) together.
-
lib(ic)
-
Added piecewise_linear/3.
-
Adde #::/2, $::/2, $=/2, $>=/2, $=</2, $>/2, $</2, $\=/2.
-
Warnings are printed when trying to use lib(fd) and lib(ic) together.
-
lib(suspend)
-
Added a full set of equality, inequality, disequality and range constraints,
and their reified versions, according to the common solver interface.
-
lib(graph_algorithms)
-
Added critical_links/2
-
lib(var_name)
-
Added get_var_name/2
-
lib(xml)
-
Upgraded to John Fletcher's release 1.6.
Development Environment
Visualisation
-
Better integration with debugging tools.
-
Added support for visualising graphs from lib(graph_algorithms) called
a Network viewer.
-
Enhancements to Desktop (and features of Network viewer)...
-
Can now print the display.
-
Desktop viewer now dynamically resizes to fit viewlets (no more overlapping
viewlets).
-
Added anti-aliasing to the Desktop and Network views (looks much nicer).
-
Added option to trade rendering speed against visual quality.
-
Can now load background images in PNG and JPG as well as GIF.
-
Option to add simple graphical icons to Desktop and Network viewers.
-
Added options to fade most viewlets to indicate their recent history
(includes edges on a graph).
-
Right-click context sensitive popup menu has been extended to provide fast
access to common commands (eg. zoom, select etc...)
-
Added FadeTable to quickly show activity of large 1D and 2D viewables.
TkECLiPSe/Development tools:
-
New Run-menu allows quick access to time profiler and port profiler
-
Tested for compatibility up to Tcl/Tk 8.4.2
Emacs eclipse mode enhancements
-
outlining functions:
-
hide/show all predicates/predicate/all clauses/clause/block
-
go to previous/next heading / previous/next heading in same level
/ up
-
speedbar support, listing predicates and compiler directives
-
indentation functions rewritten, to speed up indentation of regions
Unix man pages for the eclipse executables have been added.
Embedding and Interfacing
Improved data encoding in high-level interface: We have defined a new version
of the EXDR data interchange format (version 2). This format allows more
compact encodings, in particular for small integers and (optionally)
for repeated occurrences of strings and functors. The corresponding ECLiPSe,
Java and Tcl implementations have been updated. See the Embedding and Interfacing
Manual and write_exdr/2 for details.
Implemented a new protocol ("multitasking") which allows multiple ECLiPSe
peers to become active quasi-simultaneously in response to certain events
(e.g. breakpoints) in the ECLiPSe execution. See the documentation of peer_do_multitask/1,
etc and the Java API documentation.
New low level embedding interface functionality:
-
Waiting for an asynchronouly resumed ECLiPSe thread to return, with timeout:
ec_wait_resume_status_long() in C interface, or ec_resume_status with optional
timeout argument in Tcl.
-
Test for variables: ec_is_var() in C, or EC_word::is_var() in C++.
-
Comparing ECLiPSe terms: ec_compare() in C, or compare() in C++.
Kernel features
New features:
-
All predicates that make nonlogical copies of terms (setval/getval, record/recorded,
shelf_set/get, bag_enter/retrieve, store_set/get) now work with cyclic
terms. Related new built-in:
-
A new class of nonlogical storage, called stores. They are
hash tables that can store arbitrary terms under arbitrary ground keys.
A store is identified either by an anonymous handle or by a module-local
name. New built-ins:
-
current_store/1
-
local store/1
-
store_create/1
-
store_count/2
-
store_erase/1
-
store_delete/1
-
store_get/3
-
store_inc/2
-
store_set/3
-
store_contains/3
-
stored_keys/2
-
stored_keys_and_values/3
-
Domain declarations: the domain/1 declaration allows to define a
mapping from symbols to natural numbers, similar to enumeration types in
many programming languages. The definitions can be local or exported/imported.
The new lib(ic_symbolic) is based on this facility.
-
local domain/1, export domain/1
-
current_domain/3
-
domain_index/3
-
New built-ins for date and time conversion:
-
local_time/8 (conversion between local time and universal time and vice
versa)
-
local_time_string/3 (formatting time and date)
-
The API for after-events has been made more comprehensive. New built-ins:
-
cancel_after_event/2 (supersedes cancel_after_event/1)
-
current_after_events/1 (supersedes current_after_event/2)
-
event_after/3
-
New external interface built-ins:
-
peer_do_multitask/1
-
peer_multitask_confirm/0
-
peer_multitask_terminate/0
-
peer_register_multitask/2
-
The compiler now recognises
-
discontiguous/1 (previously only in compatibility library)
-
subscript/3 can be applied to byte strings and will extract the indexed
byte
-
Other new built-ins:
-
bag_count/2
-
bag_erase/1
-
current_struct/2 (supersedes current_struct/1)
-
min/2 (minimum of a list)
-
max/2 (maximum of a list)
-
A deprecated-flag can be set for predicates. Use of such a predicate
will trigger warnings during compilation.
-
I/O output streams have a new property compress, which currently
only affects the generation of EXDR 2 output. The default setting for this
property is on for file, pipe and socket streams, and off
for in-memory streams.
-
I/O output streams have a new property last_written, whose
value is the last character written to the stream.
-
the -b command line option will now also load precompiled .eco files
-
do-loops can be given a name (for debugging purposes) using the loop_name/1
specifier
-
statistics/2 accepts event_time, which retrieves the timer used by after-events
in a generic way
-
new syntax: property(functor) of ... expands into a name/arity
specification of a declared structure.
-
exit_block/1 accepts handles as arguments. This makes it easier to have
unique exit tags.
Incompatibilities
There are only minor incompatibilities with the previous release:
-
Compiler: initialization goals (:- local initialization(Goal)) are
now executed only after the whole compilation unit has been compiled (compatible
with ISO initialization directives)
-
Arithmetic: breal_min/2, breal_max/2 and breal_bounds/3 work on
any numeric argument type
-
Events: new/modified events 75 (referring to a deprecated predicate),
96 (ambiguous import), 99 (unresolved ambiguous import),149 (code unit
loaded), 166 (file successfully processed), 249 (debugger new suspensions
event). The default handlers for events 68, 170, 191 now take 4 arguments.
-
Modules: get_flag/3, is_predicate/1, is_built_in/1, is_dynamic/1
now fail silently when they refer to an ambiguously imported predicate.
Previously, they raised warnings as well. Obsolete flags (protected,statistics)
removed from get_flag/3. The flag enumeration order of get_flag/3 and pred/0
has changed.
-
Memory: trimcore/0 now always includes a global stack garbage collection.
-
Embedding and Interfacing: write_exdr/2 now generates the new, more
compact EXDR version 2 format (see Embedding and Interfacing manual). read_exdr/2
can read both version 1 and version 2 formats.
-
lib(scattered) is deprecated in favour of the discontiguous/1 directive
which is now recognised directly by the compiler.
-
lib(test_util): timeout/3 has been moved to lib(timeout). get_time/1
should be replaced with statistics(event_time,T).
-
System calls: several builtins that map to Unix system calls (accept/3,
cd/1, close/1, connect/2, select/3, wait/2) now get restarted automatically
in case they were interrupted.
-
lib(eplex): lp_var_get/3 now raises an error if information is not
available because it was not requested at solver setup time. When a solution
value gets rounded beyong the int_tolerance, a warning is printed.
-
lib(eplex): with XPRESS-MP14, integer variables are restricted to
a range of -2^31..2^31.
Previous release notes