ruby-cbc 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/README.md +203 -0
  7. data/Rakefile +40 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/ext/ruby-cbc/cbc.i +15 -0
  11. data/ext/ruby-cbc/cbc_wrap.c +4618 -0
  12. data/ext/ruby-cbc/extconf.rb +60 -0
  13. data/ext/ruby-cbc/install/bin/cbc +0 -0
  14. data/ext/ruby-cbc/install/bin/clp +0 -0
  15. data/ext/ruby-cbc/install/include/coin/CbcBranchActual.hpp +24 -0
  16. data/ext/ruby-cbc/install/include/coin/CbcBranchAllDifferent.hpp +62 -0
  17. data/ext/ruby-cbc/install/include/coin/CbcBranchBase.hpp +78 -0
  18. data/ext/ruby-cbc/install/include/coin/CbcBranchCut.hpp +183 -0
  19. data/ext/ruby-cbc/install/include/coin/CbcBranchDecision.hpp +129 -0
  20. data/ext/ruby-cbc/install/include/coin/CbcBranchDefaultDecision.hpp +100 -0
  21. data/ext/ruby-cbc/install/include/coin/CbcBranchDynamic.hpp +206 -0
  22. data/ext/ruby-cbc/install/include/coin/CbcBranchLotsize.hpp +242 -0
  23. data/ext/ruby-cbc/install/include/coin/CbcBranchToFixLots.hpp +94 -0
  24. data/ext/ruby-cbc/install/include/coin/CbcBranchingObject.hpp +236 -0
  25. data/ext/ruby-cbc/install/include/coin/CbcClique.hpp +303 -0
  26. data/ext/ruby-cbc/install/include/coin/CbcCompare.hpp +39 -0
  27. data/ext/ruby-cbc/install/include/coin/CbcCompareActual.hpp +14 -0
  28. data/ext/ruby-cbc/install/include/coin/CbcCompareBase.hpp +142 -0
  29. data/ext/ruby-cbc/install/include/coin/CbcCompareDefault.hpp +120 -0
  30. data/ext/ruby-cbc/install/include/coin/CbcCompareDepth.hpp +47 -0
  31. data/ext/ruby-cbc/install/include/coin/CbcCompareEstimate.hpp +48 -0
  32. data/ext/ruby-cbc/install/include/coin/CbcCompareObjective.hpp +49 -0
  33. data/ext/ruby-cbc/install/include/coin/CbcConfig.h +14 -0
  34. data/ext/ruby-cbc/install/include/coin/CbcConsequence.hpp +49 -0
  35. data/ext/ruby-cbc/install/include/coin/CbcCountRowCut.hpp +168 -0
  36. data/ext/ruby-cbc/install/include/coin/CbcCutGenerator.hpp +482 -0
  37. data/ext/ruby-cbc/install/include/coin/CbcCutModifier.hpp +57 -0
  38. data/ext/ruby-cbc/install/include/coin/CbcCutSubsetModifier.hpp +66 -0
  39. data/ext/ruby-cbc/install/include/coin/CbcDummyBranchingObject.hpp +83 -0
  40. data/ext/ruby-cbc/install/include/coin/CbcEventHandler.hpp +245 -0
  41. data/ext/ruby-cbc/install/include/coin/CbcFathom.hpp +137 -0
  42. data/ext/ruby-cbc/install/include/coin/CbcFathomDynamicProgramming.hpp +169 -0
  43. data/ext/ruby-cbc/install/include/coin/CbcFeasibilityBase.hpp +56 -0
  44. data/ext/ruby-cbc/install/include/coin/CbcFixVariable.hpp +67 -0
  45. data/ext/ruby-cbc/install/include/coin/CbcFollowOn.hpp +207 -0
  46. data/ext/ruby-cbc/install/include/coin/CbcFullNodeInfo.hpp +161 -0
  47. data/ext/ruby-cbc/install/include/coin/CbcGeneral.hpp +60 -0
  48. data/ext/ruby-cbc/install/include/coin/CbcGeneralDepth.hpp +279 -0
  49. data/ext/ruby-cbc/install/include/coin/CbcHeuristic.hpp +682 -0
  50. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDINS.hpp +96 -0
  51. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDW.hpp +309 -0
  52. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDive.hpp +192 -0
  53. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveCoefficient.hpp +52 -0
  54. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveFractional.hpp +52 -0
  55. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveGuided.hpp +55 -0
  56. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveLineSearch.hpp +52 -0
  57. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDivePseudoCost.hpp +60 -0
  58. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveVectorLength.hpp +52 -0
  59. data/ext/ruby-cbc/install/include/coin/CbcHeuristicFPump.hpp +340 -0
  60. data/ext/ruby-cbc/install/include/coin/CbcHeuristicGreedy.hpp +280 -0
  61. data/ext/ruby-cbc/install/include/coin/CbcHeuristicLocal.hpp +271 -0
  62. data/ext/ruby-cbc/install/include/coin/CbcHeuristicPivotAndFix.hpp +58 -0
  63. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRENS.hpp +77 -0
  64. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRINS.hpp +102 -0
  65. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRandRound.hpp +58 -0
  66. data/ext/ruby-cbc/install/include/coin/CbcHeuristicVND.hpp +94 -0
  67. data/ext/ruby-cbc/install/include/coin/CbcLinked.hpp +1406 -0
  68. data/ext/ruby-cbc/install/include/coin/CbcMessage.hpp +94 -0
  69. data/ext/ruby-cbc/install/include/coin/CbcMipStartIO.hpp +26 -0
  70. data/ext/ruby-cbc/install/include/coin/CbcModel.hpp +2952 -0
  71. data/ext/ruby-cbc/install/include/coin/CbcNWay.hpp +166 -0
  72. data/ext/ruby-cbc/install/include/coin/CbcNode.hpp +351 -0
  73. data/ext/ruby-cbc/install/include/coin/CbcNodeInfo.hpp +349 -0
  74. data/ext/ruby-cbc/install/include/coin/CbcObject.hpp +272 -0
  75. data/ext/ruby-cbc/install/include/coin/CbcObjectUpdateData.hpp +64 -0
  76. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.cpp +4134 -0
  77. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.hpp +532 -0
  78. data/ext/ruby-cbc/install/include/coin/CbcParam.hpp +324 -0
  79. data/ext/ruby-cbc/install/include/coin/CbcPartialNodeInfo.hpp +110 -0
  80. data/ext/ruby-cbc/install/include/coin/CbcSOS.hpp +279 -0
  81. data/ext/ruby-cbc/install/include/coin/CbcSimpleInteger.hpp +286 -0
  82. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +564 -0
  83. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerPseudoCost.hpp +114 -0
  84. data/ext/ruby-cbc/install/include/coin/CbcSolver.hpp +447 -0
  85. data/ext/ruby-cbc/install/include/coin/CbcStrategy.hpp +258 -0
  86. data/ext/ruby-cbc/install/include/coin/CbcSubProblem.hpp +83 -0
  87. data/ext/ruby-cbc/install/include/coin/CbcTree.hpp +490 -0
  88. data/ext/ruby-cbc/install/include/coin/CbcTreeLocal.hpp +372 -0
  89. data/ext/ruby-cbc/install/include/coin/Cbc_C_Interface.h +381 -0
  90. data/ext/ruby-cbc/install/include/coin/Cgl012cut.hpp +464 -0
  91. data/ext/ruby-cbc/install/include/coin/CglAllDifferent.hpp +115 -0
  92. data/ext/ruby-cbc/install/include/coin/CglClique.hpp +308 -0
  93. data/ext/ruby-cbc/install/include/coin/CglConfig.h +19 -0
  94. data/ext/ruby-cbc/install/include/coin/CglCutGenerator.hpp +121 -0
  95. data/ext/ruby-cbc/install/include/coin/CglDuplicateRow.hpp +189 -0
  96. data/ext/ruby-cbc/install/include/coin/CglFlowCover.hpp +371 -0
  97. data/ext/ruby-cbc/install/include/coin/CglGMI.hpp +364 -0
  98. data/ext/ruby-cbc/install/include/coin/CglGMIParam.hpp +313 -0
  99. data/ext/ruby-cbc/install/include/coin/CglGomory.hpp +204 -0
  100. data/ext/ruby-cbc/install/include/coin/CglKnapsackCover.hpp +310 -0
  101. data/ext/ruby-cbc/install/include/coin/CglLandP.hpp +306 -0
  102. data/ext/ruby-cbc/install/include/coin/CglLandPValidator.hpp +130 -0
  103. data/ext/ruby-cbc/install/include/coin/CglLiftAndProject.hpp +104 -0
  104. data/ext/ruby-cbc/install/include/coin/CglMessage.hpp +50 -0
  105. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding.hpp +429 -0
  106. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding2.hpp +427 -0
  107. data/ext/ruby-cbc/install/include/coin/CglOddHole.hpp +160 -0
  108. data/ext/ruby-cbc/install/include/coin/CglParam.hpp +93 -0
  109. data/ext/ruby-cbc/install/include/coin/CglPreProcess.hpp +492 -0
  110. data/ext/ruby-cbc/install/include/coin/CglProbing.hpp +543 -0
  111. data/ext/ruby-cbc/install/include/coin/CglRedSplit.hpp +448 -0
  112. data/ext/ruby-cbc/install/include/coin/CglRedSplit2.hpp +494 -0
  113. data/ext/ruby-cbc/install/include/coin/CglRedSplit2Param.hpp +495 -0
  114. data/ext/ruby-cbc/install/include/coin/CglRedSplitParam.hpp +272 -0
  115. data/ext/ruby-cbc/install/include/coin/CglResidualCapacity.hpp +240 -0
  116. data/ext/ruby-cbc/install/include/coin/CglSimpleRounding.hpp +174 -0
  117. data/ext/ruby-cbc/install/include/coin/CglStored.hpp +125 -0
  118. data/ext/ruby-cbc/install/include/coin/CglTreeInfo.hpp +180 -0
  119. data/ext/ruby-cbc/install/include/coin/CglTwomir.hpp +565 -0
  120. data/ext/ruby-cbc/install/include/coin/CglZeroHalf.hpp +133 -0
  121. data/ext/ruby-cbc/install/include/coin/ClpAmplObjective.hpp +113 -0
  122. data/ext/ruby-cbc/install/include/coin/ClpCholeskyBase.hpp +294 -0
  123. data/ext/ruby-cbc/install/include/coin/ClpCholeskyDense.hpp +162 -0
  124. data/ext/ruby-cbc/install/include/coin/ClpConfig.h +17 -0
  125. data/ext/ruby-cbc/install/include/coin/ClpConstraint.hpp +125 -0
  126. data/ext/ruby-cbc/install/include/coin/ClpConstraintAmpl.hpp +108 -0
  127. data/ext/ruby-cbc/install/include/coin/ClpConstraintLinear.hpp +110 -0
  128. data/ext/ruby-cbc/install/include/coin/ClpConstraintQuadratic.hpp +119 -0
  129. data/ext/ruby-cbc/install/include/coin/ClpDualRowDantzig.hpp +71 -0
  130. data/ext/ruby-cbc/install/include/coin/ClpDualRowPivot.hpp +129 -0
  131. data/ext/ruby-cbc/install/include/coin/ClpDualRowSteepest.hpp +153 -0
  132. data/ext/ruby-cbc/install/include/coin/ClpDummyMatrix.hpp +183 -0
  133. data/ext/ruby-cbc/install/include/coin/ClpDynamicExampleMatrix.hpp +186 -0
  134. data/ext/ruby-cbc/install/include/coin/ClpDynamicMatrix.hpp +381 -0
  135. data/ext/ruby-cbc/install/include/coin/ClpEventHandler.hpp +187 -0
  136. data/ext/ruby-cbc/install/include/coin/ClpFactorization.hpp +432 -0
  137. data/ext/ruby-cbc/install/include/coin/ClpGubDynamicMatrix.hpp +247 -0
  138. data/ext/ruby-cbc/install/include/coin/ClpGubMatrix.hpp +358 -0
  139. data/ext/ruby-cbc/install/include/coin/ClpInterior.hpp +570 -0
  140. data/ext/ruby-cbc/install/include/coin/ClpLinearObjective.hpp +103 -0
  141. data/ext/ruby-cbc/install/include/coin/ClpMatrixBase.hpp +524 -0
  142. data/ext/ruby-cbc/install/include/coin/ClpMessage.hpp +131 -0
  143. data/ext/ruby-cbc/install/include/coin/ClpModel.hpp +1307 -0
  144. data/ext/ruby-cbc/install/include/coin/ClpNetworkMatrix.hpp +229 -0
  145. data/ext/ruby-cbc/install/include/coin/ClpNode.hpp +349 -0
  146. data/ext/ruby-cbc/install/include/coin/ClpNonLinearCost.hpp +401 -0
  147. data/ext/ruby-cbc/install/include/coin/ClpObjective.hpp +134 -0
  148. data/ext/ruby-cbc/install/include/coin/ClpPackedMatrix.hpp +638 -0
  149. data/ext/ruby-cbc/install/include/coin/ClpParameters.hpp +126 -0
  150. data/ext/ruby-cbc/install/include/coin/ClpPdcoBase.hpp +103 -0
  151. data/ext/ruby-cbc/install/include/coin/ClpPlusMinusOneMatrix.hpp +290 -0
  152. data/ext/ruby-cbc/install/include/coin/ClpPresolve.hpp +299 -0
  153. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnDantzig.hpp +72 -0
  154. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnPivot.hpp +155 -0
  155. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnSteepest.hpp +247 -0
  156. data/ext/ruby-cbc/install/include/coin/ClpQuadraticObjective.hpp +155 -0
  157. data/ext/ruby-cbc/install/include/coin/ClpSimplex.hpp +1797 -0
  158. data/ext/ruby-cbc/install/include/coin/ClpSimplexDual.hpp +300 -0
  159. data/ext/ruby-cbc/install/include/coin/ClpSimplexNonlinear.hpp +117 -0
  160. data/ext/ruby-cbc/install/include/coin/ClpSimplexOther.hpp +277 -0
  161. data/ext/ruby-cbc/install/include/coin/ClpSimplexPrimal.hpp +244 -0
  162. data/ext/ruby-cbc/install/include/coin/ClpSolve.hpp +446 -0
  163. data/ext/ruby-cbc/install/include/coin/Clp_C_Interface.h +525 -0
  164. data/ext/ruby-cbc/install/include/coin/CoinAlloc.hpp +176 -0
  165. data/ext/ruby-cbc/install/include/coin/CoinBuild.hpp +149 -0
  166. data/ext/ruby-cbc/install/include/coin/CoinDenseFactorization.hpp +419 -0
  167. data/ext/ruby-cbc/install/include/coin/CoinDenseVector.hpp +383 -0
  168. data/ext/ruby-cbc/install/include/coin/CoinDistance.hpp +48 -0
  169. data/ext/ruby-cbc/install/include/coin/CoinError.hpp +257 -0
  170. data/ext/ruby-cbc/install/include/coin/CoinFactorization.hpp +2044 -0
  171. data/ext/ruby-cbc/install/include/coin/CoinFileIO.hpp +166 -0
  172. data/ext/ruby-cbc/install/include/coin/CoinFinite.hpp +34 -0
  173. data/ext/ruby-cbc/install/include/coin/CoinFloatEqual.hpp +177 -0
  174. data/ext/ruby-cbc/install/include/coin/CoinHelperFunctions.hpp +1111 -0
  175. data/ext/ruby-cbc/install/include/coin/CoinIndexedVector.hpp +1164 -0
  176. data/ext/ruby-cbc/install/include/coin/CoinLpIO.hpp +805 -0
  177. data/ext/ruby-cbc/install/include/coin/CoinMessage.hpp +96 -0
  178. data/ext/ruby-cbc/install/include/coin/CoinMessageHandler.hpp +666 -0
  179. data/ext/ruby-cbc/install/include/coin/CoinModel.hpp +1054 -0
  180. data/ext/ruby-cbc/install/include/coin/CoinModelUseful.hpp +441 -0
  181. data/ext/ruby-cbc/install/include/coin/CoinMpsIO.hpp +1056 -0
  182. data/ext/ruby-cbc/install/include/coin/CoinOslFactorization.hpp +280 -0
  183. data/ext/ruby-cbc/install/include/coin/CoinPackedMatrix.hpp +947 -0
  184. data/ext/ruby-cbc/install/include/coin/CoinPackedVector.hpp +657 -0
  185. data/ext/ruby-cbc/install/include/coin/CoinPackedVectorBase.hpp +269 -0
  186. data/ext/ruby-cbc/install/include/coin/CoinParam.hpp +644 -0
  187. data/ext/ruby-cbc/install/include/coin/CoinPragma.hpp +26 -0
  188. data/ext/ruby-cbc/install/include/coin/CoinPresolveDoubleton.hpp +73 -0
  189. data/ext/ruby-cbc/install/include/coin/CoinPresolveDual.hpp +85 -0
  190. data/ext/ruby-cbc/install/include/coin/CoinPresolveDupcol.hpp +226 -0
  191. data/ext/ruby-cbc/install/include/coin/CoinPresolveEmpty.hpp +116 -0
  192. data/ext/ruby-cbc/install/include/coin/CoinPresolveFixed.hpp +181 -0
  193. data/ext/ruby-cbc/install/include/coin/CoinPresolveForcing.hpp +61 -0
  194. data/ext/ruby-cbc/install/include/coin/CoinPresolveImpliedFree.hpp +60 -0
  195. data/ext/ruby-cbc/install/include/coin/CoinPresolveIsolated.hpp +51 -0
  196. data/ext/ruby-cbc/install/include/coin/CoinPresolveMatrix.hpp +1842 -0
  197. data/ext/ruby-cbc/install/include/coin/CoinPresolveMonitor.hpp +105 -0
  198. data/ext/ruby-cbc/install/include/coin/CoinPresolvePsdebug.hpp +166 -0
  199. data/ext/ruby-cbc/install/include/coin/CoinPresolveSingleton.hpp +112 -0
  200. data/ext/ruby-cbc/install/include/coin/CoinPresolveSubst.hpp +101 -0
  201. data/ext/ruby-cbc/install/include/coin/CoinPresolveTighten.hpp +55 -0
  202. data/ext/ruby-cbc/install/include/coin/CoinPresolveTripleton.hpp +66 -0
  203. data/ext/ruby-cbc/install/include/coin/CoinPresolveUseless.hpp +63 -0
  204. data/ext/ruby-cbc/install/include/coin/CoinPresolveZeros.hpp +60 -0
  205. data/ext/ruby-cbc/install/include/coin/CoinRational.hpp +44 -0
  206. data/ext/ruby-cbc/install/include/coin/CoinSearchTree.hpp +465 -0
  207. data/ext/ruby-cbc/install/include/coin/CoinShallowPackedVector.hpp +148 -0
  208. data/ext/ruby-cbc/install/include/coin/CoinSignal.hpp +117 -0
  209. data/ext/ruby-cbc/install/include/coin/CoinSimpFactorization.hpp +431 -0
  210. data/ext/ruby-cbc/install/include/coin/CoinSmartPtr.hpp +528 -0
  211. data/ext/ruby-cbc/install/include/coin/CoinSnapshot.hpp +476 -0
  212. data/ext/ruby-cbc/install/include/coin/CoinSort.hpp +678 -0
  213. data/ext/ruby-cbc/install/include/coin/CoinStructuredModel.hpp +247 -0
  214. data/ext/ruby-cbc/install/include/coin/CoinTime.hpp +310 -0
  215. data/ext/ruby-cbc/install/include/coin/CoinTypes.hpp +64 -0
  216. data/ext/ruby-cbc/install/include/coin/CoinUtility.hpp +19 -0
  217. data/ext/ruby-cbc/install/include/coin/CoinUtilsConfig.h +34 -0
  218. data/ext/ruby-cbc/install/include/coin/CoinWarmStart.hpp +58 -0
  219. data/ext/ruby-cbc/install/include/coin/CoinWarmStartBasis.hpp +456 -0
  220. data/ext/ruby-cbc/install/include/coin/CoinWarmStartDual.hpp +166 -0
  221. data/ext/ruby-cbc/install/include/coin/CoinWarmStartPrimalDual.hpp +211 -0
  222. data/ext/ruby-cbc/install/include/coin/CoinWarmStartVector.hpp +488 -0
  223. data/ext/ruby-cbc/install/include/coin/Coin_C_defines.h +115 -0
  224. data/ext/ruby-cbc/install/include/coin/Idiot.hpp +298 -0
  225. data/ext/ruby-cbc/install/include/coin/OsiAuxInfo.hpp +206 -0
  226. data/ext/ruby-cbc/install/include/coin/OsiBranchingObject.hpp +1005 -0
  227. data/ext/ruby-cbc/install/include/coin/OsiCbcSolverInterface.hpp +764 -0
  228. data/ext/ruby-cbc/install/include/coin/OsiChooseVariable.hpp +534 -0
  229. data/ext/ruby-cbc/install/include/coin/OsiClpSolverInterface.hpp +1509 -0
  230. data/ext/ruby-cbc/install/include/coin/OsiColCut.hpp +324 -0
  231. data/ext/ruby-cbc/install/include/coin/OsiCollections.hpp +35 -0
  232. data/ext/ruby-cbc/install/include/coin/OsiConfig.h +19 -0
  233. data/ext/ruby-cbc/install/include/coin/OsiCut.hpp +245 -0
  234. data/ext/ruby-cbc/install/include/coin/OsiCuts.hpp +474 -0
  235. data/ext/ruby-cbc/install/include/coin/OsiPresolve.hpp +252 -0
  236. data/ext/ruby-cbc/install/include/coin/OsiRowCut.hpp +331 -0
  237. data/ext/ruby-cbc/install/include/coin/OsiRowCutDebugger.hpp +187 -0
  238. data/ext/ruby-cbc/install/include/coin/OsiSolverBranch.hpp +152 -0
  239. data/ext/ruby-cbc/install/include/coin/OsiSolverInterface.hpp +2143 -0
  240. data/ext/ruby-cbc/install/include/coin/OsiSolverParameters.hpp +142 -0
  241. data/ext/ruby-cbc/install/include/coin/OsiUnitTests.hpp +374 -0
  242. data/ext/ruby-cbc/install/lib/libCbc.la +35 -0
  243. data/ext/ruby-cbc/install/lib/libCbc.so +0 -0
  244. data/ext/ruby-cbc/install/lib/libCbc.so.3 +0 -0
  245. data/ext/ruby-cbc/install/lib/libCbc.so.3.9.7 +0 -0
  246. data/ext/ruby-cbc/install/lib/libCbcSolver.la +35 -0
  247. data/ext/ruby-cbc/install/lib/libCbcSolver.so +0 -0
  248. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3 +0 -0
  249. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3.9.7 +0 -0
  250. data/ext/ruby-cbc/install/lib/libCgl.la +35 -0
  251. data/ext/ruby-cbc/install/lib/libCgl.so +0 -0
  252. data/ext/ruby-cbc/install/lib/libCgl.so.1 +0 -0
  253. data/ext/ruby-cbc/install/lib/libCgl.so.1.9.7 +0 -0
  254. data/ext/ruby-cbc/install/lib/libClp.la +35 -0
  255. data/ext/ruby-cbc/install/lib/libClp.so +0 -0
  256. data/ext/ruby-cbc/install/lib/libClp.so.1 +0 -0
  257. data/ext/ruby-cbc/install/lib/libClp.so.1.13.9 +0 -0
  258. data/ext/ruby-cbc/install/lib/libClpSolver.la +35 -0
  259. data/ext/ruby-cbc/install/lib/libClpSolver.so +0 -0
  260. data/ext/ruby-cbc/install/lib/libClpSolver.so.1 +0 -0
  261. data/ext/ruby-cbc/install/lib/libClpSolver.so.1.13.9 +0 -0
  262. data/ext/ruby-cbc/install/lib/libCoinUtils.la +35 -0
  263. data/ext/ruby-cbc/install/lib/libCoinUtils.so +0 -0
  264. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3 +0 -0
  265. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3.10.11 +0 -0
  266. data/ext/ruby-cbc/install/lib/libOsi.la +35 -0
  267. data/ext/ruby-cbc/install/lib/libOsi.so +0 -0
  268. data/ext/ruby-cbc/install/lib/libOsi.so.1 +0 -0
  269. data/ext/ruby-cbc/install/lib/libOsi.so.1.12.6 +0 -0
  270. data/ext/ruby-cbc/install/lib/libOsiCbc.la +35 -0
  271. data/ext/ruby-cbc/install/lib/libOsiCbc.so +0 -0
  272. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3 +0 -0
  273. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3.9.7 +0 -0
  274. data/ext/ruby-cbc/install/lib/libOsiClp.la +35 -0
  275. data/ext/ruby-cbc/install/lib/libOsiClp.so +0 -0
  276. data/ext/ruby-cbc/install/lib/libOsiClp.so.1 +0 -0
  277. data/ext/ruby-cbc/install/lib/libOsiClp.so.1.13.9 +0 -0
  278. data/ext/ruby-cbc/install/lib/libOsiCommonTests.la +35 -0
  279. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so +0 -0
  280. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1 +0 -0
  281. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1.12.6 +0 -0
  282. data/ext/ruby-cbc/install/lib/pkgconfig/cbc.pc +12 -0
  283. data/ext/ruby-cbc/install/lib/pkgconfig/cgl.pc +12 -0
  284. data/ext/ruby-cbc/install/lib/pkgconfig/clp.pc +12 -0
  285. data/ext/ruby-cbc/install/lib/pkgconfig/coindatamiplib3.pc +9 -0
  286. data/ext/ruby-cbc/install/lib/pkgconfig/coindatasample.pc +9 -0
  287. data/ext/ruby-cbc/install/lib/pkgconfig/coinutils.pc +12 -0
  288. data/ext/ruby-cbc/install/lib/pkgconfig/osi-cbc.pc +12 -0
  289. data/ext/ruby-cbc/install/lib/pkgconfig/osi-clp.pc +12 -0
  290. data/ext/ruby-cbc/install/lib/pkgconfig/osi-unittests.pc +12 -0
  291. data/ext/ruby-cbc/install/lib/pkgconfig/osi.pc +12 -0
  292. data/lib/ruby-cbc/ilp/constant.rb +44 -0
  293. data/lib/ruby-cbc/ilp/constraint.rb +32 -0
  294. data/lib/ruby-cbc/ilp/objective.rb +26 -0
  295. data/lib/ruby-cbc/ilp/term.rb +47 -0
  296. data/lib/ruby-cbc/ilp/term_array.rb +80 -0
  297. data/lib/ruby-cbc/ilp/var.rb +62 -0
  298. data/lib/ruby-cbc/model.rb +125 -0
  299. data/lib/ruby-cbc/problem.rb +170 -0
  300. data/lib/ruby-cbc/version.rb +3 -0
  301. data/lib/ruby-cbc.rb +21 -0
  302. data/ruby-cbc.gemspec +36 -0
  303. metadata +431 -0
