Constraint programming is a programming paradigm that differs from both the problem to be addressed, formalized as a set of variables used in a domain and a set of constraints, and also the method of resolution which propagates the constraints on variables during the exploration of space of candidates, in order to reduce areas associated with variables.

This method allows to solve large combinatorial problems. It is particularly well adapted to the planning and scheduling problems. Depending on the problem, the goal may be:

- find any solution satisfying all constraints,
- find the set of all solutions
- prove that there is no solution to the problem,
- find an optimal solution in a test set (minimizing or maximizing a variable of the problem).

The *ATM* domain has many planning or scheduling problems.

Here are some examples:

- sequencing takeoffs on an airport runway,
- scheduling aircraft approach
- allocating slots for aircraft takeoff, in order to meet the capacity constraints of aviation sectors,
- planning trajectory without conflict.

Our research on constraint programming focuses on the modeling of air traffic problems, and the definition of effective heuristics adapted to these problems.

We have developed a library of constraint programming for whole areas of finite dimension. This library provides all the usual opportunities to create and manipulate finite domain variables, arithmetic and espressions of constraints, including non-linear.

Programmed with the functional language Ocaml, FaCiLe allows the user to easily specify the variables, domains, constraints and objectives, through high-level primitives.

The code is available as Debian package(libfacile-ocaml-dev). By default, the installation is in the directory /usr/lib/ocaml/facile/).

See the online documentation