source: trunk/Docs/intro.xml @ 87

Last change on this file since 87 was 87, checked in by forrest, 15 years ago

start of documentation

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
1<?xml version="1.0" encoding="ISO-8859-1"?>
2  <chapter id="intro">
3  <title>
4    Introduction
5  </title>
6  <section>
7  <title>
8  Welcome to CBC
9  </title>
10  <para>
11  COIN Branch and Cut or CBC is an open-source mixed integer solver written
12  in C++.  It is primarily meant to be used as a callable library, but a
13  basic, stand-alone do link **** link linkend="cbcexe"executable version is also
14  available.  This Branch and Cut solver relies on many other parts of the COIN
15  repository.  So it relies on Cgl for cut generators and any cut generator written to
16  CGL standards may be used in CBC.  Again some of these cut generators e.g. Gomory cuts
17  rely on the factorization functionality of CoinFactorization.  CBC needs a linear solver
18  and uses the Osi (Open Solver Interface) interface to access the linaer solver so
19  many solvers may be used.  However the most common use is expected to be when
20  using COIN's native linear Solver - CLP.
21  </para>
22  <para>
23  Before examining CBC in more detail it may be helpful to give a very brief description
24  of Branch and Cut (which should really be called Branch and Cut and Bound).  If some
25  variables in the model must take on integer values e.g. 0,1 or 2 then the integrality
26  requirement is relaxed and a lower bound of 0.0 and an upper bound of 2.0 put on the
27  variable(s). This linear model can be solved using a solver.  If all "integer"
28  variables take integer values then we are finished;  if not we choose one non-integral
29  variable e.g. with value 1.3 (A) (B) and create two linear models - one with the variable
30  having an upper bound of 1.0 and the other with a lower bound of 2.0.  We then put
31  these two models on our tree of models and solve one of them.  We repeat the process
32  taking one model off our tree (C) (D) and repeating the process.  As every time we
33  branch we tighten the problem so the objective value can not improve.  So if we
34  obtain a valid solution we can use that as a bound to prune the tree.  If we
35  try and make the linear models more integral by using Cuts then it is termed
36  Branch and Cut (E) (F).
37  </para>
38    <table frame="none">
39  <title>Associated classes</title>
40    <tgroup cols="3">
41    <thead>
42    <row>
43    <entry>
44    Note
45    </entry>
46    <entry>
47    Class name
48    </entry>
49    <entry>
50    Description
51    </entry>
52    </row>
53    </thead>
54    <tbody>
55    <row>
56      <entry align="left" valign="top">
57      (A)
58      </entry>
59      <entry align="left" valign="top">
60      CbcBranch...
61      </entry>
62      <entry align="left" valign="top">
63      These classes define what is the nature of discontinuity.  The simplest
64      are variables which must take an integral value but there others
65      which will be described later e.g. lotsizing variables. 
66      </entry>
67    </row>
68    <row>
69      <entry align="left" valign="top">
70      (B)
71      </entry>
72      <entry align="left" valign="top">
73      CbcNode
74      </entry>
75      <entry align="left" valign="top">
76      This is the class that decides which variable/entity  to branch on next.
77      Even advanced users will probably only interact with this by setting
78      CbcModel parameters e.g. priorities.
79      </entry>
80    </row>
81    <row>
82      <entry align="left" valign="top">
83      (C)
84      </entry>
85      <entry align="left" valign="top">
86      CbcTree
87      </entry>
88      <entry align="left" valign="top">
89      All unsolved models can be thought of as being on a tree where each
90      model can branch two or more times.  The user should not need to be
91      concerned with this class.
92      </entry>
93    </row>
94    <row>
95      <entry align="left" valign="top">
96      (D)
97      </entry>
98      <entry align="left" valign="top">
99      CbcCompare...
100      </entry>
101      <entry align="left" valign="top">
102      All unsolved models are in a tree but which leaf do we choose.  These
103      classes are very small simple ones which can be tailored to suit the problem.
104      </entry>
105    </row>
106    <row>
107      <entry align="left" valign="top">
108      (E)
109      </entry>
110      <entry align="left" valign="top">
111      CglCutGenerators
112      </entry>
113      <entry align="left" valign="top">
114      Any cut generator from Cgl can be given to the model to be used with parameters
115      which modify when each generator will be tried.  Few people will write their
116      own cut generators but all should see which are effective.
117      </entry>
118    </row>
119    <row>
120      <entry align="left" valign="top">
121      (F)
122      </entry>
123      <entry align="left" valign="top">
124      CbcHeuristics
125      </entry>
126      <entry align="left" valign="top">
127      Heuristics are very important for obtaining valid solutions quickly.  Some
128      are available but this is an area where it is useful and interesting to
129      write specialized ones.
130      </entry>
131    </row>
132    </tbody>
133  </tgroup>
134  </table>
136  There are a number of resources available to help new CBC users get started.
137  This document is designed to be used in conjunction with the files in the
138  Samples subdirectory of the main CBC directory (<filename>COIN/Cbc/Samples</filename>).
139  The Samples illustrate how to use CBC and may also serve as useful starting points
140  for user projects.  In the event that either this document or the available
141  <link linkend="doxygen">Doxygen content</link> conflicts with the observed
142  behavior of the source code, the comments in the header files, found in
143  <filename>COIN/Cbc/include</filename>, are the ultimate reference.
144  </para>
145  </section>
146  <section>
147  <title>
148  Prerequisites
149  </title>
150  <para>
151  CBC is written in C++, so it is expected that users of CBC will be writing
152  C++ programs which use CBC as a library.  Thus a working knowledge of
153  <ulink url="">C++</ulink>, including basic
154  object-oriented programming terminology is assumed in this document.  In
155  addition, the user should be familiar with the fundamental concepts of
156  <ulink url="">
157  Linear Programming</ulink> and
158  <ulink url="">
159  Mixed Integer Programming (may need better linke)</ulink> .
160  </para>
161  </section>
162  </chapter>
Note: See TracBrowser for help on using the repository browser.