Most (and Least) Useful Classes Used by CBC

CbcModel uses other classes in CBC, some of which are virtual and may have multiple instances. Not all classes are created equal. The two tables below list the classes within CbcModel that are of most interest and of least interest.

Table 2.4. Classes Used by CbcModel - Most Useful

Class name Description Notes
CbcCompareBase Controls which node on tree is selected The default is CbcCompareDefault. Other comparison classes in CbcCompareActual.hpp include CbcCompareDepth and CbcCompareObjective. It is very easy for user to experiment with different comparisons.
CbcCutGenerator A wrapper for CglCutGenerator with additional data to control when the cut generator is used. Other than knowing how to add a cut generator to CbcModel, there is not much the average user needs to know about this class.
CbcHeuristic Heuristic that attempts to generate valid solutions Users can get a lot of value out of coding specialized heuristics. There can be as many different heuristics as you like.
CbcObject Defines what it means for a variable to be satisfied. Virtual class. The branching model used in CBC is based on the idea of an "object". An object has (i) feasible region, (ii) can be evaluated for infeaibility, (iii) can be branched on, e.g., a method of generating a branching object, which defines an up branch and a down branch and (iv) allows comparsion of the effect of branching. Instances include simple integer, simple integer with pseudocosts, SOS (type 1 and 2), and lotsizing (see CbcBranch....hpp).
OsiSolverInterface Defines the LP solver being used and the LP model. Normally a pointer to the desired OsiSolverInteface is passed to CbcModel before branch and cut. Virtual class. The user instantiates the solver interface of their choice, e.g., OsiClpSolverInterface.
There is not much about the classes listed in Table 2.5 that the average user needs to know about.