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,308 @@
1
+ // $Id: CglClique.hpp 1119 2013-04-06 20:24:18Z stefan $
2
+ // Copyright (C) 2000, 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 _CglClique_h_
7
+ #define _CglClique_h_
8
+
9
+ #include "CglCutGenerator.hpp"
10
+
11
+ //class OsiCuts;
12
+ //class OsiSolverInterface;
13
+
14
+ class CglClique : public CglCutGenerator {
15
+
16
+ friend void CglCliqueUnitTest(const OsiSolverInterface * siP,
17
+ const std::string mpdDir );
18
+ public:
19
+ /// Copy constructor
20
+ CglClique(const CglClique& rhs);
21
+ /// Clone
22
+ virtual CglCutGenerator * clone() const;
23
+
24
+ /// Assignment operator
25
+ CglClique& operator=(const CglClique& rhs);
26
+
27
+ public:
28
+
29
+ virtual void
30
+ generateCuts(const OsiSolverInterface& si, OsiCuts & cs,
31
+ const CglTreeInfo info = CglTreeInfo());
32
+
33
+ /**@name Constructors and destructors */
34
+ //@{
35
+ /** Default constructor.
36
+ If the setPacking argument is set to true then CglClique will assume that the
37
+ problem in the solverinterface passed to the generateCuts() method
38
+ describes a set packing problem, i.e.,
39
+ - all variables are binary
40
+ - the matrix is a 0-1 matrix
41
+ - all constraints are '= 1' or '<= 1'
42
+
43
+ Otherwise the user can use the considerRows() method to set the list of
44
+ clique rows, that is,
45
+ - all coeffs corresponding to binary variables at fractional level is 1
46
+ - all other coeffs are non-negative
47
+ - the constraint is '= 1' or '<= 1'.
48
+
49
+ If the user does not set the list of clique rows then CglClique will
50
+ start the generateCuts() methods by scanning the matrix for them.
51
+ Also justOriginalRows can be set to true to limit clique creation
52
+ */
53
+ CglClique(bool setPacking = false, bool justOriginalRows = false);
54
+ /// Destructor
55
+ virtual ~CglClique() {}
56
+ /// Create C++ lines to get to current state
57
+ virtual std::string generateCpp( FILE * fp);
58
+
59
+ void considerRows(const int numRows, const int* rowInd);
60
+
61
+ public:
62
+ /** possible choices for selecting the next node in the star clique search
63
+ */
64
+ enum scl_next_node_method {
65
+ SCL_MIN_DEGREE,
66
+ SCL_MAX_DEGREE,
67
+ SCL_MAX_XJ_MAX_DEG
68
+ };
69
+
70
+ void setStarCliqueNextNodeMethod(scl_next_node_method method) {
71
+ scl_next_node_rule = method;
72
+ }
73
+
74
+ void setStarCliqueCandidateLengthThreshold(int maxlen) {
75
+ scl_candidate_length_threshold = maxlen;
76
+ }
77
+ void setRowCliqueCandidateLengthThreshold(int maxlen) {
78
+ rcl_candidate_length_threshold = maxlen;
79
+ }
80
+
81
+ void setStarCliqueReport(bool yesno = true) { scl_report_result = yesno; }
82
+ void setRowCliqueReport(bool yesno = true) { rcl_report_result = yesno; }
83
+
84
+ void setDoStarClique(bool yesno = true) { do_star_clique = yesno; }
85
+ void setDoRowClique(bool yesno = true) { do_row_clique = yesno; }
86
+
87
+ void setMinViolation(double minviol) { petol = minviol; }
88
+ double getMinViolation() const { return petol; }
89
+
90
+ private:
91
+
92
+ struct frac_graph ;
93
+ friend struct frac_graph ;
94
+
95
+ /** A node of the fractional graph. There is a node for every variable at
96
+ fractional level. */
97
+ struct fnode {
98
+ /** pointer into all_nbr */
99
+ int *nbrs;
100
+ /** 1-x_i-x_j, needed for odd holes, in the same order as the adj list,
101
+ pointer into all_edgecost */
102
+ double *edgecosts;
103
+ /** degree of the node */
104
+ int degree;
105
+ /** the fractional value of the variable corresponding to this node */
106
+ double val;
107
+ };
108
+
109
+ /** A graph corresponding to a fractional solution of an LP. Two nodes are
110
+ adjacent iff their columns are non-orthogonal. */
111
+ struct frac_graph {
112
+ /** # of nodes = # of fractional values in the LP solution */
113
+ int nodenum;
114
+ /** # of edges in the graph */
115
+ int edgenum;
116
+ /** density= edgenum/(nodenum choose 2) */
117
+ double density;
118
+ int min_deg_node;
119
+ int min_degree;
120
+ int max_deg_node;
121
+ int max_degree;
122
+ /** The array of the nodes in the graph */
123
+ fnode *nodes;
124
+ /** The array of all the neighbors. First the indices of the nodes
125
+ adjacent to node 0 are listed, then those adjacent to node 1, etc. */
126
+ int *all_nbr;
127
+ /** The array of the costs of the edges going to the neighbors */
128
+ double *all_edgecost;
129
+
130
+ frac_graph() :
131
+ nodenum(0), edgenum(0), density(0),
132
+ min_deg_node(0), min_degree(0), max_deg_node(0), max_degree(0),
133
+ nodes(0), all_nbr(0), all_edgecost(0) {}
134
+ };
135
+
136
+ protected:
137
+ /** An indicator showing whether the whole matrix in the solverinterface is
138
+ a set packing problem or not */
139
+ bool setPacking_;
140
+ /// True if just look at original rows
141
+ bool justOriginalRows_;
142
+ /** pieces of the set packing part of the solverinterface */
143
+ int sp_numrows;
144
+ int* sp_orig_row_ind;
145
+ int sp_numcols;
146
+ int* sp_orig_col_ind;
147
+ double* sp_colsol;
148
+ int* sp_col_start;
149
+ int* sp_col_ind;
150
+ int* sp_row_start;
151
+ int* sp_row_ind;
152
+
153
+ /** the intersection graph corresponding to the set packing problem */
154
+ frac_graph fgraph;
155
+ /** the node-node incidence matrix of the intersection graph. */
156
+ bool* node_node;
157
+
158
+ /** The primal tolerance in the solverinterface. */
159
+ double petol;
160
+
161
+ /** data for the star clique algorithm */
162
+
163
+ /** Parameters */
164
+ /**@{*/
165
+ /** whether to do the row clique algorithm or not. */
166
+ bool do_row_clique;
167
+ /** whether to do the star clique algorithm or not. */
168
+ bool do_star_clique;
169
+
170
+ /** How the next node to be added to the star clique should be selected */
171
+ scl_next_node_method scl_next_node_rule;
172
+ /** In the star clique method the maximal length of the candidate list
173
+ (those nodes that are in a star, i.e., connected to the center of the
174
+ star) to allow complete enumeration of maximal cliques. Otherwise a
175
+ greedy algorithm is used. */
176
+ int scl_candidate_length_threshold;
177
+ /** whether to give a detailed statistics on the star clique method */
178
+ bool scl_report_result;
179
+
180
+ /** In the row clique method the maximal length of the candidate list
181
+ (those nodes that can extend the row clique, i.e., connected to all
182
+ nodes in the row clique) to allow complete enumeration of maximal
183
+ cliques. Otherwise a greedy algorithm is used. */
184
+ int rcl_candidate_length_threshold;
185
+ /** whether to give a detailed statistics on the row clique method */
186
+ bool rcl_report_result;
187
+ /**@}*/
188
+
189
+ /** variables/arrays that are used across many methods */
190
+ /**@{*/
191
+ /** List of indices that must be in the to be created clique. This is just
192
+ a pointer, it is never new'd and therefore does not need to be
193
+ delete[]'d either. */
194
+ const int* cl_perm_indices;
195
+ /** The length of cl_perm_indices */
196
+ int cl_perm_length;
197
+
198
+ /** List of indices that should be considered for extending the ones listed
199
+ in cl_perm_indices. */
200
+ int* cl_indices;
201
+ /** The length of cl_indices */
202
+ int cl_length;
203
+
204
+ /** An array of nodes discarded from the candidate list. These are
205
+ rechecked when a maximal clique is found just to make sure that the
206
+ clique is really maximal. */
207
+ int* cl_del_indices;
208
+ /** The length of cl_del_indices */
209
+ int cl_del_length;
210
+
211
+ /**@}*/
212
+
213
+ private:
214
+ /** Scan through the variables and select those that are binary and are at
215
+ a fractional level. */
216
+ void selectFractionalBinaries(const OsiSolverInterface& si);
217
+ /** Scan through the variables and select those that are at a fractional
218
+ level. We already know that everything is binary. */
219
+ void selectFractionals(const OsiSolverInterface& si);
220
+ /** */
221
+ void selectRowCliques(const OsiSolverInterface& si,int numOriginalRows);
222
+ /** */
223
+ void createSetPackingSubMatrix(const OsiSolverInterface& si);
224
+ /** */
225
+ void createFractionalGraph();
226
+ /** */
227
+ int createNodeNode();
228
+ /** */
229
+ void deleteSetPackingSubMatrix();
230
+ /** */
231
+ void deleteFractionalGraph();
232
+ /** */
233
+ void find_scl(OsiCuts& cs);
234
+ /** */
235
+ void find_rcl(OsiCuts& cs);
236
+ /** */
237
+ int scl_choose_next_node(const int current_nodenum,
238
+ const int *current_indices,
239
+ const int *current_degrees,
240
+ const double *current_values);
241
+ /** */
242
+ void scl_delete_node(const int del_ind, int& current_nodenum,
243
+ int *current_indices, int *current_degrees,
244
+ double *current_values);
245
+ /** */
246
+ int enumerate_maximal_cliques(int& pos, bool* scl_label, OsiCuts& cs);
247
+ /** */
248
+ int greedy_maximal_clique(OsiCuts& cs);
249
+ /** */
250
+ void recordClique(const int len, int* indices, OsiCuts& cs);
251
+ };
252
+ //#############################################################################
253
+ /** A function that tests the methods in the CglClique class. The
254
+ only reason for it not to be a member method is that this way it doesn't
255
+ have to be compiled into the library. And that's a gain, because the
256
+ library should be compiled with optimization on, but this method should be
257
+ compiled with debugging. */
258
+ void CglCliqueUnitTest(const OsiSolverInterface * siP,
259
+ const std::string mpdDir);
260
+ /// This works on a fake solver i.e. invented rows
261
+ class CglProbing;
262
+ class CglFakeClique : public CglClique {
263
+
264
+ public:
265
+ /// Copy constructor
266
+ CglFakeClique(const CglFakeClique& rhs);
267
+ /// Clone
268
+ virtual CglCutGenerator * clone() const;
269
+
270
+ /// Assignment operator
271
+ CglFakeClique& operator=(const CglFakeClique& rhs);
272
+
273
+ virtual void
274
+ generateCuts(const OsiSolverInterface& si, OsiCuts & cs,
275
+ const CglTreeInfo info = CglTreeInfo());
276
+
277
+ /**@name Constructors and destructors */
278
+ //@{
279
+ /** Default constructor.
280
+ If the setPacking argument is set to true then CglFakeClique will assume that the
281
+ problem in the solverinterface passed to the generateCuts() method
282
+ describes a set packing problem, i.e.,
283
+ - all variables are binary
284
+ - the matrix is a 0-1 matrix
285
+ - all constraints are '= 1' or '<= 1'
286
+
287
+ Otherwise the user can use the considerRows() method to set the list of
288
+ clique rows, that is,
289
+ - all coeffs corresponding to binary variables at fractional level is 1
290
+ - all other coeffs are non-negative
291
+ - the constraint is '= 1' or '<= 1'.
292
+
293
+ If the user does not set the list of clique rows then CglFakeClique will
294
+ start the generateCuts() methods by scanning the matrix for them.
295
+ */
296
+ CglFakeClique(OsiSolverInterface * solver=NULL,bool setPacking = false);
297
+ /// Destructor
298
+ virtual ~CglFakeClique();
299
+ /// Assign solver (generator takes over ownership)
300
+ void assignSolver(OsiSolverInterface * fakeSolver);
301
+ protected:
302
+ /// fake solver to use
303
+ OsiSolverInterface * fakeSolver_;
304
+ /// Probing object
305
+ CglProbing * probing_;
306
+ };
307
+
308
+ #endif
@@ -0,0 +1,19 @@
1
+ /* src/config_cgl.h. Generated by configure. */
2
+ /* src/config_cgl.h.in. */
3
+
4
+ #ifndef __CONFIG_CGL_H__
5
+ #define __CONFIG_CGL_H__
6
+
7
+ /* Version number of project */
8
+ #define CGL_VERSION "0.59.7"
9
+
10
+ /* Major Version number of project */
11
+ #define CGL_VERSION_MAJOR 0
12
+
13
+ /* Minor Version number of project */
14
+ #define CGL_VERSION_MINOR 59
15
+
16
+ /* Release Version number of project */
17
+ #define CGL_VERSION_RELEASE 7
18
+
19
+ #endif
@@ -0,0 +1,121 @@
1
+ // Copyright (C) 2000, International Business Machines
2
+ // Corporation and others. All Rights Reserved.
3
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
4
+
5
+ #ifndef CglCutGenerator_H
6
+ #define CglCutGenerator_H
7
+
8
+ #include "OsiCuts.hpp"
9
+ #include "OsiSolverInterface.hpp"
10
+ #include "CglTreeInfo.hpp"
11
+
12
+ //-------------------------------------------------------------------
13
+ //
14
+ // Abstract base class for generating cuts.
15
+ //
16
+ //-------------------------------------------------------------------
17
+ ///
18
+ /** Cut Generator Base Class
19
+
20
+ This is an abstract base class for generating cuts. A specific cut
21
+ generator will inherit from this class.
22
+ */
23
+ class CglCutGenerator {
24
+
25
+ public:
26
+
27
+ /**@name Generate Cuts */
28
+ //@{
29
+ /** Generate cuts for the model data contained in si.
30
+ The generated cuts are inserted into and returned in the
31
+ collection of cuts cs.
32
+ */
33
+ virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
34
+ const CglTreeInfo info = CglTreeInfo())=0;
35
+ //@}
36
+
37
+
38
+ /**@name Constructors and destructors */
39
+ //@{
40
+ /// Default constructor
41
+ CglCutGenerator ();
42
+
43
+ /// Copy constructor
44
+ CglCutGenerator ( const CglCutGenerator &);
45
+
46
+ /// Clone
47
+ virtual CglCutGenerator * clone() const = 0;
48
+
49
+ /// Assignment operator
50
+ CglCutGenerator & operator=(const CglCutGenerator& rhs);
51
+
52
+ /// Destructor
53
+ virtual ~CglCutGenerator ();
54
+
55
+ /** Create C++ lines to set the generator in the current state.
56
+ The output must be parsed by the calling code, as each line
57
+ starts with a key indicating the following:<BR>
58
+ 0: must be kept (for #includes etc)<BR>
59
+ 3: Set to changed (not default) values<BR>
60
+ 4: Set to default values (redundant)<BR>
61
+
62
+ Keys 1, 2, 5, 6, 7, 8 are defined, but not applicable to
63
+ cut generators.
64
+ */
65
+ virtual std::string generateCpp( FILE * ) {return "";}
66
+
67
+ /// This can be used to refresh any information
68
+ virtual void refreshSolver(OsiSolverInterface * ) {}
69
+ //@}
70
+
71
+ /**@name Gets and Sets */
72
+ //@{
73
+ /**
74
+ Get Aggressiveness - 0 = neutral, 100 is normal root node.
75
+ Really just a hint to cut generator
76
+ */
77
+ inline int getAggressiveness() const
78
+ { return aggressive_;}
79
+
80
+ /**
81
+ Set Aggressiveness - 0 = neutral, 100 is normal root node.
82
+ Really just a hint to cut generator
83
+ */
84
+ inline void setAggressiveness(int value)
85
+ { aggressive_=value;}
86
+ /// Set whether can do global cuts
87
+ inline void setGlobalCuts(bool trueOrFalse)
88
+ { canDoGlobalCuts_ = trueOrFalse;}
89
+ /// Say whether can do global cuts
90
+ inline bool canDoGlobalCuts() const
91
+ {return canDoGlobalCuts_;}
92
+ /**
93
+ Returns true if may generate Row cuts in tree (rather than root node).
94
+ Used so know if matrix will change in tree. Really
95
+ meant so column cut generators can still be active
96
+ without worrying code.
97
+ Default is true
98
+ */
99
+ virtual bool mayGenerateRowCutsInTree() const;
100
+ /// Return true if needs optimal basis to do cuts
101
+ virtual bool needsOptimalBasis() const;
102
+ /// Return maximum length of cut in tree
103
+ virtual int maximumLengthOfCutInTree() const
104
+ { return COIN_INT_MAX;}
105
+ //@}
106
+
107
+ // test this class
108
+ //static void unitTest();
109
+
110
+ // private:
111
+
112
+ /**
113
+ Aggressiveness - 0 = neutral, 100 is normal root node.
114
+ Really just a hint to cut generator
115
+ */
116
+ int aggressive_;
117
+ /// True if can do global cuts i.e. no general integers
118
+ bool canDoGlobalCuts_;
119
+ };
120
+
121
+ #endif
@@ -0,0 +1,189 @@
1
+ // $Id: CglDuplicateRow.hpp 1119 2013-04-06 20:24:18Z stefan $
2
+ // Copyright (C) 2004, International Business Machines
3
+ // Corporation and others. All Rights Reserved.
4
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
5
+
6
+ #ifndef CglDuplicateRow_H
7
+ #define CglDuplicateRow_H
8
+
9
+ #include <string>
10
+
11
+ #include "CglCutGenerator.hpp"
12
+ class CglStored;
13
+
14
+ /** DuplicateRow Cut Generator Class */
15
+ class CglDuplicateRow : public CglCutGenerator {
16
+
17
+ public:
18
+
19
+
20
+ /**@name Generate Cuts */
21
+ //@{
22
+ /** Fix variables and find duplicate/dominated rows for the model of the
23
+ solver interface, si.
24
+
25
+ This is a very simple minded idea but I (JJF) am using it in a project so thought
26
+ I might as well add it. It should really be called before first solve and I may
27
+ modify CBC to allow for that.
28
+
29
+ This is designed for problems with few rows and many integer variables where the rhs
30
+ are <= or == and all coefficients and rhs are small integers.
31
+
32
+ If effective rhs is K then we can fix all variables with coefficients > K to their lower bounds
33
+ (effective rhs just means original with variables with nonzero lower bounds subtracted out).
34
+
35
+ If one row is a subset of another and the effective rhs are same we can fix some variables
36
+ and then the two rows are identical.
37
+
38
+ The generator marks identical rows so can be taken out in solve
39
+ */
40
+ virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
41
+ const CglTreeInfo info = CglTreeInfo());
42
+ private:
43
+ /// Does work for modes 1,2
44
+ void generateCuts12( const OsiSolverInterface & si, OsiCuts & cs,
45
+ const CglTreeInfo info = CglTreeInfo());
46
+ /// Does work for mode 4
47
+ void generateCuts4( const OsiSolverInterface & si, OsiCuts & cs,
48
+ const CglTreeInfo info = CglTreeInfo());
49
+ /// Does work for mode 8
50
+ void generateCuts8( const OsiSolverInterface & si, OsiCuts & cs,
51
+ const CglTreeInfo info = CglTreeInfo());
52
+ public:
53
+ /** Fix variables and find duplicate/dominated rows for the model of the
54
+ solver interface, si.
55
+
56
+ This is a very simple minded idea but I (JJF) am using it in a project so thought
57
+ I might as well add it. It should really be called before first solve and I may
58
+ modify CBC to allow for that.
59
+
60
+ This is designed for problems with few rows and many integer variables where the rhs
61
+ are <= or == and all coefficients and rhs are small integers.
62
+
63
+ If effective rhs is K then we can fix all variables with coefficients > K to their lower bounds
64
+ (effective rhs just means original with variables with nonzero lower bounds subtracted out).
65
+
66
+ If one row is a subset of another and the effective rhs are same we can fix some variables
67
+ and then the two rows are identical.
68
+
69
+ This version does deletions and fixings and may return stored cuts for
70
+ dominated columns
71
+ */
72
+ CglStored * outDuplicates( OsiSolverInterface * solver);
73
+
74
+ //@}
75
+
76
+ /**@name Get information on size of problem */
77
+ //@{
78
+ /// Get duplicate row list, -1 means still in, -2 means out (all fixed), k>= means same as row k
79
+ inline const int * duplicate() const
80
+ { return duplicate_;}
81
+ /// Size of dynamic program
82
+ inline int sizeDynamic() const
83
+ { return sizeDynamic_;}
84
+ /// Number of rows in original problem
85
+ inline int numberOriginalRows() const
86
+ { return matrix_.getNumRows();}
87
+ //@}
88
+
89
+ /**@name Get information on size of problem */
90
+ //@{
91
+ /// logLevel
92
+ inline int logLevel() const
93
+ { return logLevel_;}
94
+ inline void setLogLevel(int value)
95
+ { logLevel_ = value;}
96
+ //@}
97
+
98
+
99
+ /**@name We only check for duplicates amongst rows with effective rhs <= this */
100
+ //@{
101
+ /// Get
102
+ inline int maximumRhs() const
103
+ { return maximumRhs_;}
104
+ /// Set
105
+ inline void setMaximumRhs(int value)
106
+ { maximumRhs_=value;}
107
+ //@}
108
+
109
+ /**@name We only check for dominated amongst groups of columns whose size <= this */
110
+ //@{
111
+ /// Get
112
+ inline int maximumDominated() const
113
+ { return maximumDominated_;}
114
+ /// Set
115
+ inline void setMaximumDominated(int value)
116
+ { maximumDominated_=value;}
117
+ //@}
118
+ /**@name gets and sets */
119
+ //@{
120
+ /// Get mode
121
+ inline int mode() const
122
+ { return mode_;}
123
+ /// Set mode
124
+ inline void setMode(int value)
125
+ { mode_=value;}
126
+ //@}
127
+
128
+ /**@name Constructors and destructors */
129
+ //@{
130
+ /// Default constructor
131
+ CglDuplicateRow ();
132
+
133
+ /// Useful constructor
134
+ CglDuplicateRow (OsiSolverInterface * solver);
135
+
136
+ /// Copy constructor
137
+ CglDuplicateRow (
138
+ const CglDuplicateRow & rhs);
139
+
140
+ /// Clone
141
+ virtual CglCutGenerator * clone() const;
142
+
143
+ /// Assignment operator
144
+ CglDuplicateRow &
145
+ operator=(
146
+ const CglDuplicateRow& rhs);
147
+
148
+ /// Destructor
149
+ virtual
150
+ ~CglDuplicateRow ();
151
+ /// Create C++ lines to get to current state
152
+ virtual std::string generateCpp( FILE * fp);
153
+
154
+ /// This can be used to refresh any information
155
+ virtual void refreshSolver(OsiSolverInterface * solver);
156
+ //@}
157
+
158
+ protected:
159
+
160
+
161
+ // Protected member data
162
+
163
+ /**@name Protected member data */
164
+ //@{
165
+ /// Matrix
166
+ CoinPackedMatrix matrix_;
167
+ /// Matrix by row
168
+ CoinPackedMatrix matrixByRow_;
169
+ /// Possible rhs (if 0 then not possible)
170
+ int * rhs_;
171
+ /// Marks duplicate rows
172
+ int * duplicate_;
173
+ /// To allow for <= rows
174
+ int * lower_;
175
+ /// Stored cuts if we found dominance cuts
176
+ CglStored * storedCuts_;
177
+ /// Check dominated columns if less than this number of candidates
178
+ int maximumDominated_;
179
+ /// Check duplicates if effective rhs <= this
180
+ int maximumRhs_;
181
+ /// Size of dynamic program
182
+ int sizeDynamic_;
183
+ /// 1 do rows, 2 do columns, 3 do both
184
+ int mode_;
185
+ /// Controls print out
186
+ int logLevel_;
187
+ //@}
188
+ };
189
+ #endif