Choco Solver is an Open Source Java library for Constraint Programming that has been used for more than 20 years by many companies and universities. Choco is among the most efficient solvers available and has a high code quality. Being a Java library, it can be integrated very easily to develop innovative web-services for decision making. Cosling develops Choco Solver together with IMT Atlantique.

A Constraint Satisfaction Problem (CSP) is defined by a set of variables, each with a domain of values, and a set of constraints defining the allowed value combinations. Solving a CSP consists of assigning each variable a value in its domain such that all constraints are satisfied. This is referred to as Constraint-Programming (CP) as the problem to be solved is described declaratively by its set of constraints.

When the problem has, in addition to the constraints to satisfy, one or more functions to optimize, it is referred to as a Constraint Optimization Problem (COP). Such criteria may arise from economic considerations (minimizing solution cost), organizational concerns (maximizing workload balance), or technical requirements (maximizing constraint satisfaction when not all can be satisfied - then called soft constraints). While academic scientific literature often focuses on constraint satisfaction problems, almost all industrial problems tackled by Cosling are multi-objective optimization problems.

CP is a declarative programming paradigm: instead of giving a procedure to follow to obtain a solution, we simply specify the properties that characterize the desired solution. This clear separation between functional and technical aspects goes far beyond computer programming; it is a different way of thinking that greatly facilitates exchanges with business stakeholders in industrial projects. Learn more.

Once the CP model has been established, it can be solved using a generic CP solver, such as Choco Solver. Constraint filtering algorithms will remove inconsistent values from the domains using logic and advanced algorithms, while search heuristics will intelligently explore the residual search space through a set of refutable hypotheses. The solving process of a constraint-programming solver thus relies on the alternation of these two fundamental concepts, filtering and exploration, until finding a feasible solution or proving that none exist.

Industrial problems are often both very complex and large in size, so computation time can quickly become a significant issue. To increase solver performance, it is often wise to enrich the model with advanced components, such as global constraints, search heuristics incorporating domain expertise, or local search. This activity requires expertise in Constraint Programming and a good knowledge of the solver. Rely on our experts to effectively solve your complex problems!