JaCoP solver is Java-based open source solver developed and maintained mainly by two people
Krzysztof Kuchcinski - Dept. of Computer Science, Lund University, Sweden,
and Radoslaw Szymanek - LeShop.ch, Switzerland.
Moreover a number of students have contributed to the solver by programming first versions
of different global constraints and set constraints. The solver is being used in academia
for research and teaching as well as in industry for commercial purposes. The most successful
use of the solver is within Electronic Design Automation community, since both main authors
come from that community.
JaCoP supports finite domains of integers and sets of integers as well as floating-point domain.
It offers a significant number of primitive and global constraints on these variables to
facilitate modeling as well as modular design of search. This allows to tailor search to
characteristics of the problem being addressed. It has currently more than 100,000 lines of code,
not including examples and testing code. The examples which are the preferred way to document the
abilities of JaCoP have more than 20.000 lines of code. The core developers have been working on
JaCoP since 2001 during their free time as a hobby activity. It has been refactored, transformed,
and improved many times. Initial versions of JaCoP were even 3 orders of magnitude slower than
the current version. JaCoP implementation has been influenced heavily by more than 20 research
articles. Moreover, JaCoP was used as a tool to conduct experiments for CP publications.
The major focus of JaCoP are its constraints. These constraints include rich set of primitive,
logical, and conditional constraints as well as many global constraints. The most important
global constraints are as follows :
- alldifferent (with bounds consistency and GAC algorithm based on Régin's algorithm),
- extensional support (with three different state-of-the-art approaches)
and extensional conflict,
- circuit and subcircuit,
- netflow, and
JaCoP software has won many awards in the international Minizinc competition over number of years.
JaCoP solver can be used directly from Java but it has several front-ends. It has FlatZinc language
interface that makes it possible to execute MiniZinc models. Therefore, you do not have to program
in Java in order to use this solver. It is enough to learn Minizinc, automatically transform it into
optimized Flatzinc and read the problem into JaCoP.
For software developers that love Scala, we also provide Scala based domain-specific language so
it is easier to create your own constraint programs even in more intuitive manner.