The use of restart techniques in complete Satisfiability (SAT) algorithms has made
solving hard real world instances possible. Without restarts such algorithms could not
solve those instances, in practice. State of the art algorithms for SAT use restart
techniques, conflict clause recording (nogoods), heuristics based on activity variable in
conflict clauses, among others. Algorithms for SAT and Constraint problems share many
techniques; however, the use of restart techniques in constraint programming with finite
domains (CP(FD)) is not widely used as it is in SAT. We believe that the use of restarts in
CP(FD) algorithms could also be the key to efficiently solve hard combinatorial
problems.
In this PhD thesis we study restarts and associated techniques in CP(FD) solvers. In
particular, we propose to including in a CP(FD) solver restarts, nogoods and heuristics
based in nogoods as this should improve search algorithms, and, consequently, efficiently
solve hard combinatorial problems.
We thus intend to: a) implement restart techniques (successfully used in SAT) to
solve constraint problems with finite domains; b) implement nogoods (learning) and
heuristics based on nogoods, already in use in SAT and associated with restarts; and c)
evaluate the use of restarts and the interplay with the other implemented techniques.
We have conducted the study in the context of domain splitting backtrack search
algorithms with restarts. We have defined domain splitting nogoods that are extracted
from the last branch of the search algorithm before the restart. And, inspired by SAT
solvers, we were able to use information within those nogoods to successfully help the
variable selection heuristics. A frequent restart strategy is also necessary, since our
approach learns from restarts