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,60 @@
1
+ require 'mkmf'
2
+ ROOT_DIR = File.dirname(File.absolute_path(__FILE__))
3
+
4
+ TARBALL_PATH = "/tmp/Cbc.tgz"
5
+ CBC_SRC_DIR = "/tmp/Cbc-2.9.7"
6
+ CBC_INSTALL = "#{ROOT_DIR}/install"
7
+ def install_cbc
8
+ system "curl -o #{TARBALL_PATH} http://www.coin-or.org/download/source/Cbc/Cbc-2.9.7.tgz"
9
+ Dir.chdir "/tmp"
10
+ system "tar -xzf #{TARBALL_PATH}"
11
+ res = system "cd #{CBC_SRC_DIR} && ./configure --prefix=#{CBC_INSTALL} -C --with-pic --without-static && make -j4 && make install"
12
+ if not res
13
+ puts "Failed to build CBC, aborting"
14
+ exit 1
15
+ end
16
+ end
17
+
18
+ unless RUBY_PLATFORM =~ /x86_64-linux/
19
+ if not have_library("Cbc")
20
+ install_cbc
21
+ end
22
+ end
23
+
24
+ ## Rerun this if updated cbc version
25
+ # swig_cmd = find_executable "swig"
26
+ # current_path = File.expand_path('../', __FILE__)
27
+ # %x{#{swig_cmd} -ruby -I#{current_path}/install/include/coin #{current_path}/cbc.i }
28
+
29
+ libs = %w(
30
+ Cbc
31
+ CbcSolver
32
+ Cgl
33
+ Clp
34
+ ClpSolver
35
+ CoinUtils
36
+ Osi
37
+ OsiCbc
38
+ OsiClp
39
+ OsiCommonTests
40
+ )
41
+
42
+ # $CFLAGS << " -Linstall/lib -Iinstall/include/coin/ "
43
+ # $LIBPATH << "install/lib"
44
+ # $INCFLAGS << " -Iinstall/include/coin/ "
45
+
46
+ libs.each do |lib|
47
+ find_library(lib,nil, "#{CBC_INSTALL}/lib")
48
+ end
49
+
50
+ headers = Dir["#{CBC_INSTALL}/include/coin/*.h"].map{ |h| h.split('/').last }
51
+ # headers = Dir["#{CBC_INSTALL}/include/coin/*.hpp"].map{ |h| h.split('/').last }
52
+ # with_cflags("-x c++") do
53
+ headers.each do |header|
54
+ find_header(header, "#{CBC_INSTALL}/include/coin")
55
+ end
56
+ # end
57
+
58
+ dir_config("ruby-cbc")
59
+ RPATHFLAG << " -Wl,-rpath='$$ORIGIN/install/lib'"
60
+ create_makefile('cbc_wrapper')
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ /* $Id: CbcBranchActual.hpp 1573 2011-01-05 01:12:36Z lou $ */
2
+ // Copyright (C) 2002, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ #ifndef CbcBranchActual_H
7
+ #define CbcBranchActual_H
8
+
9
+ #include "CbcBranchBase.hpp"
10
+ #include "CoinPackedMatrix.hpp"
11
+ #include "CbcClique.hpp"
12
+ #include "CbcSOS.hpp"
13
+ #include "CbcSimpleInteger.hpp"
14
+ #include "CbcNWay.hpp"
15
+ #include "CbcSimpleIntegerPseudoCost.hpp"
16
+ #include "CbcBranchDefaultDecision.hpp"
17
+ #include "CbcFollowOn.hpp"
18
+ #include "CbcFixVariable.hpp"
19
+ #include "CbcDummyBranchingObject.hpp"
20
+ #include "CbcGeneral.hpp"
21
+ #include "CbcGeneralDepth.hpp"
22
+ #include "CbcSubProblem.hpp"
23
+ #endif
24
+
@@ -0,0 +1,62 @@
1
+ // $Id: CbcBranchAllDifferent.hpp 1899 2013-04-09 18:12:08Z stefan $
2
+ // Copyright (C) 2004, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ // Edwin 11/13/2009-- carved out of CbcBranchCut
7
+
8
+ #ifndef CbcBranchAllDifferent_H
9
+ #define CbcBranchAllDifferent_H
10
+
11
+ #include "CbcBranchBase.hpp"
12
+ #include "OsiRowCut.hpp"
13
+ #include "CoinPackedMatrix.hpp"
14
+ #include "CbcBranchCut.hpp"
15
+
16
+ /** Define a branch class that branches so that it is only satsified if all
17
+ members have different values
18
+ So cut is x <= y-1 or x >= y+1
19
+ */
20
+
21
+
22
+ class CbcBranchAllDifferent : public CbcBranchCut {
23
+
24
+ public:
25
+
26
+ // Default Constructor
27
+ CbcBranchAllDifferent ();
28
+
29
+ /** Useful constructor - passed set of integer variables which must all be different
30
+ */
31
+ CbcBranchAllDifferent (CbcModel * model, int number, const int * which);
32
+
33
+ // Copy constructor
34
+ CbcBranchAllDifferent ( const CbcBranchAllDifferent &);
35
+
36
+ /// Clone
37
+ virtual CbcObject * clone() const;
38
+
39
+ // Assignment operator
40
+ CbcBranchAllDifferent & operator=( const CbcBranchAllDifferent& rhs);
41
+
42
+ // Destructor
43
+ ~CbcBranchAllDifferent ();
44
+
45
+ /// Infeasibility - large is 0.5
46
+ virtual double infeasibility(const OsiBranchingInformation * info,
47
+ int &preferredWay) const;
48
+
49
+ /// Creates a branching object
50
+ virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
51
+
52
+
53
+ protected:
54
+ /// data
55
+
56
+ /// Number of entries
57
+ int numberInSet_;
58
+ /// Which variables
59
+ int * which_;
60
+ };
61
+ #endif
62
+
@@ -0,0 +1,78 @@
1
+ /* $Id: CbcBranchBase.hpp 1573 2011-01-05 01:12:36Z lou $ */
2
+ // Copyright (C) 2002, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ #ifndef CbcBranchBase_H
7
+ #define CbcBranchBase_H
8
+
9
+ #include <string>
10
+ #include <vector>
11
+ #include "OsiBranchingObject.hpp"
12
+
13
+ enum CbcRangeCompare {
14
+ CbcRangeSame,
15
+ CbcRangeDisjoint,
16
+ CbcRangeSubset,
17
+ CbcRangeSuperset,
18
+ CbcRangeOverlap
19
+ };
20
+
21
+ #include "CbcObject.hpp"
22
+ #include "CbcBranchingObject.hpp"
23
+ #include "CbcBranchDecision.hpp"
24
+ #include "CbcConsequence.hpp"
25
+ #include "CbcObjectUpdateData.hpp"
26
+
27
+ //##############################################################################
28
+
29
+ /** Compare two ranges. The two bounds arrays are both of size two and
30
+ describe closed intervals. Return the appropriate CbcRangeCompare value
31
+ (first argument being the sub/superset if that's the case). In case of
32
+ overlap (and if \c replaceIfOverlap is true) replace the content of thisBd
33
+ with the intersection of the ranges.
34
+ */
35
+ static inline CbcRangeCompare
36
+ CbcCompareRanges(double* thisBd, const double* otherBd,
37
+ const bool replaceIfOverlap)
38
+ {
39
+ const double lbDiff = thisBd[0] - otherBd[0];
40
+ if (lbDiff < 0) { // lb of this < lb of other
41
+ if (thisBd[1] >= otherBd[1]) { // ub of this >= ub of other
42
+ return CbcRangeSuperset;
43
+ } else if (thisBd[1] < otherBd[0]) {
44
+ return CbcRangeDisjoint;
45
+ } else {
46
+ // overlap
47
+ if (replaceIfOverlap) {
48
+ thisBd[0] = otherBd[0];
49
+ }
50
+ return CbcRangeOverlap;
51
+ }
52
+ } else if (lbDiff > 0) { // lb of this > lb of other
53
+ if (thisBd[1] <= otherBd[1]) { // ub of this <= ub of other
54
+ return CbcRangeSubset;
55
+ } else if (thisBd[0] > otherBd[1]) {
56
+ return CbcRangeDisjoint;
57
+ } else {
58
+ // overlap
59
+ if (replaceIfOverlap) {
60
+ thisBd[1] = otherBd[1];
61
+ }
62
+ return CbcRangeOverlap;
63
+ }
64
+ } else { // lb of this == lb of other
65
+ if (thisBd[1] == otherBd[1]) {
66
+ return CbcRangeSame;
67
+ }
68
+ return thisBd[1] < otherBd[1] ? CbcRangeSubset : CbcRangeSuperset;
69
+ }
70
+
71
+ return CbcRangeSame; // fake return
72
+
73
+ }
74
+
75
+ //#############################################################################
76
+
77
+ #endif
78
+
@@ -0,0 +1,183 @@
1
+ /* $Id: CbcBranchCut.hpp 1573 2011-01-05 01:12:36Z lou $ */
2
+ // Copyright (C) 2004, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ #ifndef CbcBranchCut_H
7
+ #define CbcBranchCut_H
8
+
9
+ #include "CbcBranchBase.hpp"
10
+ #include "OsiRowCut.hpp"
11
+ #include "CoinPackedMatrix.hpp"
12
+
13
+ /** Define a cut branching class.
14
+ At present empty - all stuff in descendants
15
+ */
16
+
17
+ class CbcBranchCut : public CbcObject {
18
+
19
+ public:
20
+
21
+ // Default Constructor
22
+ CbcBranchCut ();
23
+
24
+ /** In to maintain normal methods
25
+ */
26
+ CbcBranchCut (CbcModel * model);
27
+ // Copy constructor
28
+ CbcBranchCut ( const CbcBranchCut &);
29
+
30
+ /// Clone
31
+ virtual CbcObject * clone() const;
32
+
33
+ // Assignment operator
34
+ CbcBranchCut & operator=( const CbcBranchCut& rhs);
35
+
36
+ // Destructor
37
+ ~CbcBranchCut ();
38
+
39
+ /// Infeasibility
40
+ virtual double infeasibility(const OsiBranchingInformation * info,
41
+ int &preferredWay) const;
42
+
43
+ using CbcObject::feasibleRegion ;
44
+ /** Set bounds to contain the current solution.
45
+
46
+ More precisely, for the variable associated with this object, take the
47
+ value given in the current solution, force it within the current bounds
48
+ if required, then set the bounds to fix the variable at the integer
49
+ nearest the solution value.
50
+
51
+ At present this will do nothing
52
+ */
53
+ virtual void feasibleRegion();
54
+
55
+ /** \brief Return true if branch created by object should fix variables
56
+ */
57
+ virtual bool boundBranch() const ;
58
+
59
+ /// Creates a branching object
60
+ virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
61
+
62
+ /** \brief Given a valid solution (with reduced costs, etc.),
63
+ return a branching object which would give a new feasible
64
+ point in the good direction.
65
+
66
+ The preferred branching object will force the variable to be +/-1 from
67
+ its current value, depending on the reduced cost and objective sense. If
68
+ movement in the direction which improves the objective is impossible due
69
+ to bounds on the variable, the branching object will move in the other
70
+ direction. If no movement is possible, the method returns NULL.
71
+
72
+ Only the bounds on this variable are considered when determining if the new
73
+ point is feasible.
74
+
75
+ At present this does nothing
76
+ */
77
+ virtual CbcBranchingObject * preferredNewFeasible() const;
78
+
79
+ /** \brief Given a valid solution (with reduced costs, etc.),
80
+ return a branching object which would give a new feasible
81
+ point in a bad direction.
82
+
83
+ As for preferredNewFeasible(), but the preferred branching object will
84
+ force movement in a direction that degrades the objective.
85
+
86
+ At present this does nothing
87
+ */
88
+ virtual CbcBranchingObject * notPreferredNewFeasible() const ;
89
+
90
+ using CbcObject::resetBounds ;
91
+ /** Reset original upper and lower bound values from the solver.
92
+
93
+ Handy for updating bounds held in this object after bounds held in the
94
+ solver have been tightened.
95
+ */
96
+ virtual void resetBounds();
97
+
98
+
99
+ protected:
100
+ /// data
101
+
102
+ };
103
+ /** Cut branching object
104
+
105
+ This object can specify a two-way branch in terms of two cuts
106
+ */
107
+
108
+ class CbcCutBranchingObject : public CbcBranchingObject {
109
+
110
+ public:
111
+
112
+ /// Default constructor
113
+ CbcCutBranchingObject ();
114
+
115
+ /** Create a cut branching object
116
+
117
+ Cut down will applied on way=-1, up on way==1
118
+ Assumed down will be first so way_ set to -1
119
+ */
120
+ CbcCutBranchingObject (CbcModel * model, OsiRowCut & down, OsiRowCut &up, bool canFix);
121
+
122
+ /// Copy constructor
123
+ CbcCutBranchingObject ( const CbcCutBranchingObject &);
124
+
125
+ /// Assignment operator
126
+ CbcCutBranchingObject & operator= (const CbcCutBranchingObject& rhs);
127
+
128
+ /// Clone
129
+ virtual CbcBranchingObject * clone() const;
130
+
131
+ /// Destructor
132
+ virtual ~CbcCutBranchingObject ();
133
+
134
+ using CbcBranchingObject::branch ;
135
+ /** \brief Sets the bounds for variables or adds a cut depending on the
136
+ current arm of the branch and advances the object state to the next arm.
137
+ Returns change in guessed objective on next branch
138
+ */
139
+ virtual double branch();
140
+
141
+ using CbcBranchingObject::print ;
142
+ /** \brief Print something about branch - only if log level high
143
+ */
144
+ virtual void print();
145
+
146
+ /** \brief Return true if branch should fix variables
147
+ */
148
+ virtual bool boundBranch() const;
149
+
150
+ /** Return the type (an integer identifier) of \c this */
151
+ virtual CbcBranchObjType type() const {
152
+ return CutBranchingObj;
153
+ }
154
+
155
+ /** Compare the original object of \c this with the original object of \c
156
+ brObj. Assumes that there is an ordering of the original objects.
157
+ This method should be invoked only if \c this and brObj are of the same
158
+ type.
159
+ Return negative/0/positive depending on whether \c this is
160
+ smaller/same/larger than the argument.
161
+ */
162
+ virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
163
+
164
+ /** Compare the \c this with \c brObj. \c this and \c brObj must be os the
165
+ same type and must have the same original object, but they may have
166
+ different feasible regions.
167
+ Return the appropriate CbcRangeCompare value (first argument being the
168
+ sub/superset if that's the case). In case of overlap (and if \c
169
+ replaceIfOverlap is true) replace the current branching object with one
170
+ whose feasible region is the overlap.
171
+ */
172
+ virtual CbcRangeCompare compareBranchingObject
173
+ (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
174
+
175
+ protected:
176
+ /// Cut for the down arm (way_ = -1)
177
+ OsiRowCut down_;
178
+ /// Cut for the up arm (way_ = 1)
179
+ OsiRowCut up_;
180
+ /// True if one way can fix variables
181
+ bool canFix_;
182
+ };
183
+ #endif
@@ -0,0 +1,129 @@
1
+ // $Id: CbcBranchDecision.hpp 1899 2013-04-09 18:12:08Z stefan $
2
+ // Copyright (C) 2002, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ // Edwin 11/12/2009 carved from CbcBranchBase
7
+
8
+ #ifndef CbcBranchDecision_H
9
+ #define CbcBranchDecision_H
10
+
11
+ #include "CbcBranchBase.hpp"
12
+
13
+ /** Abstract branching decision base class
14
+
15
+ In the abstract, an CbcBranchDecision object is expected to be able to
16
+ compare two possible branching choices.
17
+
18
+ The #betterBranch() method is the crucial routine. It is expected to be able
19
+ to compare two \link CbcBranchingObject CbcBranchingObjects \endlink.
20
+
21
+ See CbcObject for an overview of the three classes (CbcObject,
22
+ CbcBranchingObject, and CbcBranchDecision) which make up cbc's branching
23
+ model.
24
+ */
25
+ class CbcModel;
26
+ class OsiChooseVariable;
27
+
28
+ class CbcBranchDecision {
29
+ public:
30
+ /// Default Constructor
31
+ CbcBranchDecision ();
32
+
33
+ // Copy constructor
34
+ CbcBranchDecision ( const CbcBranchDecision &);
35
+
36
+ /// Destructor
37
+ virtual ~CbcBranchDecision();
38
+
39
+ /// Clone
40
+ virtual CbcBranchDecision * clone() const = 0;
41
+
42
+ /// Initialize <i>e.g.</i> before starting to choose a branch at a node
43
+ virtual void initialize(CbcModel * model) = 0;
44
+
45
+ /** \brief Compare two branching objects. Return nonzero if branching
46
+ using \p thisOne is better than branching using \p bestSoFar.
47
+
48
+ If \p bestSoFar is NULL, the routine should return a nonzero value.
49
+ This routine is used only after strong branching.
50
+ Either this or bestBranch is used depending which user wants.
51
+
52
+ */
53
+
54
+ virtual int
55
+ betterBranch (CbcBranchingObject * thisOne,
56
+ CbcBranchingObject * bestSoFar,
57
+ double changeUp, int numberInfeasibilitiesUp,
58
+ double changeDown, int numberInfeasibilitiesDown) = 0 ;
59
+
60
+ /** \brief Compare N branching objects. Return index of best
61
+ and sets way of branching in chosen object.
62
+
63
+ Either this or betterBranch is used depending which user wants.
64
+ */
65
+
66
+ virtual int
67
+ bestBranch (CbcBranchingObject ** objects, int numberObjects, int numberUnsatisfied,
68
+ double * changeUp, int * numberInfeasibilitiesUp,
69
+ double * changeDown, int * numberInfeasibilitiesDown,
70
+ double objectiveValue) ;
71
+
72
+ /** Says whether this method can handle both methods -
73
+ 1 better, 2 best, 3 both */
74
+ virtual int whichMethod() {
75
+ return 2;
76
+ }
77
+
78
+ /** Saves a clone of current branching object. Can be used to update
79
+ information on object causing branch - after branch */
80
+ virtual void saveBranchingObject(OsiBranchingObject * ) {}
81
+ /** Pass in information on branch just done.
82
+ assumes object can get information from solver */
83
+ virtual void updateInformation(OsiSolverInterface * ,
84
+ const CbcNode * ) {}
85
+ /** Sets or gets best criterion so far */
86
+ virtual void setBestCriterion(double ) {}
87
+ virtual double getBestCriterion() const {
88
+ return 0.0;
89
+ }
90
+ /// Create C++ lines to get to current state
91
+ virtual void generateCpp( FILE * ) {}
92
+ /// Model
93
+ inline CbcModel * cbcModel() const {
94
+ return model_;
95
+ }
96
+ /* If chooseMethod_ id non-null then the rest is fairly pointless
97
+ as choosemethod_ will be doing all work
98
+ This comment makes more sense if you realise that there's a conversion in
99
+ process from the Cbc branching classes to Osi branching classes. The test
100
+ for use of the Osi branching classes is CbcModel::branchingMethod_
101
+ non-null (i.e., it points to one of these CbcBranchDecision objects) and
102
+ that branch decision object has an OsiChooseVariable method set. In which
103
+ case, we'll use it, rather than the choose[*]Variable methods defined in
104
+ CbcNode.
105
+ */
106
+
107
+ OsiChooseVariable * chooseMethod() const {
108
+ return chooseMethod_;
109
+ }
110
+ /// Set (clone) chooseMethod
111
+ void setChooseMethod(const OsiChooseVariable & method);
112
+
113
+ protected:
114
+
115
+ // Clone of branching object
116
+ CbcBranchingObject * object_;
117
+ /// Pointer to model
118
+ CbcModel * model_;
119
+ /* If chooseMethod_ id non-null then the rest is fairly pointless
120
+ as choosemethod_ will be doing all work
121
+ */
122
+ OsiChooseVariable * chooseMethod_;
123
+ private:
124
+ /// Assignment is illegal
125
+ CbcBranchDecision & operator=(const CbcBranchDecision& rhs);
126
+
127
+ };
128
+ #endif
129
+
@@ -0,0 +1,100 @@
1
+ // $Id: CbcBranchDefaultDecision.hpp 1899 2013-04-09 18:12:08Z stefan $
2
+ // Copyright (C) 2002, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ // Edwin 11/10/2009-- carved out of CbcBranchActual
7
+
8
+ #ifndef CbcBranchDefaultDecision_H
9
+ #define CbcBranchDefaultDecision_H
10
+
11
+ #include "CbcBranchBase.hpp"
12
+ /** Branching decision default class
13
+
14
+ This class implements a simple default algorithm
15
+ (betterBranch()) for choosing a branching variable.
16
+ */
17
+
18
+ class CbcBranchDefaultDecision : public CbcBranchDecision {
19
+ public:
20
+ // Default Constructor
21
+ CbcBranchDefaultDecision ();
22
+
23
+ // Copy constructor
24
+ CbcBranchDefaultDecision ( const CbcBranchDefaultDecision &);
25
+
26
+ virtual ~CbcBranchDefaultDecision();
27
+
28
+ /// Clone
29
+ virtual CbcBranchDecision * clone() const;
30
+
31
+ /// Initialize, <i>e.g.</i> before the start of branch selection at a node
32
+ virtual void initialize(CbcModel * model);
33
+
34
+ /** \brief Compare two branching objects. Return nonzero if \p thisOne is
35
+ better than \p bestSoFar.
36
+
37
+ The routine compares branches using the values supplied in \p numInfUp and
38
+ \p numInfDn until a solution is found by search, after which it uses the
39
+ values supplied in \p changeUp and \p changeDn. The best branching object
40
+ seen so far and the associated parameter values are remembered in the
41
+ \c CbcBranchDefaultDecision object. The nonzero return value is +1 if the
42
+ up branch is preferred, -1 if the down branch is preferred.
43
+
44
+ As the names imply, the assumption is that the values supplied for
45
+ \p numInfUp and \p numInfDn will be the number of infeasibilities reported
46
+ by the branching object, and \p changeUp and \p changeDn will be the
47
+ estimated change in objective. Other measures can be used if desired.
48
+
49
+ Because an \c CbcBranchDefaultDecision object remembers the current best
50
+ branching candidate (#bestObject_) as well as the values used in the
51
+ comparison, the parameter \p bestSoFar is redundant, hence unused.
52
+ */
53
+ virtual int betterBranch(CbcBranchingObject * thisOne,
54
+ CbcBranchingObject * bestSoFar,
55
+ double changeUp, int numInfUp,
56
+ double changeDn, int numInfDn);
57
+ /** Sets or gets best criterion so far */
58
+ virtual void setBestCriterion(double value);
59
+ virtual double getBestCriterion() const;
60
+
61
+ /** \brief Compare N branching objects. Return index of best
62
+ and sets way of branching in chosen object.
63
+
64
+ This routine is used only after strong branching.
65
+ */
66
+
67
+ virtual int
68
+ bestBranch (CbcBranchingObject ** objects, int numberObjects, int numberUnsatisfied,
69
+ double * changeUp, int * numberInfeasibilitiesUp,
70
+ double * changeDown, int * numberInfeasibilitiesDown,
71
+ double objectiveValue) ;
72
+ private:
73
+
74
+ /// Illegal Assignment operator
75
+ CbcBranchDefaultDecision & operator=(const CbcBranchDefaultDecision& rhs);
76
+
77
+ /// data
78
+
79
+ /// "best" so far
80
+ double bestCriterion_;
81
+
82
+ /// Change up for best
83
+ double bestChangeUp_;
84
+
85
+ /// Number of infeasibilities for up
86
+ int bestNumberUp_;
87
+
88
+ /// Change down for best
89
+ double bestChangeDown_;
90
+
91
+ /// Pointer to best branching object
92
+ CbcBranchingObject * bestObject_;
93
+
94
+ /// Number of infeasibilities for down
95
+ int bestNumberDown_;
96
+
97
+ };
98
+
99
+ #endif
100
+