Changeset 120 for trunk/Docs/intro.xml
 Timestamp:
 May 3, 2005 9:03:29 AM (16 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/Docs/intro.xml
r119 r120 12 12 <footnote> 13 13 <para> 14 The complete acronym is "COINOR" , but for simplicity (and in keeping with the directory and function names) we will simply use "COIN".14 The complete acronym is "COINOR" 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". 15 15 </para> 16 16 </footnote> 17 Branch and Cut solver (CBC) is an opensource mixedinteger program (MIP) solver written in C++.<! some intro here to MIP or to opensour e > CBC is intendend to be used primarily as a callable library to create customized branchandcut solvers. A basic, standalone <! do link **** link linkend="cbcexe"> executable version is also available. CBC is an active opensource project led by John Forrest at www.coinor.org.17 Branch and Cut solver (CBC) is an opensource mixedinteger program (MIP) solver written in C++.<! some intro here to MIP or to opensource > CBC is intended to be used primarily as a callable library to create customized branchandcut solvers. A basic, standalone <! do link **** link linkend="cbcexe"> executable version is also available. CBC is an active opensource project led by John Forrest at www.coinor.org. 18 18 </para> 19 19 </section> … … 35 35 <para> 36 36 <! 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 a cesses 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.37 CBC 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> 40 Technically 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. 41 41 <! need a link to OSI and CGL documentation. Shoot, need OSI and CGL documentation! > 42 42 </para> 43 <para> 44 In 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> 64 Unless otherwise stated, we will assume the problem being optimized is a minimization problem. The terms "model" and "problem" are used synonymously. 65 </para> 43 66 </section> 44 67 … … 48 71 </title> 49 72 <para> 50 Before examining CBC in more detail, we tersely describe the basic branchandcut algorithm (which should really be called branchandcutandbound) and show the major C++ class(es) in CBC related to each step. TheCBC 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 branchandcut algorithm by way of example, (which should really be called branchandcutandbound) 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> 77 Step 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 MIPfeasible solution provides an upper bound on the objective value. The upper bound equals the lower bound; the solution is optimal. 55 78 </para> 56 79 <para> 57 Step 2. (Branch) Otherwise, choose one nonintegral 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. 80 Step 2. (Branch) Otherwise, there exists an "integer" variable with a nonintegral value. Choose one nonintegral 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. 59 81 </para> 60 82 <para> … … 68 90 </para> 69 91 <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 nonintegral 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 nonintegral variable to branch on (A)(B). Create two nodes and add them to the search tree. 81 113 } 82 114 </para> 83 115 <para> 84 This is the outline of a branchandbound algorithm. If in optimizing the linear programs, we use cuts to tighten the LP relaxations (E)(F), then we have a branchandcut algorithm. (Note: if cuts are just used in Step 1, the method is called a cutandbranchalgorithm.)116 This is the outline of a "branchandbound" algorithm. If in optimizing the linear programs, we use cuts to tighten the LP relaxations (E)(F), then we have a "branchandcut" algorithm. (Note, if cuts are only used in Step 1, the method is called a "cutandbranch" algorithm.) 85 117 86 118 <! rlh: this explaination is for people who already know b&c > … … 113 145 These classes define the nature of MIP's discontinuity. The simplest discontinuity 114 146 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., lotsizing variables. 116 148 <!rlh: why "...."? Currently 4: CbcBranchActual.cpp, CbcBranchBase.cpp CbcBranchCut.cpp, CbcBranchLotsizes.cpp> 117 149 </entry>
Note: See TracChangeset
for help on using the changeset viewer.