This is the project description for my Master’s Thesis at the IT University in Copenhagen:
Formulation:
CLab has been developed by VeCoS in 2004. It is an open source interactive product configuration code library that applies precomputed binary decision diagrams (BDDs) to derive the implications of user choices fast. CLab has been implemented in C/C++/STL and is used for educational and research purposes.
The objective of this thesis is to port CLab to C# to make it more accessible to ITU students and others. Furthermore, an independent library must be developed that provides subroutines for performing interactive product configuration via constraint satisfaction algorithms. CLab must be extended such that either BDDs or constraint satisfaction algorithms can be used to solve the configuration problem.
The project aims at answering the following key questions:
- How should the software kernel of CLab be changed to accommodate both BDD and constraint satisfaction subroutines?
- What changes in the API are necessary to use BDDs and constraint satisfaction algorithms interchangeably?
- How can the constraints of CLab’s product modeling language be represented such that they can be manipulated efficiently by constraint satisfaction algorithms?
Method:
The project is planned to have two development cycles. The goal of the first is to:
- specify the overall class structure of CLab,
- specify APIs for CLab and decide how it should interact with the two sublibraries for
- BDD manipulation (the already implemented Buddy package), and
- constraint processing (to be implemented as a part of this project),
- specify an XML syntax for the input language of CLab
- port the current CLab code to C# following the specifications developed in 1), 2) and 3).
The goal of the second development cycle is to
- implement the constraint processing library
- extend CLab to solve interactive configuration problems based on either BDDs or constraint processing,
- implement a GUI for CLab for editing product models and performing interactive product configuration,
- document the developed software.