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,229 @@
1
+ /* $Id: ClpNetworkMatrix.hpp 1665 2011-01-04 17:55:54Z lou $ */
2
+ // Copyright (C) 2003, 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 ClpNetworkMatrix_H
7
+ #define ClpNetworkMatrix_H
8
+
9
+
10
+ #include "CoinPragma.hpp"
11
+
12
+ #include "ClpMatrixBase.hpp"
13
+
14
+ /** This implements a simple network matrix as derived from ClpMatrixBase.
15
+
16
+ If you want more sophisticated version then you could inherit from this.
17
+ Also you might want to allow networks with gain */
18
+
19
+ class ClpNetworkMatrix : public ClpMatrixBase {
20
+
21
+ public:
22
+ /**@name Useful methods */
23
+ //@{
24
+ /// Return a complete CoinPackedMatrix
25
+ virtual CoinPackedMatrix * getPackedMatrix() const;
26
+ /** Whether the packed matrix is column major ordered or not. */
27
+ virtual bool isColOrdered() const {
28
+ return true;
29
+ }
30
+ /** Number of entries in the packed matrix. */
31
+ virtual CoinBigIndex getNumElements() const {
32
+ return 2 * numberColumns_;
33
+ }
34
+ /** Number of columns. */
35
+ virtual int getNumCols() const {
36
+ return numberColumns_;
37
+ }
38
+ /** Number of rows. */
39
+ virtual int getNumRows() const {
40
+ return numberRows_;
41
+ }
42
+
43
+ /** A vector containing the elements in the packed matrix. Note that there
44
+ might be gaps in this list, entries that do not belong to any
45
+ major-dimension vector. To get the actual elements one should look at
46
+ this vector together with vectorStarts and vectorLengths. */
47
+ virtual const double * getElements() const;
48
+ /** A vector containing the minor indices of the elements in the packed
49
+ matrix. Note that there might be gaps in this list, entries that do not
50
+ belong to any major-dimension vector. To get the actual elements one
51
+ should look at this vector together with vectorStarts and
52
+ vectorLengths. */
53
+ virtual const int * getIndices() const {
54
+ return indices_;
55
+ }
56
+
57
+ virtual const CoinBigIndex * getVectorStarts() const;
58
+ /** The lengths of the major-dimension vectors. */
59
+ virtual const int * getVectorLengths() const;
60
+
61
+ /** Delete the columns whose indices are listed in <code>indDel</code>. */
62
+ virtual void deleteCols(const int numDel, const int * indDel);
63
+ /** Delete the rows whose indices are listed in <code>indDel</code>. */
64
+ virtual void deleteRows(const int numDel, const int * indDel);
65
+ /// Append Columns
66
+ virtual void appendCols(int number, const CoinPackedVectorBase * const * columns);
67
+ /// Append Rows
68
+ virtual void appendRows(int number, const CoinPackedVectorBase * const * rows);
69
+ #ifndef SLIM_CLP
70
+ /** Append a set of rows/columns to the end of the matrix. Returns number of errors
71
+ i.e. if any of the new rows/columns contain an index that's larger than the
72
+ number of columns-1/rows-1 (if numberOther>0) or duplicates
73
+ If 0 then rows, 1 if columns */
74
+ virtual int appendMatrix(int number, int type,
75
+ const CoinBigIndex * starts, const int * index,
76
+ const double * element, int numberOther = -1);
77
+ #endif
78
+ /** Returns a new matrix in reverse order without gaps */
79
+ virtual ClpMatrixBase * reverseOrderedCopy() const;
80
+ /// Returns number of elements in column part of basis
81
+ virtual CoinBigIndex countBasis(
82
+ const int * whichColumn,
83
+ int & numberColumnBasic);
84
+ /// Fills in column part of basis
85
+ virtual void fillBasis(ClpSimplex * model,
86
+ const int * whichColumn,
87
+ int & numberColumnBasic,
88
+ int * row, int * start,
89
+ int * rowCount, int * columnCount,
90
+ CoinFactorizationDouble * element);
91
+ /** Given positive integer weights for each row fills in sum of weights
92
+ for each column (and slack).
93
+ Returns weights vector
94
+ */
95
+ virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model, int * inputWeights) const;
96
+ /** Returns largest and smallest elements of both signs.
97
+ Largest refers to largest absolute value.
98
+ */
99
+ virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
100
+ double & smallestPositive, double & largestPositive);
101
+ /** Unpacks a column into an CoinIndexedvector
102
+ */
103
+ virtual void unpack(const ClpSimplex * model, CoinIndexedVector * rowArray,
104
+ int column) const ;
105
+ /** Unpacks a column into an CoinIndexedvector
106
+ ** in packed format
107
+ Note that model is NOT const. Bounds and objective could
108
+ be modified if doing column generation (just for this variable) */
109
+ virtual void unpackPacked(ClpSimplex * model,
110
+ CoinIndexedVector * rowArray,
111
+ int column) const;
112
+ /** Adds multiple of a column into an CoinIndexedvector
113
+ You can use quickAdd to add to vector */
114
+ virtual void add(const ClpSimplex * model, CoinIndexedVector * rowArray,
115
+ int column, double multiplier) const ;
116
+ /** Adds multiple of a column into an array */
117
+ virtual void add(const ClpSimplex * model, double * array,
118
+ int column, double multiplier) const;
119
+ /// Allow any parts of a created CoinMatrix to be deleted
120
+ virtual void releasePackedMatrix() const ;
121
+ /// Says whether it can do partial pricing
122
+ virtual bool canDoPartialPricing() const;
123
+ /// Partial pricing
124
+ virtual void partialPricing(ClpSimplex * model, double start, double end,
125
+ int & bestSequence, int & numberWanted);
126
+ //@}
127
+
128
+ /**@name Matrix times vector methods */
129
+ //@{
130
+ /** Return <code>y + A * scalar *x</code> in <code>y</code>.
131
+ @pre <code>x</code> must be of size <code>numColumns()</code>
132
+ @pre <code>y</code> must be of size <code>numRows()</code> */
133
+ virtual void times(double scalar,
134
+ const double * x, double * y) const;
135
+ /// And for scaling
136
+ virtual void times(double scalar,
137
+ const double * x, double * y,
138
+ const double * rowScale,
139
+ const double * columnScale) const;
140
+ /** Return <code>y + x * scalar * A</code> in <code>y</code>.
141
+ @pre <code>x</code> must be of size <code>numRows()</code>
142
+ @pre <code>y</code> must be of size <code>numColumns()</code> */
143
+ virtual void transposeTimes(double scalar,
144
+ const double * x, double * y) const;
145
+ /// And for scaling
146
+ virtual void transposeTimes(double scalar,
147
+ const double * x, double * y,
148
+ const double * rowScale,
149
+ const double * columnScale, double * spare = NULL) const;
150
+ /** Return <code>x * scalar * A + y</code> in <code>z</code>.
151
+ Can use y as temporary array (will be empty at end)
152
+ Note - If x packed mode - then z packed mode
153
+ Squashes small elements and knows about ClpSimplex */
154
+ virtual void transposeTimes(const ClpSimplex * model, double scalar,
155
+ const CoinIndexedVector * x,
156
+ CoinIndexedVector * y,
157
+ CoinIndexedVector * z) const;
158
+ /** Return <code>x *A</code> in <code>z</code> but
159
+ just for indices in y.
160
+ Note - z always packed mode */
161
+ virtual void subsetTransposeTimes(const ClpSimplex * model,
162
+ const CoinIndexedVector * x,
163
+ const CoinIndexedVector * y,
164
+ CoinIndexedVector * z) const;
165
+ //@}
166
+
167
+ /**@name Other */
168
+ //@{
169
+ /// Return true if really network, false if has slacks
170
+ inline bool trueNetwork() const {
171
+ return trueNetwork_;
172
+ }
173
+ //@}
174
+
175
+
176
+ /**@name Constructors, destructor */
177
+ //@{
178
+ /** Default constructor. */
179
+ ClpNetworkMatrix();
180
+ /** Constructor from two arrays */
181
+ ClpNetworkMatrix(int numberColumns, const int * head,
182
+ const int * tail);
183
+ /** Destructor */
184
+ virtual ~ClpNetworkMatrix();
185
+ //@}
186
+
187
+ /**@name Copy method */
188
+ //@{
189
+ /** The copy constructor. */
190
+ ClpNetworkMatrix(const ClpNetworkMatrix&);
191
+ /** The copy constructor from an CoinNetworkMatrix. */
192
+ ClpNetworkMatrix(const CoinPackedMatrix&);
193
+
194
+ ClpNetworkMatrix& operator=(const ClpNetworkMatrix&);
195
+ /// Clone
196
+ virtual ClpMatrixBase * clone() const ;
197
+ /** Subset constructor (without gaps). Duplicates are allowed
198
+ and order is as given */
199
+ ClpNetworkMatrix (const ClpNetworkMatrix & wholeModel,
200
+ int numberRows, const int * whichRows,
201
+ int numberColumns, const int * whichColumns);
202
+ /** Subset clone (without gaps). Duplicates are allowed
203
+ and order is as given */
204
+ virtual ClpMatrixBase * subsetClone (
205
+ int numberRows, const int * whichRows,
206
+ int numberColumns, const int * whichColumns) const ;
207
+ //@}
208
+
209
+
210
+ protected:
211
+ /**@name Data members
212
+ The data members are protected to allow access for derived classes. */
213
+ //@{
214
+ /// For fake CoinPackedMatrix
215
+ mutable CoinPackedMatrix * matrix_;
216
+ mutable int * lengths_;
217
+ /// Data -1, then +1 rows in pairs (row==-1 if one entry)
218
+ int * indices_;
219
+ /// Number of rows
220
+ int numberRows_;
221
+ /// Number of columns
222
+ int numberColumns_;
223
+ /// True if all entries have two elements
224
+ bool trueNetwork_;
225
+
226
+ //@}
227
+ };
228
+
229
+ #endif
@@ -0,0 +1,349 @@
1
+ /* $Id: ClpNode.hpp 1910 2013-01-27 02:00:13Z stefan $ */
2
+ // Copyright (C) 2008, 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 ClpNode_H
7
+ #define ClpNode_H
8
+
9
+ #include "CoinPragma.hpp"
10
+
11
+ // This implements all stuff for Clp fathom
12
+ /** This contains what is in a Clp "node"
13
+
14
+ */
15
+
16
+ class ClpFactorization;
17
+ class ClpDualRowSteepest;
18
+ class ClpNodeStuff;
19
+ class ClpNode {
20
+
21
+ public:
22
+ /**@name Useful methods */
23
+ //@{
24
+ /** Applies node to model
25
+ 0 - just tree bounds
26
+ 1 - tree bounds and basis etc
27
+ 2 - saved bounds and basis etc
28
+ */
29
+ void applyNode(ClpSimplex * model, int doBoundsEtc );
30
+ /// Choose a new variable
31
+ void chooseVariable(ClpSimplex * model, ClpNodeStuff * info);
32
+ /// Fix on reduced costs
33
+ int fixOnReducedCosts(ClpSimplex * model);
34
+ /// Create odd arrays
35
+ void createArrays(ClpSimplex * model);
36
+ /// Clean up as crunch is different model
37
+ void cleanUpForCrunch();
38
+ //@}
39
+
40
+ /**@name Gets and sets */
41
+ //@{
42
+ /// Objective value
43
+ inline double objectiveValue() const {
44
+ return objectiveValue_;
45
+ }
46
+ /// Set objective value
47
+ inline void setObjectiveValue(double value) {
48
+ objectiveValue_ = value;
49
+ }
50
+ /// Primal solution
51
+ inline const double * primalSolution() const {
52
+ return primalSolution_;
53
+ }
54
+ /// Dual solution
55
+ inline const double * dualSolution() const {
56
+ return dualSolution_;
57
+ }
58
+ /// Initial value of integer variable
59
+ inline double branchingValue() const {
60
+ return branchingValue_;
61
+ }
62
+ /// Sum infeasibilities
63
+ inline double sumInfeasibilities() const {
64
+ return sumInfeasibilities_;
65
+ }
66
+ /// Number infeasibilities
67
+ inline int numberInfeasibilities() const {
68
+ return numberInfeasibilities_;
69
+ }
70
+ /// Relative depth
71
+ inline int depth() const {
72
+ return depth_;
73
+ }
74
+ /// Estimated solution value
75
+ inline double estimatedSolution() const {
76
+ return estimatedSolution_;
77
+ }
78
+ /** Way for integer variable -1 down , +1 up */
79
+ int way() const;
80
+ /// Return true if branch exhausted
81
+ bool fathomed() const;
82
+ /// Change state of variable i.e. go other way
83
+ void changeState();
84
+ /// Sequence number of integer variable (-1 if none)
85
+ inline int sequence() const {
86
+ return sequence_;
87
+ }
88
+ /// If odd arrays exist
89
+ inline bool oddArraysExist() const {
90
+ return lower_ != NULL;
91
+ }
92
+ /// Status array
93
+ inline const unsigned char * statusArray() const {
94
+ return status_;
95
+ }
96
+ //@}
97
+
98
+ /**@name Constructors, destructor */
99
+ //@{
100
+ /** Default constructor. */
101
+ ClpNode();
102
+ /// Constructor from model
103
+ ClpNode (ClpSimplex * model, const ClpNodeStuff * stuff, int depth);
104
+ /// Does work of constructor (partly so gdb will work)
105
+ void gutsOfConstructor(ClpSimplex * model, const ClpNodeStuff * stuff,
106
+ int arraysExist, int depth);
107
+ /** Destructor */
108
+ virtual ~ClpNode();
109
+ //@}
110
+
111
+ /**@name Copy methods (at present illegal - will abort) */
112
+ //@{
113
+ /** The copy constructor. */
114
+ ClpNode(const ClpNode&);
115
+ /// Operator =
116
+ ClpNode& operator=(const ClpNode&);
117
+ //@}
118
+
119
+ protected:
120
+ // For state of branch
121
+ typedef struct {
122
+ unsigned int firstBranch: 1; // nonzero if first branch on variable is up
123
+ unsigned int branch: 2; // 0 means do first branch next, 1 second, 2 finished
124
+ unsigned int spare: 29;
125
+ } branchState;
126
+ /**@name Data */
127
+ //@{
128
+ /// Initial value of integer variable
129
+ double branchingValue_;
130
+ /// Value of objective
131
+ double objectiveValue_;
132
+ /// Sum of infeasibilities
133
+ double sumInfeasibilities_;
134
+ /// Estimated solution value
135
+ double estimatedSolution_;
136
+ /// Factorization
137
+ ClpFactorization * factorization_;
138
+ /// Steepest edge weights
139
+ ClpDualRowSteepest * weights_;
140
+ /// Status vector
141
+ unsigned char * status_;
142
+ /// Primal solution
143
+ double * primalSolution_;
144
+ /// Dual solution
145
+ double * dualSolution_;
146
+ /// Integer lower bounds (only used in fathomMany)
147
+ int * lower_;
148
+ /// Integer upper bounds (only used in fathomMany)
149
+ int * upper_;
150
+ /// Pivot variables for factorization
151
+ int * pivotVariables_;
152
+ /// Variables fixed by reduced costs (at end of branch) 0x10000000 added if fixed to UB
153
+ int * fixed_;
154
+ /// State of branch
155
+ branchState branchState_;
156
+ /// Sequence number of integer variable (-1 if none)
157
+ int sequence_;
158
+ /// Number of infeasibilities
159
+ int numberInfeasibilities_;
160
+ /// Relative depth
161
+ int depth_;
162
+ /// Number fixed by reduced cost
163
+ int numberFixed_;
164
+ /// Flags - 1 duals scaled
165
+ int flags_;
166
+ /// Maximum number fixed by reduced cost
167
+ int maximumFixed_;
168
+ /// Maximum rows so far
169
+ int maximumRows_;
170
+ /// Maximum columns so far
171
+ int maximumColumns_;
172
+ /// Maximum Integers so far
173
+ int maximumIntegers_;
174
+ //@}
175
+ };
176
+ class ClpNodeStuff {
177
+
178
+ public:
179
+ /**@name Constructors, destructor */
180
+ //@{
181
+ /** Default constructor. */
182
+ ClpNodeStuff();
183
+ /** Destructor */
184
+ virtual ~ClpNodeStuff();
185
+ //@}
186
+
187
+ /**@name Copy methods (only copies ints etc, nulls arrays) */
188
+ //@{
189
+ /** The copy constructor. */
190
+ ClpNodeStuff(const ClpNodeStuff&);
191
+ /// Operator =
192
+ ClpNodeStuff& operator=(const ClpNodeStuff&);
193
+ /// Zaps stuff 1 - arrays, 2 ints, 3 both
194
+ void zap(int type);
195
+ //@}
196
+
197
+
198
+ /**@name Fill methods */
199
+ //@{
200
+ /** Fill with pseudocosts */
201
+ void fillPseudoCosts(const double * down, const double * up,
202
+ const int * priority,
203
+ const int * numberDown, const int * numberUp,
204
+ const int * numberDownInfeasible, const int * numberUpInfeasible,
205
+ int number);
206
+ /// Update pseudo costs
207
+ void update(int way, int sequence, double change, bool feasible);
208
+ /// Return maximum number of nodes
209
+ int maximumNodes() const;
210
+ /// Return maximum space for nodes
211
+ int maximumSpace() const;
212
+ //@}
213
+
214
+ public:
215
+ /**@name Data */
216
+ //@{
217
+ /// Integer tolerance
218
+ double integerTolerance_;
219
+ /// Integer increment
220
+ double integerIncrement_;
221
+ /// Small change in branch
222
+ double smallChange_;
223
+ /// Down pseudo costs
224
+ double * downPseudo_;
225
+ /// Up pseudo costs
226
+ double * upPseudo_;
227
+ /// Priority
228
+ int * priority_;
229
+ /// Number of times down
230
+ int * numberDown_;
231
+ /// Number of times up
232
+ int * numberUp_;
233
+ /// Number of times down infeasible
234
+ int * numberDownInfeasible_;
235
+ /// Number of times up infeasible
236
+ int * numberUpInfeasible_;
237
+ /// Copy of costs (local)
238
+ double * saveCosts_;
239
+ /// Array of ClpNodes
240
+ ClpNode ** nodeInfo_;
241
+ /// Large model if crunched
242
+ ClpSimplex * large_;
243
+ /// Which rows in large model
244
+ int * whichRow_;
245
+ /// Which columns in large model
246
+ int * whichColumn_;
247
+ #ifndef NO_FATHOM_PRINT
248
+ /// Cbc's message handler
249
+ CoinMessageHandler * handler_;
250
+ #endif
251
+ /// Number bounds in large model
252
+ int nBound_;
253
+ /// Save of specialOptions_ (local)
254
+ int saveOptions_;
255
+ /** Options to pass to solver
256
+ 1 - create external reduced costs for columns
257
+ 2 - create external reduced costs for rows
258
+ 4 - create external row activity (columns always done)
259
+ Above only done if feasible
260
+ 32 - just create up to nDepth_+1 nodes
261
+ 65536 - set if activated
262
+ */
263
+ int solverOptions_;
264
+ /// Maximum number of nodes to do
265
+ int maximumNodes_;
266
+ /// Number before trust from CbcModel
267
+ int numberBeforeTrust_;
268
+ /// State of search from CbcModel
269
+ int stateOfSearch_;
270
+ /// Number deep
271
+ int nDepth_;
272
+ /// Number nodes returned (-1 if fathom aborted)
273
+ int nNodes_;
274
+ /// Number of nodes explored
275
+ int numberNodesExplored_;
276
+ /// Number of iterations
277
+ int numberIterations_;
278
+ /// Type of presolve - 0 none, 1 crunch
279
+ int presolveType_;
280
+ #ifndef NO_FATHOM_PRINT
281
+ /// Depth passed in
282
+ int startingDepth_;
283
+ /// Node at which called
284
+ int nodeCalled_;
285
+ #endif
286
+ //@}
287
+ };
288
+ class ClpHashValue {
289
+
290
+ public:
291
+ /**@name Useful methods */
292
+ //@{
293
+ /// Return index or -1 if not found
294
+ int index(double value) const;
295
+ /// Add value to list and return index
296
+ int addValue(double value) ;
297
+ /// Number of different entries
298
+ inline int numberEntries() const {
299
+ return numberHash_;
300
+ }
301
+ //@}
302
+
303
+ /**@name Constructors, destructor */
304
+ //@{
305
+ /** Default constructor. */
306
+ ClpHashValue();
307
+ /** Useful constructor. */
308
+ ClpHashValue(ClpSimplex * model);
309
+ /** Destructor */
310
+ virtual ~ClpHashValue();
311
+ //@}
312
+
313
+ /**@name Copy method */
314
+ //@{
315
+ /** The copy constructor. */
316
+ ClpHashValue(const ClpHashValue&);
317
+ /// =
318
+ ClpHashValue& operator=(const ClpHashValue&);
319
+ //@}
320
+ private:
321
+ /**@name private stuff */
322
+ //@{
323
+ /** returns hash */
324
+ int hash(double value) const;
325
+ /// Resizes
326
+ void resize(bool increaseMax);
327
+ //@}
328
+
329
+ protected:
330
+ /**@name Data members
331
+ The data members are protected to allow access for derived classes. */
332
+ //@{
333
+ /// Data
334
+ // for hashing
335
+ typedef struct {
336
+ double value;
337
+ int index, next;
338
+ } CoinHashLink;
339
+ /// Hash table
340
+ mutable CoinHashLink *hash_;
341
+ /// Number of entries in hash table
342
+ int numberHash_;
343
+ /// Maximum number of entries in hash table i.e. size
344
+ int maxHash_;
345
+ /// Last used space
346
+ int lastUsed_;
347
+ //@}
348
+ };
349
+ #endif