Configuration LABoratory (CLab) is an open source C++ library for fast backtrack-free interactive product configuration. It encodes configurations in binary and uses reduced ordered Binary Decision Diagrams (BDDs) to represent and reason about large configuration spaces. CLab utilizes the BuDDy BDD package for handling BDDs. Instead of encapsulating this package, CLab works side by side with BuDDy as an advanced support tool. The BDDs generated by CLab can be printed, saved, and further manipulated using the numerous functions of the BuDDy package. This makes CLab suitable for research and education without compromising its ability to support real product configuration applications.
The implementation of CLab has been made as flat as possible to make it easy to alter the code and implement new functions. The library has two major functions: one that builds a BDD representing the configuration space of a declarative product model, and one that computes the set of possible ways a current partial configuration can be extended to a valid product. The latter function is fast (polynomial) and makes the interactive product configuration process complete and backtrack-free, since it allows the user to choose freely between any possible continuation of the partial configuration.
CLab 1.0 has been precompiled on Debian wheezy/sid 10 dec 2011. It should be fairly simple to port to other operating systems.
See the CLab User Manual for details.
CLab related Publications