ruby-cbc 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
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,482 @@
1
+ /* $Id: CbcCutGenerator.hpp 2081 2014-09-25 11:31:17Z forrest $ */
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 CbcCutGenerator_H
7
+ #define CbcCutGenerator_H
8
+
9
+ #include "OsiSolverInterface.hpp"
10
+ #include "OsiCuts.hpp"
11
+ #include "CglCutGenerator.hpp"
12
+ #include "CbcCutModifier.hpp"
13
+
14
+ class CbcModel;
15
+ class OsiRowCut;
16
+ class OsiRowCutDebugger;
17
+
18
+ //#############################################################################
19
+
20
+ /** Interface between Cbc and Cut Generation Library.
21
+
22
+ \c CbcCutGenerator is intended to provide an intelligent interface between
23
+ Cbc and the cutting plane algorithms in the CGL. A \c CbcCutGenerator is
24
+ bound to a \c CglCutGenerator and to an \c CbcModel. It contains parameters
25
+ which control when and how the \c generateCuts method of the
26
+ \c CglCutGenerator will be called.
27
+
28
+ The builtin decision criteria available to use when deciding whether to
29
+ generate cuts are limited: every <i>X</i> nodes, when a solution is found,
30
+ and when a subproblem is found to be infeasible. The idea is that the class
31
+ will grow more intelligent with time.
32
+
33
+ \todo Add a pointer to function member which will allow a client to install
34
+ their own decision algorithm to decide whether or not to call the CGL
35
+ \p generateCuts method. Create a default decision method that looks
36
+ at the builtin criteria.
37
+
38
+ \todo It strikes me as not good that generateCuts contains code specific to
39
+ individual CGL algorithms. Another set of pointer to function members,
40
+ so that the client can specify the cut generation method as well as
41
+ pre- and post-generation methods? Taken a bit further, should this
42
+ class contain a bunch of pointer to function members, one for each
43
+ of the places where the cut generator might be referenced?
44
+ Initialization, root node, search tree node, discovery of solution,
45
+ and termination all come to mind. Initialization and termination would
46
+ also be useful for instrumenting cbc.
47
+ */
48
+
49
+ class CbcCutGenerator {
50
+
51
+ public:
52
+
53
+ /** \name Generate Cuts */
54
+ //@{
55
+ /** Generate cuts for the client model.
56
+
57
+ Evaluate the state of the client model and decide whether to generate cuts.
58
+ The generated cuts are inserted into and returned in the collection of cuts
59
+ \p cs.
60
+
61
+ If \p fullScan is !=0, the generator is obliged to call the CGL
62
+ \c generateCuts routine. Otherwise, it is free to make a local decision.
63
+ Negative fullScan says things like at integer solution
64
+ The current implementation uses \c whenCutGenerator_ to decide.
65
+
66
+ The routine returns true if reoptimisation is needed (because the state of
67
+ the solver interface has been modified).
68
+
69
+ If node then can find out depth
70
+ */
71
+ bool generateCuts( OsiCuts &cs, int fullScan, OsiSolverInterface * solver,
72
+ CbcNode * node);
73
+ //@}
74
+
75
+
76
+ /**@name Constructors and destructors */
77
+ //@{
78
+ /// Default constructor
79
+ CbcCutGenerator ();
80
+
81
+ /// Normal constructor
82
+ CbcCutGenerator(CbcModel * model, CglCutGenerator * generator,
83
+ int howOften = 1, const char * name = NULL,
84
+ bool normal = true, bool atSolution = false,
85
+ bool infeasible = false, int howOftenInsub = -100,
86
+ int whatDepth = -1, int whatDepthInSub = -1, int switchOffIfLessThan = 0);
87
+
88
+ /// Copy constructor
89
+ CbcCutGenerator (const CbcCutGenerator &);
90
+
91
+ /// Assignment operator
92
+ CbcCutGenerator & operator=(const CbcCutGenerator& rhs);
93
+
94
+ /// Destructor
95
+ ~CbcCutGenerator ();
96
+ //@}
97
+
98
+ /**@name Gets and sets */
99
+ //@{
100
+ /** Set the client model.
101
+
102
+ In addition to setting the client model, refreshModel also calls
103
+ the \c refreshSolver method of the CglCutGenerator object.
104
+ */
105
+ void refreshModel(CbcModel * model);
106
+
107
+ /// return name of generator
108
+ inline const char * cutGeneratorName() const {
109
+ return generatorName_;
110
+ }
111
+
112
+ /// Create C++ lines to show how to tune
113
+ void generateTuning( FILE * fp);
114
+ /** Set the cut generation interval
115
+
116
+ Set the number of nodes evaluated between calls to the Cgl object's
117
+ \p generateCuts routine.
118
+
119
+ If \p value is positive, cuts will always be generated at the specified
120
+ interval.
121
+ If \p value is negative, cuts will initially be generated at the specified
122
+ interval, but Cbc may adjust the value depending on the success of cuts
123
+ produced by this generator.
124
+
125
+ A value of -100 disables the generator, while a value of -99 means
126
+ just at root.
127
+ */
128
+ void setHowOften(int value) ;
129
+
130
+ /// Get the cut generation interval.
131
+ inline int howOften() const {
132
+ return whenCutGenerator_;
133
+ }
134
+ /// Get the cut generation interval.in sub tree
135
+ inline int howOftenInSub() const {
136
+ return whenCutGeneratorInSub_;
137
+ }
138
+ /// Get level of cut inaccuracy (0 means exact e.g. cliques)
139
+ inline int inaccuracy() const {
140
+ return inaccuracy_;
141
+ }
142
+ /// Set level of cut inaccuracy (0 means exact e.g. cliques)
143
+ inline void setInaccuracy(int level) {
144
+ inaccuracy_ = level;
145
+ }
146
+
147
+ /** Set the cut generation depth
148
+
149
+ Set the depth criterion for calls to the Cgl object's
150
+ \p generateCuts routine. Only active if > 0.
151
+
152
+ If whenCutGenerator is positive and this is positive then this overrides.
153
+ If whenCutGenerator is -1 then this is used as criterion if any cuts
154
+ were generated at root node.
155
+ If whenCutGenerator is anything else this is ignored.
156
+ */
157
+ void setWhatDepth(int value) ;
158
+ /// Set the cut generation depth in sub tree
159
+ void setWhatDepthInSub(int value) ;
160
+ /// Get the cut generation depth criterion.
161
+ inline int whatDepth() const {
162
+ return depthCutGenerator_;
163
+ }
164
+ /// Get the cut generation depth criterion.in sub tree
165
+ inline int whatDepthInSub() const {
166
+ return depthCutGeneratorInSub_;
167
+ }
168
+ /// Set maximum number of times to enter
169
+ inline void setMaximumTries(int value)
170
+ { maximumTries_ = value;}
171
+ /// Get maximum number of times to enter
172
+ inline int maximumTries() const
173
+ { return maximumTries_;}
174
+
175
+ /// Get switches
176
+ inline int switches() const {
177
+ return switches_;
178
+ }
179
+ /// Set switches (for copying from virgin state)
180
+ inline void setSwitches(int value) {
181
+ switches_ = value;
182
+ }
183
+ /// Get whether the cut generator should be called in the normal place
184
+ inline bool normal() const {
185
+ return (switches_&1) != 0;
186
+ }
187
+ /// Set whether the cut generator should be called in the normal place
188
+ inline void setNormal(bool value) {
189
+ switches_ &= ~1;
190
+ switches_ |= value ? 1 : 0;
191
+ }
192
+ /// Get whether the cut generator should be called when a solution is found
193
+ inline bool atSolution() const {
194
+ return (switches_&2) != 0;
195
+ }
196
+ /// Set whether the cut generator should be called when a solution is found
197
+ inline void setAtSolution(bool value) {
198
+ switches_ &= ~2;
199
+ switches_ |= value ? 2 : 0;
200
+ }
201
+ /** Get whether the cut generator should be called when the subproblem is
202
+ found to be infeasible.
203
+ */
204
+ inline bool whenInfeasible() const {
205
+ return (switches_&4) != 0;
206
+ }
207
+ /** Set whether the cut generator should be called when the subproblem is
208
+ found to be infeasible.
209
+ */
210
+ inline void setWhenInfeasible(bool value) {
211
+ switches_ &= ~4;
212
+ switches_ |= value ? 4 : 0;
213
+ }
214
+ /// Get whether the cut generator is being timed
215
+ inline bool timing() const {
216
+ return (switches_&64) != 0;
217
+ }
218
+ /// Set whether the cut generator is being timed
219
+ inline void setTiming(bool value) {
220
+ switches_ &= ~64;
221
+ switches_ |= value ? 64 : 0;
222
+ timeInCutGenerator_ = 0.0;
223
+ }
224
+ /// Return time taken in cut generator
225
+ inline double timeInCutGenerator() const {
226
+ return timeInCutGenerator_;
227
+ }
228
+ inline void incrementTimeInCutGenerator(double value) {
229
+ timeInCutGenerator_ += value;
230
+ }
231
+ /// Get the \c CglCutGenerator corresponding to this \c CbcCutGenerator.
232
+ inline CglCutGenerator * generator() const {
233
+ return generator_;
234
+ }
235
+ /// Number times cut generator entered
236
+ inline int numberTimesEntered() const {
237
+ return numberTimes_;
238
+ }
239
+ inline void setNumberTimesEntered(int value) {
240
+ numberTimes_ = value;
241
+ }
242
+ inline void incrementNumberTimesEntered(int value = 1) {
243
+ numberTimes_ += value;
244
+ }
245
+ /// Total number of cuts added
246
+ inline int numberCutsInTotal() const {
247
+ return numberCuts_;
248
+ }
249
+ inline void setNumberCutsInTotal(int value) {
250
+ numberCuts_ = value;
251
+ }
252
+ inline void incrementNumberCutsInTotal(int value = 1) {
253
+ numberCuts_ += value;
254
+ }
255
+ /// Total number of elements added
256
+ inline int numberElementsInTotal() const {
257
+ return numberElements_;
258
+ }
259
+ inline void setNumberElementsInTotal(int value) {
260
+ numberElements_ = value;
261
+ }
262
+ inline void incrementNumberElementsInTotal(int value = 1) {
263
+ numberElements_ += value;
264
+ }
265
+ /// Total number of column cuts
266
+ inline int numberColumnCuts() const {
267
+ return numberColumnCuts_;
268
+ }
269
+ inline void setNumberColumnCuts(int value) {
270
+ numberColumnCuts_ = value;
271
+ }
272
+ inline void incrementNumberColumnCuts(int value = 1) {
273
+ numberColumnCuts_ += value;
274
+ }
275
+ /// Total number of cuts active after (at end of n cut passes at each node)
276
+ inline int numberCutsActive() const {
277
+ return numberCutsActive_;
278
+ }
279
+ inline void setNumberCutsActive(int value) {
280
+ numberCutsActive_ = value;
281
+ }
282
+ inline void incrementNumberCutsActive(int value = 1) {
283
+ numberCutsActive_ += value;
284
+ }
285
+ inline void setSwitchOffIfLessThan(int value) {
286
+ switchOffIfLessThan_ = value;
287
+ }
288
+ inline int switchOffIfLessThan() const {
289
+ return switchOffIfLessThan_;
290
+ }
291
+ /// Say if optimal basis needed
292
+ inline bool needsOptimalBasis() const {
293
+ return (switches_&128) != 0;
294
+ }
295
+ /// Set if optimal basis needed
296
+ inline void setNeedsOptimalBasis(bool yesNo) {
297
+ switches_ &= ~128;
298
+ switches_ |= yesNo ? 128 : 0;
299
+ }
300
+ /// Whether generator MUST be called again if any cuts (i.e. ignore break from loop)
301
+ inline bool mustCallAgain() const {
302
+ return (switches_&8) != 0;
303
+ }
304
+ /// Set whether generator MUST be called again if any cuts (i.e. ignore break from loop)
305
+ inline void setMustCallAgain(bool yesNo) {
306
+ switches_ &= ~8;
307
+ switches_ |= yesNo ? 8 : 0;
308
+ }
309
+ /// Whether generator switched off for moment
310
+ inline bool switchedOff() const {
311
+ return (switches_&16) != 0;
312
+ }
313
+ /// Set whether generator switched off for moment
314
+ inline void setSwitchedOff(bool yesNo) {
315
+ switches_ &= ~16;
316
+ switches_ |= yesNo ? 16 : 0;
317
+ }
318
+ /// Whether last round of cuts did little
319
+ inline bool ineffectualCuts() const {
320
+ return (switches_&512) != 0;
321
+ }
322
+ /// Set whether last round of cuts did little
323
+ inline void setIneffectualCuts(bool yesNo) {
324
+ switches_ &= ~512;
325
+ switches_ |= yesNo ? 512 : 0;
326
+ }
327
+ /// Whether to use if any cuts generated
328
+ inline bool whetherToUse() const {
329
+ return (switches_&1024) != 0;
330
+ }
331
+ /// Set whether to use if any cuts generated
332
+ inline void setWhetherToUse(bool yesNo) {
333
+ switches_ &= ~1024;
334
+ switches_ |= yesNo ? 1024 : 0;
335
+ }
336
+ /// Whether in must call again mode (or after others)
337
+ inline bool whetherInMustCallAgainMode() const {
338
+ return (switches_&2048) != 0;
339
+ }
340
+ /// Set whether in must call again mode (or after others)
341
+ inline void setWhetherInMustCallAgainMode(bool yesNo) {
342
+ switches_ &= ~2048;
343
+ switches_ |= yesNo ? 2048 : 0;
344
+ }
345
+ /// Whether to call at end
346
+ inline bool whetherCallAtEnd() const {
347
+ return (switches_&4096) != 0;
348
+ }
349
+ /// Set whether to call at end
350
+ inline void setWhetherCallAtEnd(bool yesNo) {
351
+ switches_ &= ~4096;
352
+ switches_ |= yesNo ? 4096 : 0;
353
+ }
354
+ /// Whether needs refresh on copy
355
+ inline bool needsRefresh() const {
356
+ return (switches_&8192) != 0;
357
+ }
358
+ /// Set whether needs refresh on copy
359
+ inline void setNeedsRefresh(bool yesNo) {
360
+ switches_ &= ~8192;
361
+ switches_ |= yesNo ? 8192 : 0;
362
+ }
363
+ /// Number of cuts generated at root
364
+ inline int numberCutsAtRoot() const {
365
+ return numberCutsAtRoot_;
366
+ }
367
+ inline void setNumberCutsAtRoot(int value) {
368
+ numberCutsAtRoot_ = value;
369
+ }
370
+ /// Number of cuts active at root
371
+ inline int numberActiveCutsAtRoot() const {
372
+ return numberActiveCutsAtRoot_;
373
+ }
374
+ inline void setNumberActiveCutsAtRoot(int value) {
375
+ numberActiveCutsAtRoot_ = value;
376
+ }
377
+ /// Number of short cuts at root
378
+ inline int numberShortCutsAtRoot() const {
379
+ return numberShortCutsAtRoot_;
380
+ }
381
+ inline void setNumberShortCutsAtRoot(int value) {
382
+ numberShortCutsAtRoot_ = value;
383
+ }
384
+ /// Set model
385
+ inline void setModel(CbcModel * model) {
386
+ model_ = model;
387
+ }
388
+ /// Whether global cuts at root
389
+ inline bool globalCutsAtRoot() const {
390
+ return (switches_&32) != 0;
391
+ }
392
+ /// Set whether global cuts at root
393
+ inline void setGlobalCutsAtRoot(bool yesNo) {
394
+ switches_ &= ~32;
395
+ switches_ |= yesNo ? 32 : 0;
396
+ }
397
+ /// Whether global cuts
398
+ inline bool globalCuts() const {
399
+ return (switches_&256) != 0;
400
+ }
401
+ /// Set whether global cuts
402
+ inline void setGlobalCuts(bool yesNo) {
403
+ switches_ &= ~256;
404
+ switches_ |= yesNo ? 256 : 0;
405
+ }
406
+ /// Add in statistics from other
407
+ void addStatistics(const CbcCutGenerator * other);
408
+ /// Scale back statistics by factor
409
+ void scaleBackStatistics(int factor);
410
+ //@}
411
+
412
+ private:
413
+ /**@name Private gets and sets */
414
+ //@{
415
+ //@}
416
+ /// Saved cuts
417
+ OsiCuts savedCuts_;
418
+ /// Time in cut generator
419
+ double timeInCutGenerator_;
420
+ /// The client model
421
+ CbcModel *model_;
422
+
423
+ // The CglCutGenerator object
424
+ CglCutGenerator * generator_;
425
+
426
+ /// Name of generator
427
+ char * generatorName_;
428
+
429
+ /** Number of nodes between calls to the CglCutGenerator::generateCuts
430
+ routine.
431
+ */
432
+ int whenCutGenerator_;
433
+ /** Number of nodes between calls to the CglCutGenerator::generateCuts
434
+ routine in sub tree.
435
+ */
436
+ int whenCutGeneratorInSub_;
437
+ /** If first pass at root produces fewer than this cuts then switch off
438
+ */
439
+ int switchOffIfLessThan_;
440
+
441
+ /** Depth at which to call the CglCutGenerator::generateCuts
442
+ routine (If >0 then overrides when and is called if depth%depthCutGenerator==0).
443
+ */
444
+ int depthCutGenerator_;
445
+
446
+ /** Depth at which to call the CglCutGenerator::generateCuts
447
+ routine (If >0 then overrides when and is called if depth%depthCutGenerator==0).
448
+ In sub tree.
449
+ */
450
+ int depthCutGeneratorInSub_;
451
+
452
+ /// Level of cut inaccuracy (0 means exact e.g. cliques)
453
+ int inaccuracy_;
454
+ /// Number times cut generator entered
455
+ int numberTimes_;
456
+ /// Total number of cuts added
457
+ int numberCuts_;
458
+ /// Total number of elements added
459
+ int numberElements_;
460
+ /// Total number of column cuts added
461
+ int numberColumnCuts_;
462
+ /// Total number of cuts active after (at end of n cut passes at each node)
463
+ int numberCutsActive_;
464
+ /// Number of cuts generated at root
465
+ int numberCutsAtRoot_;
466
+ /// Number of cuts active at root
467
+ int numberActiveCutsAtRoot_;
468
+ /// Number of short cuts at root
469
+ int numberShortCutsAtRoot_;
470
+ /// Switches - see gets and sets
471
+ int switches_;
472
+ /// Maximum number of times to enter
473
+ int maximumTries_;
474
+ };
475
+
476
+ // How often to do if mostly switched off (A)
477
+ # define SCANCUTS 1000
478
+ // How often to do if mostly switched off (probing B)
479
+ # define SCANCUTS_PROBING 1000
480
+
481
+ #endif
482
+
@@ -0,0 +1,57 @@
1
+ // $Id: CbcCutModifier.hpp 1899 2013-04-09 18:12:08Z stefan $
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
+ //Edwin 11/25/09 carved out of CbcCutGenerator
7
+
8
+ #ifndef CbcCutModifier_H
9
+ #define CbcCutModifier_H
10
+
11
+ #include "OsiSolverInterface.hpp"
12
+ #include "OsiCuts.hpp"
13
+ #include "CglCutGenerator.hpp"
14
+
15
+ class CbcModel;
16
+ class OsiRowCut;
17
+ class OsiRowCutDebugger;
18
+ /** Abstract cut modifier base class
19
+
20
+ In exotic circumstances - cuts may need to be modified
21
+ a) strengthened - changed
22
+ b) weakened - changed
23
+ c) deleted - set to NULL
24
+ d) unchanged
25
+ */
26
+
27
+ class CbcCutModifier {
28
+ public:
29
+ /// Default Constructor
30
+ CbcCutModifier ();
31
+
32
+ // Copy constructor
33
+ CbcCutModifier ( const CbcCutModifier &);
34
+
35
+ /// Destructor
36
+ virtual ~CbcCutModifier();
37
+
38
+ /// Assignment
39
+ CbcCutModifier & operator=(const CbcCutModifier& rhs);
40
+ /// Clone
41
+ virtual CbcCutModifier * clone() const = 0;
42
+
43
+ /** Returns
44
+ 0 unchanged
45
+ 1 strengthened
46
+ 2 weakened
47
+ 3 deleted
48
+ */
49
+ virtual int modify(const OsiSolverInterface * solver, OsiRowCut & cut) = 0;
50
+ /// Create C++ lines to get to current state
51
+ virtual void generateCpp( FILE * ) {}
52
+ protected:
53
+
54
+ };
55
+
56
+ #endif //CbcCutModifier_H
57
+
@@ -0,0 +1,66 @@
1
+ // $Id: CbcCutSubsetModifier.hpp 1899 2013-04-09 18:12:08Z stefan $
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
+ //Edwin 11/25/09 carved out of CbcCutGenerator
7
+
8
+ #ifndef CbcCutSubsetModifier_H
9
+ #define CbcCutSubsetModifier_H
10
+
11
+ #include "OsiSolverInterface.hpp"
12
+ #include "OsiCuts.hpp"
13
+ #include "CglCutGenerator.hpp"
14
+ #include "CbcCutModifier.hpp"
15
+
16
+ class CbcModel;
17
+ class OsiRowCut;
18
+ class OsiRowCutDebugger;
19
+ /** Simple cut modifier base class
20
+
21
+ In exotic circumstances - cuts may need to be modified
22
+ a) strengthened - changed
23
+ b) weakened - changed
24
+ c) deleted - set to NULL
25
+ d) unchanged
26
+
27
+ initially get rid of cuts with variables >= k
28
+ could weaken
29
+ */
30
+
31
+ class CbcCutSubsetModifier : public CbcCutModifier {
32
+ public:
33
+ /// Default Constructor
34
+ CbcCutSubsetModifier ();
35
+
36
+ /// Useful Constructor
37
+ CbcCutSubsetModifier (int firstOdd);
38
+
39
+ // Copy constructor
40
+ CbcCutSubsetModifier ( const CbcCutSubsetModifier &);
41
+
42
+ /// Destructor
43
+ virtual ~CbcCutSubsetModifier();
44
+
45
+ /// Assignment
46
+ CbcCutSubsetModifier & operator=(const CbcCutSubsetModifier& rhs);
47
+ /// Clone
48
+ virtual CbcCutModifier * clone() const ;
49
+
50
+ /** Returns
51
+ 0 unchanged
52
+ 1 strengthened
53
+ 2 weakened
54
+ 3 deleted
55
+ */
56
+ virtual int modify(const OsiSolverInterface * solver, OsiRowCut & cut) ;
57
+ /// Create C++ lines to get to current state
58
+ virtual void generateCpp( FILE * ) {}
59
+ protected:
60
+ /// data
61
+ /// First odd variable
62
+ int firstOdd_;
63
+ };
64
+
65
+ #endif //CbcCutSubsetModifier_H
66
+
@@ -0,0 +1,83 @@
1
+ // $Id: CbcDummyBranchingObject.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 CbcDummyBranchingObject_H
9
+ #define CbcDummyBranchingObject_H
10
+
11
+ #include "CbcBranchBase.hpp"
12
+ /** Dummy branching object
13
+
14
+ This object specifies a one-way dummy branch.
15
+ This is so one can carry on branching even when it looks feasible
16
+ */
17
+
18
+ class CbcDummyBranchingObject : public CbcBranchingObject {
19
+
20
+ public:
21
+
22
+ /// Default constructor
23
+ CbcDummyBranchingObject (CbcModel * model = NULL);
24
+
25
+ /// Copy constructor
26
+ CbcDummyBranchingObject ( const CbcDummyBranchingObject &);
27
+
28
+ /// Assignment operator
29
+ CbcDummyBranchingObject & operator= (const CbcDummyBranchingObject& rhs);
30
+
31
+ /// Clone
32
+ virtual CbcBranchingObject * clone() const;
33
+
34
+ /// Destructor
35
+ virtual ~CbcDummyBranchingObject ();
36
+
37
+ using CbcBranchingObject::branch ;
38
+ /** \brief Dummy branch
39
+ */
40
+ virtual double branch();
41
+
42
+ #ifdef JJF_ZERO
43
+ // No need to override. Default works fine.
44
+ /** Reset every information so that the branching object appears to point to
45
+ the previous child. This method does not need to modify anything in any
46
+ solver. */
47
+ virtual void previousBranch();
48
+ #endif
49
+
50
+ using CbcBranchingObject::print ;
51
+ /** \brief Print something about branch - only if log level high
52
+ */
53
+ virtual void print();
54
+
55
+ /** Return the type (an integer identifier) of \c this */
56
+ virtual CbcBranchObjType type() const {
57
+ return DummyBranchObj;
58
+ }
59
+
60
+ /** Compare the original object of \c this with the original object of \c
61
+ brObj. Assumes that there is an ordering of the original objects.
62
+ This method should be invoked only if \c this and brObj are of the same
63
+ type.
64
+ Return negative/0/positive depending on whether \c this is
65
+ smaller/same/larger than the argument.
66
+ */
67
+ virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
68
+
69
+ /** Compare the \c this with \c brObj. \c this and \c brObj must be os the
70
+ same type and must have the same original object, but they may have
71
+ different feasible regions.
72
+ Return the appropriate CbcRangeCompare value (first argument being the
73
+ sub/superset if that's the case). In case of overlap (and if \c
74
+ replaceIfOverlap is true) replace the current branching object with one
75
+ whose feasible region is the overlap.
76
+ */
77
+ virtual CbcRangeCompare compareBranchingObject
78
+ (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
79
+
80
+ };
81
+
82
+ #endif
83
+