Changeset 120 for trunk/Docs/intro.xml


Ignore:
Timestamp:
May 3, 2005 9:03:29 AM (16 years ago)
Author:
rlh
Message:

Rennovated Cbc user guide for INFORMS Tutorial book chapter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Docs/intro.xml

    r119 r120  
    1212    <footnote>
    1313        <para>
    14         The complete acronym is "COIN-OR", but for simplicity (and in keeping with the directory and function names) we will simply use "COIN".
     14        The complete acronym is "COIN-OR" which stands for the Compuational Infrastructure for Operations Research. For simplicity (and in keeping with the directory and function names) we will simply use "COIN".
    1515        </para>
    1616      </footnote>
    17 Branch and Cut solver (CBC) is an open-source mixed-integer program (MIP) solver written  in C++.<!-- some intro here to MIP or to open-soure --> CBC is intendend to be used primarily as a callable library to create customized branch-and-cut solvers. A basic, stand-alone <!-- do link **** link linkend="cbcexe"--> executable version is also available. CBC is an active open-source project led by John Forrest at www.coin-or.org.
     17Branch and Cut solver (CBC) is an open-source mixed-integer program (MIP) solver written  in C++.<!-- some intro here to MIP or to open-source --> CBC is intended to be used primarily as a callable library to create customized branch-and-cut solvers. A basic, stand-alone <!-- do link **** link linkend="cbcexe"--> executable version is also available. CBC is an active open-source project led by John Forrest at www.coin-or.org.
    1818 </para>
    1919 </section>
     
    3535  <para>
    3636<!-- dependencies -->
    37 CBC relies other parts of the COIN repository. CBC relies the COIN Open Solver Inteface (OSI) to communicate with the LP solver. CBC needs an LP solver and any LP solver with an OSI interface can be used with CBC. The LP solver expected to be used most commonly is COIN's native linear program solver, CLP. For cut generators, CBC relies on the COIN Cut Generation Library (CGL). Any cut generator written to CGL standards can be used with CBC. Some of the cut generators in CGL rely on other parts of COIN, e.g., CGL's Gomory cut generator rely on the factorization functionality of CoinFactorization. This document assumes basic familiarity with OSI and CGL.
    38 </para>
    39 <para>
    40 Technically speaking, CBC acesses the solver (and sometime the model and data it contains) through an OSISolverInterface. For the sake of simplicity, we will refer to the <classname>OsiSolverInterface</classname> as "the solver" in this document, rather than "the standard appplication programming interface to the solver". We hope any confusion caused by bluring this distinction will be mitigated by the shorter sentences. 
     37CBC relies other parts of the COIN repository. CBC needs an LP solver and relies the COIN Open Solver Inteface (OSI) to communicate with the user's choice of solver. Any LP solver with an OSI interface can be used with CBC. The LP solver expected to be used most commonly is COIN's native linear program solver, CLP. For cut generators, CBC relies on the COIN Cut Generation Library (CGL). Any cut generator written to CGL standards can be used with CBC. Some of the cut generators in CGL rely on other parts of COIN, e.g., CGL's Gomory cut generator rely on the factorization functionality of <classname>CoinFactorization</classname>. This document assumes basic familiarity with OSI and CGL.
     38</para>
     39<para>
     40Technically speaking, CBC assesses the solver (and sometime the model and data it contains) through an <classname>OSISolverInterface</classname>. For the sake of simplicity, we will refer to the <classname>OsiSolverInterface</classname> as "the solver" in this document, rather than "the standard application programming interface to the solver." We hope any confusion caused by blurring this distinction will be mitigated by the shorter sentences. 
    4141 <!-- need a link to OSI and CGL documentation. Shoot, need OSI and CGL documentation! -->
    4242 </para>
     43<para>
     44In summary, readers should have the following prerequisites:
     45   <itemizedlist>
     46    <listitem>
     47    <simpara>
     48    C++ knowledge,
     49    </simpara>
     50    </listitem>
     51    <listitem>
     52    <simpara>
     53    LP and MIP fundamentals, and   
     54    </simpara>
     55    </listitem>
     56    <listitem>
     57    <simpara>
     58    OSI familiarity.
     59    </simpara>
     60    </listitem>
     61    </itemizedlist>
     62</para>
     63<para>
     64Unless otherwise stated, we will assume the problem being optimized is a minimization problem. The terms "model" and "problem" are used synonymously.
     65</para>
    4366 </section>
    4467
     
    4871</title>
    4972  <para>
    50   Before examining CBC in more detail, we tersely describe the basic branch-and-cut algorithm (which should really be called branch-and-cut-and-bound) and show the major C++ class(es) in CBC related to each step. The CBC classes, labeled (A) through (F), are described in <xref linkend="assClasses"/>.
    51  </para>
    52 
    53   <para>
    54 Step 1. (Bound) Say we are given a MIP model to minimize where some variables must take on integer values (e.g., 0, 1, or 2). Relax the integrality requirement (e.g., consider each "integer" variable to be continuous with a lower bound of 0.0 and an upper bound of 2.0). Solve the resulting linear model with an LP solver to obtain a lower bound on the MIP's objective function value.  If the optimal LP solution has integer values for the MIP's integer variables, we are finished. Stop.   
     73  Before examining CBC in more detail, we tersely describe the basic branch-and-cut algorithm by way of example, (which should really be called branch-and-cut-and-bound) and show the major C++ class(es) in CBC related to each step. The major CBC classes, labeled (A) through (F), are described in <xref linkend="assClasses"/>.
     74 </para>
     75
     76  <para>
     77Step 1. (Bound) Given a MIP model to minimize where some variables must take on integer values (e.g., 0, 1, or 2), relax the integrality requirements (e.g., consider each "integer" variable to be continuous with a lower bound of 0.0 and an upper bound of 2.0). Solve the resulting linear model with an LP solver to obtain a lower bound on the MIP's objective function value.  If the optimal LP solution has integer values for the MIP's integer variables, we are finished. Any MIP-feasible solution provides an upper bound on the objective value. The upper bound equals the lower bound; the solution is optimal.   
    5578 </para>
    5679 <para> 
    57 Step 2. (Branch) Otherwise, choose one non-integral variable (e.g., with value 1.3) (A)(B) and branch.
    58 Create two nodes, one a linear model with the branching variable having an upper bound of 1.0, and the other a linear model withe branching variable having a lower bound of 2.0. Add the two nodes to the search tree.
     80Step 2. (Branch) Otherwise, there exists an "integer" variable with a non-integral value. Choose one non-integral variable (e.g., with value 1.3) (A)(B) and branch. Create two nodes, one with the branching variable having an upper bound of 1.0, and the other with the branching variable having a lower bound of 2.0. Add the two nodes to the search tree.
    5981 </para>
    6082 <para>
     
    6890</para>
    6991<para>
    70    Step 5. (Bound) Interregate optimal LP solution.
    71            If we can't prune the node by  the following,
    72                   (i)  LP is infeasible, prune the node.
    73                   (ii) Else, the optimal LP solution value exceeds the current upper bound, prune the node. 
    74                   (ii) Else, the optimal LP solution does not exceed the current upper bound and is feasible to the MIP.                       Update the upper bound, and the best known MIP solution, and  prune the node by optimality.           then branch.
    75 </para>
    76 <para>
    77    Step 6. (Branch) Choose one non-integral variable to *branch* on (A)(B).
    78            Create two nodes and add them to the search tree.
    79 </para>
    80 <para>
     92   Step 5. (Bound) Interrogate the optimal LP solution, and try to prune the node by one of the following.
     93   <itemizedlist>
     94    <listitem>
     95    <simpara>
     96    LP is infeasible, prune the node.
     97    </simpara>
     98    </listitem>
     99    <listitem>
     100    <simpara>
     101    Else, the optimal LP solution value of the node exceeds the current upper bound, prune the node. 
     102    </simpara>
     103    </listitem>
     104    <listitem>
     105    <simpara>
     106    Else, the optimal LP solution of the node does not exceed the current upper bound and the solution is feasible to the MIP. Update the upper bound, and the best known MIP solution, and  prune the node by optimality.         
     107    </simpara>
     108    </listitem>
     109    </itemizedlist> 
     110</para>
     111<para>
     112   Step 6. (Branch) If we were unable to prune the node, then branch. Choose one non-integral variable to branch on (A)(B). Create two nodes and add them to the search tree.
    81113}
    82114 </para>
    83115 <para>     
    84 This is the outline of a branch-and-bound algorithm. If in optimizing the linear programs, we use cuts to tighten the LP relaxations (E)(F), then we have a branch-and-cut algorithm. (Note: if cuts are just used in Step 1, the method is called a cut-and-branch algorithm.)
     116This is the outline of a "branch-and-bound" algorithm. If in optimizing the linear programs, we use cuts to tighten the LP relaxations (E)(F), then we have a "branch-and-cut" algorithm. (Note, if cuts are only used in Step 1, the method is called a "cut-and-branch" algorithm.)
    85117 
    86118  <!-- rlh: this explaination is for people who already know b&c -->
     
    113145      These classes define the nature of MIP's discontinuity.  The simplest discontinuity
    114146      is a variable which must take an integral value. Other types of discontinuities
    115       will be described later (e.g., lotsizing variables).
     147      exist, e.g., lot-sizing variables.
    116148      <!--rlh: why "...."? Currently 4: CbcBranchActual.cpp, CbcBranchBase.cpp CbcBranchCut.cpp, CbcBranchLotsizes.cpp-->
    117149      </entry>
Note: See TracChangeset for help on using the changeset viewer.