Introduction
rlfap-scen11

The CSP Library consists of a set of classes that can be used to efficiently represent and solve Constraint Satisfaction Problems (CSPs).

This library is not a general purpose solver. It does not support many features that are useful in representing real life problems (like continuous domains, n-ary constraints, composite representations, etc). It is however an useful testbench for experimenting with new algorithms and ideas, do performance measurements, etc.

The design behind the CSP Library emphasizes flexibility, rather than raw performance. The goal has been to create a library that can be easy to use in new experiments, by providing an infrastructure in which researchers can play with new algorithms and ideas. It has not been designed to squeeze every single drop of performance out of a certain algorithm.

The library has mechanisms for allowing search to use different decompositions at different levels in the tree, whereby a decomposition can decide it would be overkill to continue the search in the remaining subproblem and can yield control to a less sophisticated search method that is more efficient on small problems. The library implements retraction plug-ins, like Chronological or CBJ that can simply be plugged in into any decomposition or filter. It can hide parts of a problem and allow a decomposition to temporarily work on a subproblem, it allows chaining of any number of heuristics for the purpose of breaking ties, it allows multiple constraints between the same pair of variables, and it has the ability to create problems with many types of values, not just integers. The library can represent small problems as well as large ones and has no artificial limitations implemented solely for the purpose of improving performance on certain types of problems or benchmarks. The library sports a sophisticated, low-overhead logging mechanism that can be compiled in optimized code with minimal impact. All this flexibility comes at a slight cost in performance. That is not to say, however, that the CSP Library is inefficient - it is not. However, hand coded algorithms that work on integers only and allocate everything statically will probably be faster.

The graph above is a representation of the RLFAP CELAR SCEN11 problem drawn by the CSP Library using AT&T's Graphviz graph drawing software. The following links point to higher resolution versions of the same thing:

News
Light pole with man

Version 0.4.3 (May 8th, 2006):

Version 0.4.2 (May 18th, 2005):

Aran Islands cemetery

Version 0.4.1 (April 20th, 2004):

People on the beach

Version 0.4.0 (December 11th, 2003):

Documentation

This description of the library is a bit out-of-date. The general structure of the library has not changed, but a lot more classes and algorithms have been added, and they're completely described in the API documentation. Reading the News might also be a good idea.

API
Download
Playing guitar

Fedora Core 3 RPMS:

RedHat 9 RPMS:

Source Code: