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,381 @@
1
+ /* $Id: ClpDynamicMatrix.hpp 1755 2011-06-28 18:24:31Z 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 ClpDynamicMatrix_H
7
+ #define ClpDynamicMatrix_H
8
+
9
+
10
+ #include "CoinPragma.hpp"
11
+
12
+ #include "ClpPackedMatrix.hpp"
13
+ class ClpSimplex;
14
+ /** This implements a dynamic matrix when we have a limit on the number of
15
+ "interesting rows". This version inherits from ClpPackedMatrix and knows that
16
+ the real matrix is gub. A later version could use shortest path to generate columns.
17
+
18
+ */
19
+
20
+ class ClpDynamicMatrix : public ClpPackedMatrix {
21
+
22
+ public:
23
+ /// enums for status of various sorts
24
+ enum DynamicStatus {
25
+ soloKey = 0x00,
26
+ inSmall = 0x01,
27
+ atUpperBound = 0x02,
28
+ atLowerBound = 0x03
29
+ };
30
+ /**@name Main functions provided */
31
+ //@{
32
+ /// Partial pricing
33
+ virtual void partialPricing(ClpSimplex * model, double start, double end,
34
+ int & bestSequence, int & numberWanted);
35
+
36
+ /**
37
+ update information for a pivot (and effective rhs)
38
+ */
39
+ virtual int updatePivot(ClpSimplex * model, double oldInValue, double oldOutValue);
40
+ /** Returns effective RHS offset if it is being used. This is used for long problems
41
+ or big dynamic or anywhere where going through full columns is
42
+ expensive. This may re-compute */
43
+ virtual double * rhsOffset(ClpSimplex * model, bool forceRefresh = false,
44
+ bool check = false);
45
+
46
+ using ClpPackedMatrix::times ;
47
+ /** Return <code>y + A * scalar *x</code> in <code>y</code>.
48
+ @pre <code>x</code> must be of size <code>numColumns()</code>
49
+ @pre <code>y</code> must be of size <code>numRows()</code> */
50
+ virtual void times(double scalar,
51
+ const double * x, double * y) const;
52
+ /// Modifies rhs offset
53
+ void modifyOffset(int sequence, double amount);
54
+ /// Gets key value when none in small
55
+ double keyValue(int iSet) const;
56
+ /**
57
+ mode=0 - Set up before "updateTranspose" and "transposeTimes" for duals using extended
58
+ updates array (and may use other if dual values pass)
59
+ mode=1 - Update dual solution after "transposeTimes" using extended rows.
60
+ mode=2 - Compute all djs and compute key dual infeasibilities
61
+ mode=3 - Report on key dual infeasibilities
62
+ mode=4 - Modify before updateTranspose in partial pricing
63
+ */
64
+ virtual void dualExpanded(ClpSimplex * model, CoinIndexedVector * array,
65
+ double * other, int mode);
66
+ /**
67
+ mode=0 - Create list of non-key basics in pivotVariable_ using
68
+ number as numberBasic in and out
69
+ mode=1 - Set all key variables as basic
70
+ mode=2 - return number extra rows needed, number gives maximum number basic
71
+ mode=3 - before replaceColumn
72
+ mode=4 - return 1 if can do primal, 2 if dual, 3 if both
73
+ mode=5 - save any status stuff (when in good state)
74
+ mode=6 - restore status stuff
75
+ mode=7 - flag given variable (normally sequenceIn)
76
+ mode=8 - unflag all variables
77
+ mode=9 - synchronize costs
78
+ mode=10 - return 1 if there may be changing bounds on variable (column generation)
79
+ mode=11 - make sure set is clean (used when a variable rejected - but not flagged)
80
+ mode=12 - after factorize but before permute stuff
81
+ mode=13 - at end of simplex to delete stuff
82
+ */
83
+ virtual int generalExpanded(ClpSimplex * model, int mode, int & number);
84
+ /** Purely for column generation and similar ideas. Allows
85
+ matrix and any bounds or costs to be updated (sensibly).
86
+ Returns non-zero if any changes.
87
+ */
88
+ virtual int refresh(ClpSimplex * model);
89
+ /** Creates a variable. This is called after partial pricing and will modify matrix.
90
+ Will update bestSequence.
91
+ */
92
+ virtual void createVariable(ClpSimplex * model, int & bestSequence);
93
+ /// Returns reduced cost of a variable
94
+ virtual double reducedCost( ClpSimplex * model, int sequence) const;
95
+ /// Does gub crash
96
+ void gubCrash();
97
+ /// Writes out model (without names)
98
+ void writeMps(const char * name);
99
+ /// Populates initial matrix from dynamic status
100
+ void initialProblem();
101
+ /** Adds in a column to gub structure (called from descendant) and returns sequence */
102
+ int addColumn(int numberEntries, const int * row, const double * element,
103
+ double cost, double lower, double upper, int iSet,
104
+ DynamicStatus status);
105
+ /** If addColumn forces compression then this allows descendant to know what to do.
106
+ If >=0 then entry stayed in, if -1 then entry went out to lower bound.of zero.
107
+ Entries at upper bound (really nonzero) never go out (at present).
108
+ */
109
+ virtual void packDown(const int * , int ) {}
110
+ /// Gets lower bound (to simplify coding)
111
+ inline double columnLower(int sequence) const {
112
+ if (columnLower_) return columnLower_[sequence];
113
+ else return 0.0;
114
+ }
115
+ /// Gets upper bound (to simplify coding)
116
+ inline double columnUpper(int sequence) const {
117
+ if (columnUpper_) return columnUpper_[sequence];
118
+ else return COIN_DBL_MAX;
119
+ }
120
+
121
+ //@}
122
+
123
+
124
+
125
+ /**@name Constructors, destructor */
126
+ //@{
127
+ /** Default constructor. */
128
+ ClpDynamicMatrix();
129
+ /** This is the real constructor.
130
+ It assumes factorization frequency will not be changed.
131
+ This resizes model !!!!
132
+ The contents of original matrix in model will be taken over and original matrix
133
+ will be sanitized so can be deleted (to avoid a very small memory leak)
134
+ */
135
+ ClpDynamicMatrix(ClpSimplex * model, int numberSets,
136
+ int numberColumns, const int * starts,
137
+ const double * lower, const double * upper,
138
+ const CoinBigIndex * startColumn, const int * row,
139
+ const double * element, const double * cost,
140
+ const double * columnLower = NULL, const double * columnUpper = NULL,
141
+ const unsigned char * status = NULL,
142
+ const unsigned char * dynamicStatus = NULL);
143
+
144
+ /** Destructor */
145
+ virtual ~ClpDynamicMatrix();
146
+ //@}
147
+
148
+ /**@name Copy method */
149
+ //@{
150
+ /** The copy constructor. */
151
+ ClpDynamicMatrix(const ClpDynamicMatrix&);
152
+ /** The copy constructor from an CoinPackedMatrix. */
153
+ ClpDynamicMatrix(const CoinPackedMatrix&);
154
+
155
+ ClpDynamicMatrix& operator=(const ClpDynamicMatrix&);
156
+ /// Clone
157
+ virtual ClpMatrixBase * clone() const ;
158
+ //@}
159
+ /**@name gets and sets */
160
+ //@{
161
+ /// Status of row slacks
162
+ inline ClpSimplex::Status getStatus(int sequence) const {
163
+ return static_cast<ClpSimplex::Status> (status_[sequence] & 7);
164
+ }
165
+ inline void setStatus(int sequence, ClpSimplex::Status status) {
166
+ unsigned char & st_byte = status_[sequence];
167
+ st_byte = static_cast<unsigned char>(st_byte & ~7);
168
+ st_byte = static_cast<unsigned char>(st_byte | status);
169
+ }
170
+ /// Whether flagged slack
171
+ inline bool flaggedSlack(int i) const {
172
+ return (status_[i] & 8) != 0;
173
+ }
174
+ inline void setFlaggedSlack(int i) {
175
+ status_[i] = static_cast<unsigned char>(status_[i] | 8);
176
+ }
177
+ inline void unsetFlaggedSlack(int i) {
178
+ status_[i] = static_cast<unsigned char>(status_[i] & ~8);
179
+ }
180
+ /// Number of sets (dynamic rows)
181
+ inline int numberSets() const {
182
+ return numberSets_;
183
+ }
184
+ /// Number of possible gub variables
185
+ inline int numberGubEntries() const
186
+ { return startSet_[numberSets_];}
187
+ /// Sets
188
+ inline int * startSets() const
189
+ { return startSet_;}
190
+ /// Whether flagged
191
+ inline bool flagged(int i) const {
192
+ return (dynamicStatus_[i] & 8) != 0;
193
+ }
194
+ inline void setFlagged(int i) {
195
+ dynamicStatus_[i] = static_cast<unsigned char>(dynamicStatus_[i] | 8);
196
+ }
197
+ inline void unsetFlagged(int i) {
198
+ dynamicStatus_[i] = static_cast<unsigned char>(dynamicStatus_[i] & ~8);
199
+ }
200
+ inline void setDynamicStatus(int sequence, DynamicStatus status) {
201
+ unsigned char & st_byte = dynamicStatus_[sequence];
202
+ st_byte = static_cast<unsigned char>(st_byte & ~7);
203
+ st_byte = static_cast<unsigned char>(st_byte | status);
204
+ }
205
+ inline DynamicStatus getDynamicStatus(int sequence) const {
206
+ return static_cast<DynamicStatus> (dynamicStatus_[sequence] & 7);
207
+ }
208
+ /// Saved value of objective offset
209
+ inline double objectiveOffset() const {
210
+ return objectiveOffset_;
211
+ }
212
+ /// Starts of each column
213
+ inline CoinBigIndex * startColumn() const {
214
+ return startColumn_;
215
+ }
216
+ /// rows
217
+ inline int * row() const {
218
+ return row_;
219
+ }
220
+ /// elements
221
+ inline double * element() const {
222
+ return element_;
223
+ }
224
+ /// costs
225
+ inline double * cost() const {
226
+ return cost_;
227
+ }
228
+ /// ids of active columns (just index here)
229
+ inline int * id() const {
230
+ return id_;
231
+ }
232
+ /// Optional lower bounds on columns
233
+ inline double * columnLower() const {
234
+ return columnLower_;
235
+ }
236
+ /// Optional upper bounds on columns
237
+ inline double * columnUpper() const {
238
+ return columnUpper_;
239
+ }
240
+ /// Lower bounds on sets
241
+ inline double * lowerSet() const {
242
+ return lowerSet_;
243
+ }
244
+ /// Upper bounds on sets
245
+ inline double * upperSet() const {
246
+ return upperSet_;
247
+ }
248
+ /// size
249
+ inline int numberGubColumns() const {
250
+ return numberGubColumns_;
251
+ }
252
+ /// first free
253
+ inline int firstAvailable() const {
254
+ return firstAvailable_;
255
+ }
256
+ /// first dynamic
257
+ inline int firstDynamic() const {
258
+ return firstDynamic_;
259
+ }
260
+ /// number of columns in dynamic model
261
+ inline int lastDynamic() const {
262
+ return lastDynamic_;
263
+ }
264
+ /// number of rows in original model
265
+ inline int numberStaticRows() const {
266
+ return numberStaticRows_;
267
+ }
268
+ /// size of working matrix (max)
269
+ inline int numberElements() const {
270
+ return numberElements_;
271
+ }
272
+ inline int * keyVariable() const {
273
+ return keyVariable_;
274
+ }
275
+ /// Switches off dj checking each factorization (for BIG models)
276
+ void switchOffCheck();
277
+ /// Status region for gub slacks
278
+ inline unsigned char * gubRowStatus() const {
279
+ return status_;
280
+ }
281
+ /// Status region for gub variables
282
+ inline unsigned char * dynamicStatus() const {
283
+ return dynamicStatus_;
284
+ }
285
+ /// Returns which set a variable is in
286
+ int whichSet (int sequence) const;
287
+ //@}
288
+
289
+
290
+ protected:
291
+ /**@name Data members
292
+ The data members are protected to allow access for derived classes. */
293
+ //@{
294
+ /// Sum of dual infeasibilities
295
+ double sumDualInfeasibilities_;
296
+ /// Sum of primal infeasibilities
297
+ double sumPrimalInfeasibilities_;
298
+ /// Sum of Dual infeasibilities using tolerance based on error in duals
299
+ double sumOfRelaxedDualInfeasibilities_;
300
+ /// Sum of Primal infeasibilities using tolerance based on error in primals
301
+ double sumOfRelaxedPrimalInfeasibilities_;
302
+ /// Saved best dual on gub row in pricing
303
+ double savedBestGubDual_;
304
+ /// Saved best set in pricing
305
+ int savedBestSet_;
306
+ /// Backward pointer to pivot row !!!
307
+ int * backToPivotRow_;
308
+ /// Key variable of set (only accurate if none in small problem)
309
+ mutable int * keyVariable_;
310
+ /// Backward pointer to extra row
311
+ int * toIndex_;
312
+ // Reverse pointer from index to set
313
+ int * fromIndex_;
314
+ /// Number of sets (dynamic rows)
315
+ int numberSets_;
316
+ /// Number of active sets
317
+ int numberActiveSets_;
318
+ /// Saved value of objective offset
319
+ double objectiveOffset_;
320
+ /// Lower bounds on sets
321
+ double * lowerSet_;
322
+ /// Upper bounds on sets
323
+ double * upperSet_;
324
+ /// Status of slack on set
325
+ unsigned char * status_;
326
+ /// Pointer back to model
327
+ ClpSimplex * model_;
328
+ /// first free
329
+ int firstAvailable_;
330
+ /// first free when iteration started
331
+ int firstAvailableBefore_;
332
+ /// first dynamic
333
+ int firstDynamic_;
334
+ /// number of columns in dynamic model
335
+ int lastDynamic_;
336
+ /// number of rows in original model
337
+ int numberStaticRows_;
338
+ /// size of working matrix (max)
339
+ int numberElements_;
340
+ /// Number of dual infeasibilities
341
+ int numberDualInfeasibilities_;
342
+ /// Number of primal infeasibilities
343
+ int numberPrimalInfeasibilities_;
344
+ /** If pricing will declare victory (i.e. no check every factorization).
345
+ -1 - always check
346
+ 0 - don't check
347
+ 1 - in don't check mode but looks optimal
348
+ */
349
+ int noCheck_;
350
+ /// Infeasibility weight when last full pass done
351
+ double infeasibilityWeight_;
352
+ /// size
353
+ int numberGubColumns_;
354
+ /// current maximum number of columns (then compress)
355
+ int maximumGubColumns_;
356
+ /// current maximum number of elemnts (then compress)
357
+ int maximumElements_;
358
+ /// Start of each set
359
+ int * startSet_;
360
+ /// next in chain
361
+ int * next_;
362
+ /// Starts of each column
363
+ CoinBigIndex * startColumn_;
364
+ /// rows
365
+ int * row_;
366
+ /// elements
367
+ double * element_;
368
+ /// costs
369
+ double * cost_;
370
+ /// ids of active columns (just index here)
371
+ int * id_;
372
+ /// for status and which bound
373
+ unsigned char * dynamicStatus_;
374
+ /// Optional lower bounds on columns
375
+ double * columnLower_;
376
+ /// Optional upper bounds on columns
377
+ double * columnUpper_;
378
+ //@}
379
+ };
380
+
381
+ #endif
@@ -0,0 +1,187 @@
1
+ /* $Id: ClpEventHandler.hpp 2156 2015-08-07 14:51:42Z forrest $ */
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 ClpEventHandler_H
7
+ #define ClpEventHandler_H
8
+
9
+ #include "ClpSimplex.hpp"
10
+ /** Base class for Clp event handling
11
+
12
+ This is just here to allow for event handling. By event I mean a Clp event
13
+ e.g. end of values pass.
14
+
15
+ One use would be to let a user handle a system event e.g. Control-C. This could be done
16
+ by deriving a class MyEventHandler which knows about such events. If one occurs
17
+ MyEventHandler::event() could clear event status and return 3 (stopped).
18
+
19
+ Clp would then return to user code.
20
+
21
+ As it is called every iteration this should be fine grained enough.
22
+
23
+ User can derive and construct from CbcModel - not pretty
24
+
25
+ */
26
+
27
+ class ClpEventHandler {
28
+
29
+ public:
30
+ /** enums for what sort of event.
31
+
32
+ These will also be returned in ClpModel::secondaryStatus() as int
33
+ */
34
+ enum Event {
35
+ endOfIteration = 100, // used to set secondary status
36
+ endOfFactorization, // after gutsOfSolution etc
37
+ endOfValuesPass,
38
+ node, // for Cbc
39
+ treeStatus, // for Cbc
40
+ solution, // for Cbc
41
+ theta, // hit in parametrics
42
+ pivotRow, // used to choose pivot row
43
+ presolveStart, // ClpSolve presolve start
44
+ presolveSize, // sees if ClpSolve presolve too big or too small
45
+ presolveInfeasible, // ClpSolve presolve infeasible
46
+ presolveBeforeSolve, // ClpSolve presolve before solve
47
+ presolveAfterFirstSolve, // ClpSolve presolve after solve
48
+ presolveAfterSolve, // ClpSolve presolve after solve
49
+ presolveEnd, // ClpSolve presolve end
50
+ goodFactorization, // before gutsOfSolution
51
+ complicatedPivotIn, // in modifyCoefficients
52
+ noCandidateInPrimal, // tentative end
53
+ looksEndInPrimal, // About to declare victory (or defeat)
54
+ endInPrimal, // Victory (or defeat)
55
+ beforeStatusOfProblemInPrimal,
56
+ startOfStatusOfProblemInPrimal,
57
+ complicatedPivotOut, // in modifyCoefficients
58
+ noCandidateInDual, // tentative end
59
+ looksEndInDual, // About to declare victory (or defeat)
60
+ endInDual, // Victory (or defeat)
61
+ beforeStatusOfProblemInDual,
62
+ startOfStatusOfProblemInDual,
63
+ startOfIterationInDual,
64
+ updateDualsInDual,
65
+ endOfCreateRim,
66
+ slightlyInfeasible,
67
+ modifyMatrixInMiniPresolve,
68
+ moreMiniPresolve,
69
+ modifyMatrixInMiniPostsolve,
70
+ startOfCrossover, // in Idiot
71
+ noTheta // At end (because no pivot)
72
+ };
73
+ /**@name Virtual method that the derived classes should provide.
74
+ The base class instance does nothing and as event() is only useful method
75
+ it would not be very useful NOT providing one!
76
+ */
77
+ //@{
78
+ /** This can do whatever it likes. If return code -1 then carries on
79
+ if 0 sets ClpModel::status() to 5 (stopped by event) and will return to user.
80
+ At present if <-1 carries on and if >0 acts as if 0 - this may change.
81
+ For ClpSolve 2 -> too big return status of -2 and -> too small 3
82
+ */
83
+ virtual int event(Event whichEvent);
84
+ /** This can do whatever it likes. Return code -1 means no action.
85
+ This passes in something
86
+ */
87
+ virtual int eventWithInfo(Event whichEvent, void * info) ;
88
+ //@}
89
+
90
+
91
+ /**@name Constructors, destructor */
92
+
93
+ //@{
94
+ /** Default constructor. */
95
+ ClpEventHandler(ClpSimplex * model = NULL);
96
+ /** Destructor */
97
+ virtual ~ClpEventHandler();
98
+ // Copy
99
+ ClpEventHandler(const ClpEventHandler&);
100
+ // Assignment
101
+ ClpEventHandler& operator=(const ClpEventHandler&);
102
+ /// Clone
103
+ virtual ClpEventHandler * clone() const;
104
+
105
+ //@}
106
+
107
+ /**@name Sets/gets */
108
+
109
+ //@{
110
+ /** set model. */
111
+ void setSimplex(ClpSimplex * model);
112
+ /// Get model
113
+ inline ClpSimplex * simplex() const {
114
+ return model_;
115
+ }
116
+ //@}
117
+
118
+
119
+ protected:
120
+ /**@name Data members
121
+ The data members are protected to allow access for derived classes. */
122
+ //@{
123
+ /// Pointer to simplex
124
+ ClpSimplex * model_;
125
+ //@}
126
+ };
127
+ /** Base class for Clp disaster handling
128
+
129
+ This is here to allow for disaster handling. By disaster I mean that Clp
130
+ would otherwise give up
131
+
132
+ */
133
+
134
+ class ClpDisasterHandler {
135
+
136
+ public:
137
+ /**@name Virtual methods that the derived classe should provide.
138
+ */
139
+ //@{
140
+ /// Into simplex
141
+ virtual void intoSimplex() = 0;
142
+ /// Checks if disaster
143
+ virtual bool check() const = 0;
144
+ /// saves information for next attempt
145
+ virtual void saveInfo() = 0;
146
+ /// Type of disaster 0 can fix, 1 abort
147
+ virtual int typeOfDisaster();
148
+ //@}
149
+
150
+
151
+ /**@name Constructors, destructor */
152
+
153
+ //@{
154
+ /** Default constructor. */
155
+ ClpDisasterHandler(ClpSimplex * model = NULL);
156
+ /** Destructor */
157
+ virtual ~ClpDisasterHandler();
158
+ // Copy
159
+ ClpDisasterHandler(const ClpDisasterHandler&);
160
+ // Assignment
161
+ ClpDisasterHandler& operator=(const ClpDisasterHandler&);
162
+ /// Clone
163
+ virtual ClpDisasterHandler * clone() const = 0;
164
+
165
+ //@}
166
+
167
+ /**@name Sets/gets */
168
+
169
+ //@{
170
+ /** set model. */
171
+ void setSimplex(ClpSimplex * model);
172
+ /// Get model
173
+ inline ClpSimplex * simplex() const {
174
+ return model_;
175
+ }
176
+ //@}
177
+
178
+
179
+ protected:
180
+ /**@name Data members
181
+ The data members are protected to allow access for derived classes. */
182
+ //@{
183
+ /// Pointer to simplex
184
+ ClpSimplex * model_;
185
+ //@}
186
+ };
187
+ #endif