One of the great bugbears of constraint programming is how to deal with overconstrained problems. As Jean-Francois Puget put it ``What solution do you return when there are no solutions?''. The traditional approach in mathematical programming is to associate a penalty with each violated constraint, and seek the solution which minimises the total penalties.
A related approach is to decide between the different constraints which ones are more important than which others. The constraint program then only enforces a constraint if this does not cause a more important constraint to be violated.
The drawback is that it is not easy for the user to estimate the importance of a constraint, and the solution produced by the software may well not be the best solution in the opinion of the end users of the system. Moreover this approach is a black box, and the end users receive no feedback about ``nearby'' solutions, which might prove better on the ground.
Accordingly one current area of research is how to help the end user solve overconstrained problems, and multi-criteria optimisation problems which have different, and possibly conflicting, optimisation criteria. The challenge is to allow the end-user to explore the solution space interactively, eliciting information about solutions, and potential solutions, which enables the user to choose the very best solution for his or her purposes. This is called mixed initiative programming.