This is an ongoing series about: How to build a constraint solver? If you haven't read this post: Perfect as it is part 1;) More than 2 years ago I wrote a Sudoku solver in Python. I really enjoyed it and therefore I've spend some time to do the same in Julia just faster;) Then I wanted to build a whole constraint-programming solver in Julia. Well I actually still want to do it. It will be hard but fun.
Constraint logic programming is a paradigm based on the notion of constraints and mechanisms for their resolution. The new concept of solver collaboration enables to solve problems that cannot be tackled or efficiently soh, ed with a single solver. We propose BALI, an environment for designing/executing solver collaborations. BALI is a heterogeneous distributed collaborativc problem solving system. The general view consists in doing scveral solvers collaborate in order to process constraints that cannot be solvcd (or efficiently solved) by a single solver.
Designing component-based constraint solvers is a complex problem. Some components are required, some are optional and there are interdependencies between the components. Because of this, previous approaches to solver design and modification have been ad-hoc and limited. We present a system that transforms a description of the components and the characteristics of the target constraint solver into a constraint problem. Solving this problem yields the description of a valid solver. Our approach represents a significant step towards the automated design and synthesis of constraint solvers that are specialised for individual constraint problem classes or instances.
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.
Tailoring solver-independent constraint instances to target solvers is an important component of automated constraint modelling. We augment the tailoring process by a set of enhancement techniques of which many are successfully established in related fields, such as common subexpression elimination. Our aim is to apply these techniques in an efficient fashion, since we tailor instance-wise, and not whole problem classes. We integrate automated enhancement into the tailoring procedure, which creates a novel setup with great potential, as our empirical analysis confirms: impressive speedups, additional propagation and instance reduction, all for investing little computational effort.