The constraint programming community keeps on creating numerous search algorithms, which differ to a greater or lesser extent.It is an as desirable as difficult task to implement a variety of search algorithms in a unifying framework.
This design proposal states the object-oriented environment GOOSE, which supports development of generic search algorithms. It is inspired by Prosser’s categorisation of backtracking search algorithms . GOOSE is abstract enough to house dissimilar search approaches and separates abstract generic logic from domain details. The research focuses implementation needs and explicitly goes for an efficient object-oriented design, which enforces code reuse and flexibility by adequate use of class inheritance and object composition . GOOSE can be implemented in any modern object-oriented language, and as a proof of concept it is realised within our object-oriented solver
. Up to now the concept handles variants of backtracking search and deals with topics like constraint-based scheduling, static and dynamic variable ordering, justifications and backjumping, optimisation, randomisation and restarting techniques. Multidimensional search structures and control flow organisation are of particular interest. Creating new complete search algorithms is easy: A generic frame algorithm is completed by implementing some domain-specific methods. Plug-and-play like assembly of compatible components easily realises algorithmic variations. The variations are chiefly achieved by using generic decorator or strategy objects , which can be exchanged during runtime. First experimental results (job-shop scheduling, 3-SAT, n-queens) indicate a performance loss between 0 % (strong pruning) and 10 % (weak pruning) compared to monolithic equivalents. Future work will cover the introduction of non-systematic generic search algorithms and dynamic adaptive search configuration, e.g. switching dynamically from chronological tree movement to backjumping or from global to local search etc.
Implementing search algorithms according to GOOSE will make them easier to understand and compare, the code will be flexible and reusable.