@@ -0,0 +1,534 @@
1
+ // Copyright (C) 2006, International Business Machines
2
+ // Corporation and others. All Rights Reserved.
3
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
4
+
5
+ #ifndef OsiChooseVariable_H
6
+ #define OsiChooseVariable_H
7
+
8
+ #include <string>
9
+ #include <vector>
10
+
11
+ #include "CoinWarmStartBasis.hpp"
12
+ #include "OsiBranchingObject.hpp"
13
+
14
+ class OsiSolverInterface;
15
+ class OsiHotInfo;
16
+
17
+ /** This class chooses a variable to branch on
18
+
19
+ The base class just chooses the variable and direction without strong branching but it
20
+ has information which would normally be used by strong branching e.g. to re-enter
21
+ having fixed a variable but using same candidates for strong branching.
22
+
23
+ The flow is :
24
+ a) initialize the process. This decides on strong branching list
25
+ and stores indices of all infeasible objects
26
+ b) do strong branching on list. If list is empty then just
27
+ choose one candidate and return without strong branching. If not empty then
28
+ go through list and return best. However we may find that the node is infeasible
29
+ or that we can fix a variable. If so we return and it is up to user to call
30
+ again (after fixing a variable).
31
+ */
32
+
33
+ class OsiChooseVariable {
34
+
35
+ public:
36
+
37
+ /// Default Constructor
38
+ OsiChooseVariable ();
39
+
40
+ /// Constructor from solver (so we can set up arrays etc)
41
+ OsiChooseVariable (const OsiSolverInterface * solver);
42
+
43
+ /// Copy constructor
44
+ OsiChooseVariable (const OsiChooseVariable &);
45
+
46
+ /// Assignment operator
47
+ OsiChooseVariable & operator= (const OsiChooseVariable& rhs);
48
+
49
+ /// Clone
50
+ virtual OsiChooseVariable * clone() const;
51
+
52
+ /// Destructor
53
+ virtual ~OsiChooseVariable ();
54
+
55
+ /** Sets up strong list and clears all if initialize is true.
56
+ Returns number of infeasibilities.
57
+ If returns -1 then has worked out node is infeasible!
58
+ */
59
+ virtual int setupList ( OsiBranchingInformation *info, bool initialize);
60
+ /** Choose a variable
61
+ Returns -
62
+ -1 Node is infeasible
63
+ 0 Normal termination - we have a candidate
64
+ 1 All looks satisfied - no candidate
65
+ 2 We can change the bound on a variable - but we also have a strong branching candidate
66
+ 3 We can change the bound on a variable - but we have a non-strong branching candidate
67
+ 4 We can change the bound on a variable - no other candidates
68
+ We can pick up branch from bestObjectIndex() and bestWhichWay()
69
+ We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay()
70
+ If we have a solution then we can pick up from goodObjectiveValue() and goodSolution()
71
+ If fixVariables is true then 2,3,4 are all really same as problem changed
72
+ */
73
+ virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables);
74
+ /// Returns true if solution looks feasible against given objects
75
+ virtual bool feasibleSolution(const OsiBranchingInformation * info,
76
+ const double * solution,
77
+ int numberObjects,
78
+ const OsiObject ** objects);
79
+ /// Saves a good solution
80
+ void saveSolution(const OsiSolverInterface * solver);
81
+ /// Clears out good solution after use
82
+ void clearGoodSolution();
83
+ /// Given a candidate fill in useful information e.g. estimates
84
+ virtual void updateInformation( const OsiBranchingInformation *info,
85
+ int branch, OsiHotInfo * hotInfo);
86
+ #if 1
87
+ /// Given a branch fill in useful information e.g. estimates
88
+ virtual void updateInformation( int whichObject, int branch,
89
+ double changeInObjective, double changeInValue,
90
+ int status);
91
+ #endif
92
+ /// Objective value for feasible solution
93
+ inline double goodObjectiveValue() const
94
+ { return goodObjectiveValue_;}
95
+ /// Estimate of up change or change on chosen if n-way
96
+ inline double upChange() const
97
+ { return upChange_;}
98
+ /// Estimate of down change or max change on other possibilities if n-way
99
+ inline double downChange() const
100
+ { return downChange_;}
101
+ /// Good solution - deleted by finalize
102
+ inline const double * goodSolution() const
103
+ { return goodSolution_;}
104
+ /// Index of chosen object
105
+ inline int bestObjectIndex() const
106
+ { return bestObjectIndex_;}
107
+ /// Set index of chosen object
108
+ inline void setBestObjectIndex(int value)
109
+ { bestObjectIndex_ = value;}
110
+ /// Preferred way of chosen object
111
+ inline int bestWhichWay() const
112
+ { return bestWhichWay_;}
113
+ /// Set preferred way of chosen object
114
+ inline void setBestWhichWay(int value)
115
+ { bestWhichWay_ = value;}
116
+ /// Index of forced object
117
+ inline int firstForcedObjectIndex() const
118
+ { return firstForcedObjectIndex_;}
119
+ /// Set index of forced object
120
+ inline void setFirstForcedObjectIndex(int value)
121
+ { firstForcedObjectIndex_ = value;}
122
+ /// Preferred way of forced object
123
+ inline int firstForcedWhichWay() const
124
+ { return firstForcedWhichWay_;}
125
+ /// Set preferred way of forced object
126
+ inline void setFirstForcedWhichWay(int value)
127
+ { firstForcedWhichWay_ = value;}
128
+ /// Get the number of objects unsatisfied at this node - accurate on first pass
129
+ inline int numberUnsatisfied() const
130
+ {return numberUnsatisfied_;}
131
+ /// Number of objects to choose for strong branching
132
+ inline int numberStrong() const
133
+ { return numberStrong_;}
134
+ /// Set number of objects to choose for strong branching
135
+ inline void setNumberStrong(int value)
136
+ { numberStrong_ = value;}
137
+ /// Number left on strong list
138
+ inline int numberOnList() const
139
+ { return numberOnList_;}
140
+ /// Number of strong branches actually done
141
+ inline int numberStrongDone() const
142
+ { return numberStrongDone_;}
143
+ /// Number of strong iterations actually done
144
+ inline int numberStrongIterations() const
145
+ { return numberStrongIterations_;}
146
+ /// Number of strong branches which changed bounds
147
+ inline int numberStrongFixed() const
148
+ { return numberStrongFixed_;}
149
+ /// List of candidates
150
+ inline const int * candidates() const
151
+ { return list_;}
152
+ /// Trust results from strong branching for changing bounds
153
+ inline bool trustStrongForBound() const
154
+ { return trustStrongForBound_;}
155
+ /// Set trust results from strong branching for changing bounds
156
+ inline void setTrustStrongForBound(bool yesNo)
157
+ { trustStrongForBound_ = yesNo;}
158
+ /// Trust results from strong branching for valid solution
159
+ inline bool trustStrongForSolution() const
160
+ { return trustStrongForSolution_;}
161
+ /// Set trust results from strong branching for valid solution
162
+ inline void setTrustStrongForSolution(bool yesNo)
163
+ { trustStrongForSolution_ = yesNo;}
164
+ /// Set solver and redo arrays
165
+ void setSolver (const OsiSolverInterface * solver);
166
+ /** Return status -
167
+ -1 Node is infeasible
168
+ 0 Normal termination - we have a candidate
169
+ 1 All looks satisfied - no candidate
170
+ 2 We can change the bound on a variable - but we also have a strong branching candidate
171
+ 3 We can change the bound on a variable - but we have a non-strong branching candidate
172
+ 4 We can change the bound on a variable - no other candidates
173
+ We can pick up branch from bestObjectIndex() and bestWhichWay()
174
+ We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay()
175
+ If we have a solution then we can pick up from goodObjectiveValue() and goodSolution()
176
+ */
177
+ inline int status() const
178
+ { return status_;}
179
+ inline void setStatus(int value)
180
+ { status_ = value;}
181
+
182
+
183
+ protected:
184
+ // Data
185
+ /// Objective value for feasible solution
186
+ double goodObjectiveValue_;
187
+ /// Estimate of up change or change on chosen if n-way
188
+ double upChange_;
189
+ /// Estimate of down change or max change on other possibilities if n-way
190
+ double downChange_;
191
+ /// Good solution - deleted by finalize
192
+ double * goodSolution_;
193
+ /// List of candidates
194
+ int * list_;
195
+ /// Useful array (for sorting etc)
196
+ double * useful_;
197
+ /// Pointer to solver
198
+ const OsiSolverInterface * solver_;
199
+ /* Status -
200
+ -1 Node is infeasible
201
+ 0 Normal termination - we have a candidate
202
+ 1 All looks satisfied - no candidate
203
+ 2 We can change the bound on a variable - but we also have a strong branching candidate
204
+ 3 We can change the bound on a variable - but we have a non-strong branching candidate
205
+ 4 We can change the bound on a variable - no other candidates
206
+ */
207
+ int status_;
208
+ /// Index of chosen object
209
+ int bestObjectIndex_;
210
+ /// Preferred way of chosen object
211
+ int bestWhichWay_;
212
+ /// Index of forced object
213
+ int firstForcedObjectIndex_;
214
+ /// Preferred way of forced object
215
+ int firstForcedWhichWay_;
216
+ /// The number of objects unsatisfied at this node.
217
+ int numberUnsatisfied_;
218
+ /// Number of objects to choose for strong branching
219
+ int numberStrong_;
220
+ /// Number left on strong list
221
+ int numberOnList_;
222
+ /// Number of strong branches actually done
223
+ int numberStrongDone_;
224
+ /// Number of strong iterations actually done
225
+ int numberStrongIterations_;
226
+ /// Number of bound changes due to strong branching
227
+ int numberStrongFixed_;
228
+ /// List of unsatisfied objects - first numberOnList_ for strong branching
229
+ /// Trust results from strong branching for changing bounds
230
+ bool trustStrongForBound_;
231
+ /// Trust results from strong branching for valid solution
232
+ bool trustStrongForSolution_;
233
+ };
234
+
235
+ /** This class is the placeholder for the pseudocosts used by OsiChooseStrong.
236
+ It can also be used by any other pseudocost based strong branching
237
+ algorithm.
238
+ */
239
+
240
+ class OsiPseudoCosts {
241
+ protected:
242
+ // Data
243
+ /// Total of all changes up
244
+ double * upTotalChange_;
245
+ /// Total of all changes down
246
+ double * downTotalChange_;
247
+ /// Number of times up
248
+ int * upNumber_;
249
+ /// Number of times down
250
+ int * downNumber_;
251
+ /// Number of objects (could be found from solver)
252
+ int numberObjects_;
253
+ /// Number before we trust
254
+ int numberBeforeTrusted_;
255
+
256
+ private:
257
+ void gutsOfDelete();
258
+ void gutsOfCopy(const OsiPseudoCosts& rhs);
259
+
260
+ public:
261
+ OsiPseudoCosts();
262
+ virtual ~OsiPseudoCosts();
263
+ OsiPseudoCosts(const OsiPseudoCosts& rhs);
264
+ OsiPseudoCosts& operator=(const OsiPseudoCosts& rhs);
265
+
266
+ /// Number of times before trusted
267
+ inline int numberBeforeTrusted() const
268
+ { return numberBeforeTrusted_; }
269
+ /// Set number of times before trusted
270
+ inline void setNumberBeforeTrusted(int value)
271
+ { numberBeforeTrusted_ = value; }
272
+ /// Initialize the pseudocosts with n entries
273
+ void initialize(int n);
274
+ /// Give the number of objects for which pseudo costs are stored
275
+ inline int numberObjects() const
276
+ { return numberObjects_; }
277
+
278
+ /** @name Accessor methods to pseudo costs data */
279
+ //@{
280
+ inline double* upTotalChange() { return upTotalChange_; }
281
+ inline const double* upTotalChange() const { return upTotalChange_; }
282
+
283
+ inline double* downTotalChange() { return downTotalChange_; }
284
+ inline const double* downTotalChange() const { return downTotalChange_; }
285
+
286
+ inline int* upNumber() { return upNumber_; }
287
+ inline const int* upNumber() const { return upNumber_; }
288
+
289
+ inline int* downNumber() { return downNumber_; }
290
+ inline const int* downNumber() const { return downNumber_; }
291
+ //@}
292
+
293
+ /// Given a candidate fill in useful information e.g. estimates
294
+ virtual void updateInformation(const OsiBranchingInformation *info,
295
+ int branch, OsiHotInfo * hotInfo);
296
+ #if 1
297
+ /// Given a branch fill in useful information e.g. estimates
298
+ virtual void updateInformation( int whichObject, int branch,
299
+ double changeInObjective, double changeInValue,
300
+ int status);
301
+ #endif
302
+ };
303
+
304
+ /** This class chooses a variable to branch on
305
+
306
+ This chooses the variable and direction with reliability strong branching.
307
+
308
+ The flow is :
309
+ a) initialize the process. This decides on strong branching list
310
+ and stores indices of all infeasible objects
311
+ b) do strong branching on list. If list is empty then just
312
+ choose one candidate and return without strong branching. If not empty then
313
+ go through list and return best. However we may find that the node is infeasible
314
+ or that we can fix a variable. If so we return and it is up to user to call
315
+ again (after fixing a variable).
316
+ */
317
+
318
+ class OsiChooseStrong : public OsiChooseVariable {
319
+
320
+ public:
321
+
322
+ /// Default Constructor
323
+ OsiChooseStrong ();
324
+
325
+ /// Constructor from solver (so we can set up arrays etc)
326
+ OsiChooseStrong (const OsiSolverInterface * solver);
327
+
328
+ /// Copy constructor
329
+ OsiChooseStrong (const OsiChooseStrong &);
330
+
331
+ /// Assignment operator
332
+ OsiChooseStrong & operator= (const OsiChooseStrong& rhs);
333
+
334
+ /// Clone
335
+ virtual OsiChooseVariable * clone() const;
336
+
337
+ /// Destructor
338
+ virtual ~OsiChooseStrong ();
339
+
340
+ /** Sets up strong list and clears all if initialize is true.
341
+ Returns number of infeasibilities.
342
+ If returns -1 then has worked out node is infeasible!
343
+ */
344
+ virtual int setupList ( OsiBranchingInformation *info, bool initialize);
345
+ /** Choose a variable
346
+ Returns -
347
+ -1 Node is infeasible
348
+ 0 Normal termination - we have a candidate
349
+ 1 All looks satisfied - no candidate
350
+ 2 We can change the bound on a variable - but we also have a strong branching candidate
351
+ 3 We can change the bound on a variable - but we have a non-strong branching candidate
352
+ 4 We can change the bound on a variable - no other candidates
353
+ We can pick up branch from bestObjectIndex() and bestWhichWay()
354
+ We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay()
355
+ If we have a solution then we can pick up from goodObjectiveValue() and goodSolution()
356
+ If fixVariables is true then 2,3,4 are all really same as problem changed
357
+ */
358
+ virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables);
359
+
360
+ /** Pseudo Shadow Price mode
361
+ 0 - off
362
+ 1 - use if no strong info
363
+ 2 - use if strong not trusted
364
+ 3 - use even if trusted
365
+ */
366
+ inline int shadowPriceMode() const
367
+ { return shadowPriceMode_;}
368
+ /// Set Shadow price mode
369
+ inline void setShadowPriceMode(int value)
370
+ { shadowPriceMode_ = value;}
371
+
372
+ /** Accessor method to pseudo cost object*/
373
+ const OsiPseudoCosts& pseudoCosts() const
374
+ { return pseudoCosts_; }
375
+
376
+ /** Accessor method to pseudo cost object*/
377
+ OsiPseudoCosts& pseudoCosts()
378
+ { return pseudoCosts_; }
379
+
380
+ /** A feww pass-through methods to access members of pseudoCosts_ as if they
381
+ were members of OsiChooseStrong object */
382
+ inline int numberBeforeTrusted() const {
383
+ return pseudoCosts_.numberBeforeTrusted(); }
384
+ inline void setNumberBeforeTrusted(int value) {
385
+ pseudoCosts_.setNumberBeforeTrusted(value); }
386
+ inline int numberObjects() const {
387
+ return pseudoCosts_.numberObjects(); }
388
+
389
+ protected:
390
+
391
+ /** This is a utility function which does strong branching on
392
+ a list of objects and stores the results in OsiHotInfo.objects.
393
+ On entry the object sequence is stored in the OsiHotInfo object
394
+ and maybe more.
395
+ It returns -
396
+ -1 - one branch was infeasible both ways
397
+ 0 - all inspected - nothing can be fixed
398
+ 1 - all inspected - some can be fixed (returnCriterion==0)
399
+ 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1)
400
+ 3 - returning because max time
401
+
402
+ */
403
+ int doStrongBranching( OsiSolverInterface * solver,
404
+ OsiBranchingInformation *info,
405
+ int numberToDo, int returnCriterion);
406
+
407
+ /** Clear out the results array */
408
+ void resetResults(int num);
409
+
410
+ protected:
411
+ /** Pseudo Shadow Price mode
412
+ 0 - off
413
+ 1 - use and multiply by strong info
414
+ 2 - use
415
+ */
416
+ int shadowPriceMode_;
417
+
418
+ /** The pseudo costs for the chooser */
419
+ OsiPseudoCosts pseudoCosts_;
420
+
421
+ /** The results of the strong branching done on the candidates where the
422
+ pseudocosts were not sufficient */
423
+ OsiHotInfo* results_;
424
+ /** The number of OsiHotInfo objetcs that contain information */
425
+ int numResults_;
426
+ };
427
+
428
+ /** This class contains the result of strong branching on a variable
429
+ When created it stores enough information for strong branching
430
+ */
431
+
432
+ class OsiHotInfo {
433
+
434
+ public:
435
+
436
+ /// Default Constructor
437
+ OsiHotInfo ();
438
+
439
+ /// Constructor from useful information
440
+ OsiHotInfo ( OsiSolverInterface * solver,
441
+ const OsiBranchingInformation *info,
442
+ const OsiObject * const * objects,
443
+ int whichObject);
444
+
445
+ /// Copy constructor
446
+ OsiHotInfo (const OsiHotInfo &);
447
+
448
+ /// Assignment operator
449
+ OsiHotInfo & operator= (const OsiHotInfo& rhs);
450
+
451
+ /// Clone
452
+ virtual OsiHotInfo * clone() const;
453
+
454
+ /// Destructor
455
+ virtual ~OsiHotInfo ();
456
+
457
+ /** Fill in useful information after strong branch.
458
+ Return status
459
+ */
460
+ int updateInformation( const OsiSolverInterface * solver, const OsiBranchingInformation * info,
461
+ OsiChooseVariable * choose);
462
+ /// Original objective value
463
+ inline double originalObjectiveValue() const
464
+ { return originalObjectiveValue_;}
465
+ /// Up change - invalid if n-way
466
+ inline double upChange() const
467
+ { assert (branchingObject_->numberBranches()==2); return changes_[1];}
468
+ /// Down change - invalid if n-way
469
+ inline double downChange() const
470
+ { assert (branchingObject_->numberBranches()==2); return changes_[0];}
471
+ /// Set up change - invalid if n-way
472
+ inline void setUpChange(double value)
473
+ { assert (branchingObject_->numberBranches()==2); changes_[1] = value;}
474
+ /// Set down change - invalid if n-way
475
+ inline void setDownChange(double value)
476
+ { assert (branchingObject_->numberBranches()==2); changes_[0] = value;}
477
+ /// Change on way k
478
+ inline double change(int k) const
479
+ { return changes_[k];}
480
+
481
+ /// Up iteration count - invalid if n-way
482
+ inline int upIterationCount() const
483
+ { assert (branchingObject_->numberBranches()==2); return iterationCounts_[1];}
484
+ /// Down iteration count - invalid if n-way
485
+ inline int downIterationCount() const
486
+ { assert (branchingObject_->numberBranches()==2); return iterationCounts_[0];}
487
+ /// Iteration count on way k
488
+ inline int iterationCount(int k) const
489
+ { return iterationCounts_[k];}
490
+
491
+ /// Up status - invalid if n-way
492
+ inline int upStatus() const
493
+ { assert (branchingObject_->numberBranches()==2); return statuses_[1];}
494
+ /// Down status - invalid if n-way
495
+ inline int downStatus() const
496
+ { assert (branchingObject_->numberBranches()==2); return statuses_[0];}
497
+ /// Set up status - invalid if n-way
498
+ inline void setUpStatus(int value)
499
+ { assert (branchingObject_->numberBranches()==2); statuses_[1] = value;}
500
+ /// Set down status - invalid if n-way
501
+ inline void setDownStatus(int value)
502
+ { assert (branchingObject_->numberBranches()==2); statuses_[0] = value;}
503
+ /// Status on way k
504
+ inline int status(int k) const
505
+ { return statuses_[k];}
506
+ /// Branching object
507
+ inline OsiBranchingObject * branchingObject() const
508
+ { return branchingObject_;}
509
+ inline int whichObject() const
510
+ { return whichObject_;}
511
+
512
+ protected:
513
+ // Data
514
+ /// Original objective value
515
+ double originalObjectiveValue_;
516
+ /// Objective changes
517
+ double * changes_;
518
+ /// Iteration counts
519
+ int * iterationCounts_;
520
+ /** Status
521
+ -1 - not done
522
+ 0 - feasible and finished
523
+ 1 - infeasible
524
+ 2 - not finished
525
+ */
526
+ int * statuses_;
527
+ /// Branching object
528
+ OsiBranchingObject * branchingObject_;
529
+ /// Which object on list
530
+ int whichObject_;
531
+ };
532
+
533
+
534
+ #endif