  Constraint solvers are complex pieces of software which require many design
decisions to be made by the implementer based on limited information. These
decisions affect the performance of the finished solver significantly. Once a
design decision has been made, it cannot easily be reversed, although a
different decision may be more appropriate for a particular problem.
  We investigate using machine learning to make these decisions automatically
depending on the problem to solve. We use the alldifferent constraint as a case
study. Our system is capable of making non-trivial, multi-level decisions that
improve over always making a default choice and can be implemented as part of a
general-purpose constraint solver.
