next up previous
Next: Parameters Up: BAC : A BCP Previous: Types of constraints and


Main classes: BB_prob, BB_tm, and BB_lp

The main classes are BB_prob, BB_tm, and BB_lp. The class BB_prob (file include/BB.hpp) is used for the problem description and contains the definitions for handling core and indexed constraints. This is the class that the user modifies to store additional information about the problem.

The class BB_tm (tree manager) contains a single object of type BB_prob, named desc, holding the description of the problem (user data). The remaining functions are essentially those for setting up the LP at the root, and for packing and unpacking algorithmic cuts.

The class BB_tm (file include/BB_tm.hpp) is derived from the class BB_tm_user (file COIN/Bcp/include/BCP_tm_user.hpp). Some of the data members in BB_tm are:

Prominent function members in BB_tm are:

The class BB_lp contains the functions operating at the nodes of the tree: cut generation, branching selection, and heuristic solution generation among others. The main loop (exited by fathoming or branching decision) performs the steps in the following order (steps followed by a ``(u)'' indicate that the user has an entry point for that step):

Note that if, in an iteration, cuts are generated but the decision to branch is taken, then the cuts are discarded unless the next node to be processed is one of the sons of the current node.

It is important to realize that BCP creates a single object of type BB_lp for the whole enumeration, instead of creating one per node of the enumeration tree. (This holds for a non-parallel execution; in the parallel case, BCP creates one such object per processor used to process nodes.) The data members are of course updated at each node of the tree, but the same object is used throughout the enumeration. This is somewhat counter-intuitive in an object-oriented setting, but is motivated by efficiency reasons: The amount of data that the user needs when processing a node might be quite large. Copying and sending it for each node would be rather inefficient. This implies that variables that the user add to the description of the class might need to be initialized somewhere else than in the constructor of BB_lp. The function initialize_new_search_tree_node() described below is available for this.

Some of the data members in class BB_lp are:

Prominent function members in BB_lp are:


next up previous
Next: Parameters Up: BAC : A BCP Previous: Types of constraints and
IP Seminar Series 2003-12-01