Constraint programming is a relatively new research area that studies methods for solving problems by exploring constraints, which must be satisfied by a solution. In our research, we use a constraint programming framework over finite domains. It uses methods from operational research, mathematics, computational geometry, graph theory, and artificial intelligence to build efficient methods for combinatorial problems. We apply constraint programming to both optimization and satisfiability problems in embedded systems design problems.
Over the last years we have developed our own constraint solver, called JaCoP - Java Constraint Programming library (http://www.jacop.eu). The solver implements state of the art constraints and has been used in many projects, such as identification and selection of processor accelerators, or scheduling and assignment of operations.
Our research is also focused on parallel and distributed constraint solving. Constraint programming is declarative, hence, there are good opportunities for automatic parallelization. Our work so far has dealt with communication schemes, load-balancing methods, and task parallelism in constraint programming. Parallelizing the solving process is one of the latest trends in the constraint programming community.