ECLiPSe

Constraint logic programming system

Not to be confused with Eclipse (software).

ECLiPSe Constraint Logic Programming System

Developer(s)| European Computer‐Industry Research Centre (ECRC), Munich
Centre for Planning and Resource Control, Imperial College London (IC-Parc)
Cisco Systems
Initial release| 1992; 33 years ago (1992)
Stable release|

7.0 / January 22, 2018; 7 years ago (2018-01-22)

Repository| sf.net/p/eclipse-clp/git/
Written in| C, Prolog
Operating system| Cross-platform
Available in| English
Type| Constraint logic programming
License| Mozilla Public (MPL)
Website| eclipseclp.org

ECLiPSe is a software system for the development and deployment of constraint logic programming applications, e.g., in the areas of optimization, planning, scheduling, resource allocation, timetabling, transport, etc. It is also suited for teaching most aspects of combinatorial problem solving, e.g., problem modeling, constraint programming, mathematical programming, and search techniques.[1] It contains constraint solver libraries, a high-level modeling and control language (a superset of Prolog), interfaces to third-party solvers, an integrated development environment and interfaces for embedding into host environments.

ECLiPSe was developed until 1995 at the European Computer‐Industry Research Centre (ECRC) in Munich, and then until 2005 at the Centre for Planning and Resource Control at Imperial College London (IC-Parc). It was purchased by Cisco Systems. In September 2006, it was released as open source software under an equivalent of the Mozilla Public License, and is now hosted on SourceForge.

## Language

[edit]

The ECLiPSe language[2] is largely backward-compatible with Prolog and supports different dialects, including ISO Prolog. Due to being declarative, it can be used both as a modelling language to describe problems, and as a general purpose programming language.

Beyond the basic Prolog data types, the following are available: strings, unlimited precision integer and rational numbers, and floating point intervals. Array syntax and structures with field names are also supported and especially useful in constraint modelling.

A logical iteration construct[3] eliminates the need for most simple recursion patterns.

ECLiPSe provides comprehensive facilities[2] to implement data-driven control behaviour. These include declarative delay-clauses as well as primitives for meta-programmed control like explicit goal suspension, flexible triggering facilities and execution priorities. Together with the attributed variable data type, this is the key to many extensions to the basic logic programming language, including all constraint-based functionality. The system calls user-definable event handlers when it encounters attributed variables in certain contexts, e.g. unification.

The module system controls the visibility of predicates, non-logical stores, source transformations and syntax settings. Module interfaces can be extended and restricted, and modules written in different language dialects can be mixed within one application.

Programs may contain structured comments from which reference documentation can be generated.

## Libraries

[edit]

ECLiPSe provides several libraries of constraint solvers which can be used in application programs:

Arithmetic constraints over finite domains, finite set constraints, generalized propagation, interval reasoning over non-linear constraints, interfaces to external simplex solvers, constraint handling rules (CHR) and more.

Other libraries implement search methods like branch-and-bound, repair-based search, limited discrepancy search.

ECLiPSe interfaces to external solvers, in particular the COIN-OR, CPLEX, Gurobi, and Xpress-MP linear and mixed-integer programming solvers,[4] and the Gecode solver library.

Compatibility libraries for ISO Prolog[5] and other Prolog dialects (C-Prolog, Quintus, SICStus, SWI-Prolog) enable the reuse of libraries written in those dialects.

Other utility libraries, including a number of popular public domain ones, are included in the distribution.

## System architecture

[edit]

The system includes an incremental compiler which translates source code into virtual machine code. The compiler optimizes index selection, unification order, inlining of control constructs and can take mode information into account.

The runtime system implements the virtual machine, automatic memory management with garbage collection of stacks and dictionary, event handling and data-driven execution. Versions of ECLiPSe implement OR-parallelism.

ECLiPSe components can be integrated into software via a low-level C or C++ interface, or via high-level interfaces to Java and Tcl.

## See also

[edit]

* Comparison of Prolog implementations
* Prolog syntax and semantics

## References

[edit]

1. ^ "ECLiPSe Web Site". eclipseclp.org.
2. ^ a b Schimpf, Joachim; Shen, Kish (2012). "ECLiPSe - from LP to CLP". Theory and Practice of Logic Programming. 12 (1–2): 127–156\. arXiv:1012.4240. doi:10.1017/S1471068411000469. S2CID 11827081.1–2&rft.pages=127-156&rft.date=2012&rft_id=info:arxiv/1012.4240&rft_id=https://api.semanticscholar.org/CorpusID:11827081#id-name=S2CID&rft_id=info:doi/10.1017/S1471068411000469&rft.aulast=Schimpf&rft.aufirst=Joachim&rft.au=Shen,+Kish&rfr_id=info:sid/en.wikipedia.org:ECLiPSe" class="Z3988">
3. ^ Schimpf, Joachim (1 August 2002). Logical Loops (PDF). Logic Programming, 18th International Conference, ICLP 2002, Copenhagen, Denmark, July 29 - August 1, 2002 Proceedings: Springer-Verlag. pp. 224–238\. ISBN 978-3-540-45619-3.`{{cite book}}`: CS1 maint: location (link)
4. ^ Shen, K.; Schimpf, J. (2005). "Eplex: Harnessing Mathematical Programming Solvers for Constraint Logic Programming". Principles and Practice of Constraint Programming - CP 2005. Lecture Notes in Computer Science. Vol. 3709\. Principles and Practice of Constraint Programming - CP 2005: 11th International Conference, CP 2005, Sitges: Springer. pp. 622–636\. doi:10.1007/11564751_46. ISBN 978-3-540-32050-0.`{{cite book}}`: CS1 maint: location (link)
5. ^ "ECLiPSe ISO conformity declaration". eclipseclp.org.

## External links

[edit]

* ECLiPSe on SourceForge
* Constraint Logic Programming using ECLiPSe, textbook by Krzysztof Apt and Mark Wallace
* A Quick and Gentle Guide to Constraint Logic Programming via ECLiPSe, textbook by Antoni Niederliński
* ECLiPSE eLearning Website (with video tutorials)

* v
* t
* e

Mathematical optimization software

Data formats|

* Mathematica
* MPS
* nl
* sol

Modeling tools|

* AIMMS
* AMPL
* APMonitor
* ECLiPSe-CLP
* Gekko
* GAMS
* GNU MathProg
* JuMP
* LINDO
* OPL
* Mathematica
* MiniZinc
* OptimJ
* PuLP
* Pyomo
* TOMLAB
* Xpress Mosel
* ZIMPL
* CasADi

Solvers|

| LP, MILP∗|

* APOPT∗
* ANTIGONE∗
* Artelys Knitro∗
* BCP∗
* CLP
* CBC∗
* CPLEX∗
* FortMP∗
* GCG∗
* GLOP∗
* GLPK/GLPSOL∗
* Gurobi Optimizer∗
* HiGHS∗
* LINDO∗
* Lp_solve
* LOQO
* Mathematica
* MINOS
* MINTO∗
* MOSEK∗
* NAG
* SCIP∗
* SoPlex
* Octeract Engine∗
* SYMPHONY∗
* Xpress Optimizer∗

|

QP, MIQP∗|

* APOPT∗
* ANTIGONE∗
* Artelys Knitro∗
* CBC∗
* CLP
* CPLEX∗
* FortMP∗
* HiGHS
* Gurobi Optimizer∗
* IPOPT
* LINDO∗
* Mathematica
* MINOS
* MOSEK∗
* NAG
* Octeract Engine∗
* SCIP∗
* Xpress Optimizer∗

QCP, MIQCP∗|

* APOPT∗
* ANTIGONE∗
* Artelys Knitro∗
* CPLEX∗
* Gurobi Optimizer∗
* IPOPT
* LINDO∗
* Mathematica
* MINOS
* MOSEK∗
* NAG
* SCIP∗
* Octeract Engine∗
* Xpress Optimizer∗
* Xpress NonLinear∗

SOCP, MISOCP∗|

* Artelys Knitro∗
* CPLEX∗
* Gurobi Optimizer∗
* LINDO∗
* LOQO
* Mathematica
* MOSEK∗
* NAG
* SCIP∗
* Xpress Optimizer∗

SDP, MISDP∗|

* Mathematica
* MOSEK
* NAG

NLP, MINLP∗|

* AOA∗
* APOPT∗
* ANTIGONE∗
* Artelys Knitro∗
* BARON∗
* Couenne∗
* Galahad library
* Gurobi Optimizer∗
* IPOPT
* LINDO∗
* LOQO
* MIDACO∗
* MINOS
* NAG
* NLPQLP
* NPSOL
* SCIP∗
* SNOPT∗
* Octeract Engine∗
* WORHP
* Xpress NonLinear∗

GO|

* ANTIGONE∗
* BARON
* Couenne∗
* Xpress Global
* Mathematica
* LINDO
* SCIP
* Octeract Engine

CP|

* Artelys Kalis
* Comet
* CPLEX CP Optimizer
* Gecode
* Mathematica
* JaCoP
* Xpress Kalis

* List of optimization software
* Comparison of optimization software

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template