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,252 @@
1
+ // Copyright (C) 2003, 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 OsiPresolve_H
6
+ #define OsiPresolve_H
7
+ #include "OsiSolverInterface.hpp"
8
+
9
+ class CoinPresolveAction;
10
+ #include "CoinPresolveMatrix.hpp"
11
+
12
+
13
+ /*! \class OsiPresolve
14
+ \brief OSI interface to COIN problem simplification capabilities
15
+
16
+ COIN provides a number of classes which implement problem simplification
17
+ algorithms (CoinPresolveAction, CoinPrePostsolveMatrix, and derived
18
+ classes). The model of operation is as follows:
19
+ <ul>
20
+ <li>
21
+ Create a copy of the original problem.
22
+ </li>
23
+ <li>
24
+ Subject the copy to a series of transformations (the <i>presolve</i>
25
+ methods) to produce a presolved model. Each transformation is also
26
+ expected to provide a method to reverse the transformation (the
27
+ <i>postsolve</i> method). The postsolve methods are collected in a
28
+ linked list; the postsolve method for the final presolve transformation
29
+ is at the head of the list.
30
+ </li>
31
+ <li>
32
+ Hand the presolved problem to the solver for optimization.
33
+ </li>
34
+ <li>
35
+ Apply the collected postsolve methods to the presolved problem
36
+ and solution, restating the solution in terms of the original problem.
37
+ </li>
38
+ </ul>
39
+
40
+ The COIN presolve algorithms are unaware of OSI. The OsiPresolve class takes
41
+ care of the interface. Given an OsiSolverInterface \c origModel, it will take
42
+ care of creating a clone properly loaded with the presolved problem and ready
43
+ for optimization. After optimization, it will apply postsolve
44
+ transformations and load the result back into \c origModel.
45
+
46
+ Assuming a problem has been loaded into an
47
+ \c OsiSolverInterface \c origModel, a bare-bones application looks like this:
48
+ \code
49
+ OsiPresolve pinfo ;
50
+ OsiSolverInterface *presolvedModel ;
51
+ // Return an OsiSolverInterface loaded with the presolved problem.
52
+ presolvedModel = pinfo.presolvedModel(*origModel,1.0e-8,false,numberPasses) ;
53
+ presolvedModel->initialSolve() ;
54
+ // Restate the solution and load it back into origModel.
55
+ pinfo.postsolve(true) ;
56
+ delete presolvedModel ;
57
+ \endcode
58
+ */
59
+
60
+
61
+
62
+ class OsiPresolve {
63
+ public:
64
+ /// Default constructor (empty object)
65
+ OsiPresolve();
66
+
67
+ /// Virtual destructor
68
+ virtual ~OsiPresolve();
69
+
70
+ /*! \brief Create a new OsiSolverInterface loaded with the presolved problem.
71
+
72
+ This method implements the first two steps described in the class
73
+ documentation. It clones \c origModel and applies presolve
74
+ transformations, storing the resulting list of postsolve
75
+ transformations. It returns a pointer to a new OsiSolverInterface loaded
76
+ with the presolved problem, or NULL if the problem is infeasible or
77
+ unbounded. If \c keepIntegers is true then bounds may be tightened in
78
+ the original. Bounds will be moved by up to \c feasibilityTolerance to
79
+ try and stay feasible. When \c doStatus is true, the current solution will
80
+ be transformed to match the presolved model.
81
+
82
+ This should be paired with postsolve(). It is up to the client to
83
+ destroy the returned OsiSolverInterface, <i>after</i> calling postsolve().
84
+
85
+ This method is virtual. Override this method if you need to customize
86
+ the steps of creating a model to apply presolve transformations.
87
+
88
+ In some sense, a wrapper for presolve(CoinPresolveMatrix*).
89
+ */
90
+ virtual OsiSolverInterface *presolvedModel(OsiSolverInterface & origModel,
91
+ double feasibilityTolerance=0.0,
92
+ bool keepIntegers=true,
93
+ int numberPasses=5,
94
+ const char * prohibited=NULL,
95
+ bool doStatus=true,
96
+ const char * rowProhibited=NULL);
97
+
98
+ /*! \brief Restate the solution to the presolved problem in terms of the
99
+ original problem and load it into the original model.
100
+
101
+ postsolve() restates the solution in terms of the original problem and
102
+ updates the original OsiSolverInterface supplied to presolvedModel(). If
103
+ the problem has not been solved to optimality, there are no guarantees.
104
+ If you are using an algorithm like simplex that has a concept of a basic
105
+ solution, then set updateStatus
106
+
107
+ The advantage of going back to the original problem is that it
108
+ will be exactly as it was, <i>i.e.</i>, 0.0 will not become 1.0e-19.
109
+
110
+ Note that if you modified the original problem after presolving, then you
111
+ must ``undo'' these modifications before calling postsolve().
112
+
113
+ In some sense, a wrapper for postsolve(CoinPostsolveMatrix&).
114
+ */
115
+ virtual void postsolve(bool updateStatus=true);
116
+
117
+ /*! \brief Return a pointer to the presolved model. */
118
+ OsiSolverInterface * model() const;
119
+
120
+ /// Return a pointer to the original model
121
+ OsiSolverInterface * originalModel() const;
122
+
123
+ /// Set the pointer to the original model
124
+ void setOriginalModel(OsiSolverInterface *model);
125
+
126
+ /// Return a pointer to the original columns
127
+ const int * originalColumns() const;
128
+
129
+ /// Return a pointer to the original rows
130
+ const int * originalRows() const;
131
+
132
+ /// Return number of rows in original model
133
+ inline int getNumRows() const
134
+ { return nrows_;}
135
+
136
+ /// Return number of columns in original model
137
+ inline int getNumCols() const
138
+ { return ncols_;}
139
+
140
+ /** "Magic" number. If this is non-zero then any elements with this value
141
+ may change and so presolve is very limited in what can be done
142
+ to the row and column. This is for non-linear problems.
143
+ */
144
+ inline void setNonLinearValue(double value)
145
+ { nonLinearValue_ = value;}
146
+ inline double nonLinearValue() const
147
+ { return nonLinearValue_;}
148
+ /*! \brief Fine control over presolve actions
149
+
150
+ Set/clear the following bits to allow or suppress actions:
151
+ - 0x01 allow duplicate column processing on integer columns
152
+ and dual stuff on integers
153
+ - 0x02 switch off actions which can change +1 to something else
154
+ (doubleton, tripleton, implied free)
155
+ - 0x04 allow transfer of costs from singletons and between integer
156
+ variables (when advantageous)
157
+ - 0x08 do not allow x+y+z=1 transform
158
+ - 0x10 allow actions that don't easily unroll
159
+ - 0x20 allow dubious gub element reduction
160
+
161
+ GUB element reduction is only partially implemented in CoinPresolve (see
162
+ gubrow_action) and willl cause an abort at postsolve. It's not clear
163
+ what's meant by `dual stuff on integers'.
164
+ -- lh, 110605 --
165
+ */
166
+ inline void setPresolveActions(int action)
167
+ { presolveActions_ = (presolveActions_&0xffff0000)|(action&0xffff);}
168
+
169
+ private:
170
+ /*! Original model (solver interface loaded with the original problem).
171
+
172
+ Must not be destroyed until after postsolve().
173
+ */
174
+ OsiSolverInterface * originalModel_;
175
+
176
+ /*! Presolved model (solver interface loaded with the presolved problem)
177
+
178
+ Must be destroyed by the client (using delete) after postsolve().
179
+ */
180
+ OsiSolverInterface * presolvedModel_;
181
+
182
+ /*! "Magic" number. If this is non-zero then any elements with this value
183
+ may change and so presolve is very limited in what can be done
184
+ to the row and column. This is for non-linear problems.
185
+ One could also allow for cases where sign of coefficient is known.
186
+ */
187
+ double nonLinearValue_;
188
+
189
+ /// Original column numbers
190
+ int * originalColumn_;
191
+
192
+ /// Original row numbers
193
+ int * originalRow_;
194
+
195
+ /// The list of transformations applied.
196
+ const CoinPresolveAction *paction_;
197
+
198
+ /*! \brief Number of columns in original model.
199
+
200
+ The problem will expand back to its former size as postsolve
201
+ transformations are applied. It is efficient to allocate data structures
202
+ for the final size of the problem rather than expand them as needed.
203
+ */
204
+ int ncols_;
205
+
206
+ /*! \brief Number of rows in original model. */
207
+ int nrows_;
208
+
209
+ /*! \brief Number of nonzero matrix coefficients in the original model. */
210
+ CoinBigIndex nelems_;
211
+
212
+ /** Whether we want to skip dual part of presolve etc.
213
+ 1 bit allows duplicate column processing on integer columns
214
+ and dual stuff on integers
215
+ 4 transfers costs to integer variables
216
+ */
217
+ int presolveActions_;
218
+ /// Number of major passes
219
+ int numberPasses_;
220
+
221
+ protected:
222
+ /*! \brief Apply presolve transformations to the problem.
223
+
224
+ Handles the core activity of applying presolve transformations.
225
+
226
+ If you want to apply the individual presolve routines differently, or
227
+ perhaps add your own to the mix, define a derived class and override
228
+ this method
229
+ */
230
+ virtual const CoinPresolveAction *presolve(CoinPresolveMatrix *prob);
231
+
232
+ /*! \brief Reverse presolve transformations to recover the solution
233
+ to the original problem.
234
+
235
+ Handles the core activity of applying postsolve transformations.
236
+
237
+ Postsolving is pretty generic; just apply the transformations in reverse
238
+ order. You will probably only be interested in overriding this method if
239
+ you want to add code to test for consistency while debugging new presolve
240
+ techniques.
241
+ */
242
+ virtual void postsolve(CoinPostsolveMatrix &prob);
243
+
244
+ /*! \brief Destroys queued postsolve actions.
245
+
246
+ <i>E.g.</i>, when presolve() determines the problem is infeasible, so that
247
+ it will not be necessary to actually solve the presolved problem and
248
+ convert the result back to the original problem.
249
+ */
250
+ void gutsOfDestroy();
251
+ };
252
+ #endif
@@ -0,0 +1,331 @@
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 OsiRowCut_H
6
+ #define OsiRowCut_H
7
+
8
+ #include "CoinPackedVector.hpp"
9
+
10
+ #include "OsiCollections.hpp"
11
+ #include "OsiCut.hpp"
12
+
13
+ //#define OSI_INLINE_ROWCUT_METHODS
14
+ #ifdef OSI_INLINE_ROWCUT_METHODS
15
+ #define OsiRowCut_inline inline
16
+ #else
17
+ #define OsiRowCut_inline
18
+ #endif
19
+
20
+ /** Row Cut Class
21
+
22
+ A row cut has:
23
+ <ul>
24
+ <li>a lower bound<br>
25
+ <li>an upper bound<br>
26
+ <li>a vector of row elements
27
+ </ul>
28
+ */
29
+ class OsiRowCut : public OsiCut {
30
+ friend void OsiRowCutUnitTest(const OsiSolverInterface * baseSiP,
31
+ const std::string & mpsDir);
32
+
33
+ public:
34
+
35
+ /**@name Row bounds */
36
+ //@{
37
+ /// Get lower bound
38
+ OsiRowCut_inline double lb() const;
39
+ /// Set lower bound
40
+ OsiRowCut_inline void setLb(double lb);
41
+ /// Get upper bound
42
+ OsiRowCut_inline double ub() const;
43
+ /// Set upper bound
44
+ OsiRowCut_inline void setUb(double ub);
45
+ //@}
46
+
47
+ /**@name Row rhs, sense, range */
48
+ //@{
49
+ /// Get sense ('E', 'G', 'L', 'N', 'R')
50
+ char sense() const;
51
+ /// Get right-hand side
52
+ double rhs() const;
53
+ /// Get range (ub - lb for 'R' rows, 0 otherwise)
54
+ double range() const;
55
+ //@}
56
+
57
+ //-------------------------------------------------------------------
58
+ /**@name Row elements */
59
+ //@{
60
+ /// Set row elements
61
+ OsiRowCut_inline void setRow(
62
+ int size,
63
+ const int * colIndices,
64
+ const double * elements,
65
+ bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE);
66
+ /// Set row elements from a packed vector
67
+ OsiRowCut_inline void setRow( const CoinPackedVector & v );
68
+ /// Get row elements
69
+ OsiRowCut_inline const CoinPackedVector & row() const;
70
+ /// Get row elements for changing
71
+ OsiRowCut_inline CoinPackedVector & mutableRow() ;
72
+ //@}
73
+
74
+ /**@name Comparison operators */
75
+ //@{
76
+ #if __GNUC__ != 2
77
+ using OsiCut::operator== ;
78
+ #endif
79
+ /** equal - true if lower bound, upper bound, row elements,
80
+ and OsiCut are equal.
81
+ */
82
+ OsiRowCut_inline bool operator==(const OsiRowCut& rhs) const;
83
+
84
+ #if __GNUC__ != 2
85
+ using OsiCut::operator!= ;
86
+ #endif
87
+ /// not equal
88
+ OsiRowCut_inline bool operator!=(const OsiRowCut& rhs) const;
89
+ //@}
90
+
91
+
92
+ //----------------------------------------------------------------
93
+ /**@name Sanity checks on cut */
94
+ //@{
95
+ /** Returns true if the cut is consistent.
96
+ This checks to ensure that:
97
+ <ul>
98
+ <li>The row element vector does not have duplicate indices
99
+ <li>The row element vector indices are >= 0
100
+ </ul>
101
+ */
102
+ OsiRowCut_inline bool consistent() const;
103
+
104
+ /** Returns true if cut is consistent with respect to the solver
105
+ interface's model.
106
+ This checks to ensure that
107
+ <ul>
108
+ <li>The row element vector indices are < the number of columns
109
+ in the model
110
+ </ul>
111
+ */
112
+ OsiRowCut_inline bool consistent(const OsiSolverInterface& im) const;
113
+
114
+ /** Returns true if the row cut itself is infeasible and cannot be satisfied.
115
+ This checks whether
116
+ <ul>
117
+ <li>the lower bound is strictly greater than the
118
+ upper bound.
119
+ </ul>
120
+ */
121
+ OsiRowCut_inline bool infeasible(const OsiSolverInterface &im) const;
122
+ /** Returns infeasibility of the cut with respect to solution
123
+ passed in i.e. is positive if cuts off that solution.
124
+ solution is getNumCols() long..
125
+ */
126
+ virtual double violated(const double * solution) const;
127
+ //@}
128
+
129
+ /**@name Arithmetic operators. Apply CoinPackedVector methods to the vector */
130
+ //@{
131
+ /// add <code>value</code> to every vector entry
132
+ void operator+=(double value)
133
+ { row_ += value; }
134
+
135
+ /// subtract <code>value</code> from every vector entry
136
+ void operator-=(double value)
137
+ { row_ -= value; }
138
+
139
+ /// multiply every vector entry by <code>value</code>
140
+ void operator*=(double value)
141
+ { row_ *= value; }
142
+
143
+ /// divide every vector entry by <code>value</code>
144
+ void operator/=(double value)
145
+ { row_ /= value; }
146
+ //@}
147
+
148
+ /// Allow access row sorting function
149
+ void sortIncrIndex()
150
+ {row_.sortIncrIndex();}
151
+
152
+ /**@name Constructors and destructors */
153
+ //@{
154
+ /// Assignment operator
155
+ OsiRowCut & operator=( const OsiRowCut& rhs);
156
+
157
+ /// Copy constructor
158
+ OsiRowCut ( const OsiRowCut &);
159
+
160
+ /// Clone
161
+ virtual OsiRowCut * clone() const;
162
+
163
+ /// Default Constructor
164
+ OsiRowCut ();
165
+
166
+ /** \brief Ownership Constructor
167
+
168
+ This constructor assumes ownership of the vectors passed as parameters
169
+ for indices and elements. \p colIndices and \p elements will be NULL
170
+ on return.
171
+ */
172
+ OsiRowCut(double cutlb, double cutub,
173
+ int capacity, int size,
174
+ int *&colIndices, double *&elements);
175
+
176
+ /// Destructor
177
+ virtual ~OsiRowCut ();
178
+ //@}
179
+
180
+ /**@name Debug stuff */
181
+ //@{
182
+ /// Print cuts in collection
183
+ virtual void print() const ;
184
+ //@}
185
+
186
+ private:
187
+
188
+
189
+ /**@name Private member data */
190
+ //@{
191
+ /// Row elements
192
+ CoinPackedVector row_;
193
+ /// Row lower bound
194
+ double lb_;
195
+ /// Row upper bound
196
+ double ub_;
197
+ //@}
198
+ };
199
+
200
+ #ifdef OSI_INLINE_ROWCUT_METHODS
201
+
202
+ //-------------------------------------------------------------------
203
+ // Set/Get lower & upper bounds
204
+ //-------------------------------------------------------------------
205
+ double OsiRowCut::lb() const { return lb_; }
206
+ void OsiRowCut::setLb(double lb) { lb_ = lb; }
207
+ double OsiRowCut::ub() const { return ub_; }
208
+ void OsiRowCut::setUb(double ub) { ub_ = ub; }
209
+
210
+ //-------------------------------------------------------------------
211
+ // Set row elements
212
+ //-------------------------------------------------------------------
213
+ void OsiRowCut::setRow(int size,
214
+ const int * colIndices, const double * elements)
215
+ {
216
+ row_.setVector(size,colIndices,elements);
217
+ }
218
+ void OsiRowCut::setRow( const CoinPackedVector & v )
219
+ {
220
+ row_ = v;
221
+ }
222
+
223
+ //-------------------------------------------------------------------
224
+ // Get the row
225
+ //-------------------------------------------------------------------
226
+ const CoinPackedVector & OsiRowCut::row() const
227
+ {
228
+ return row_;
229
+ }
230
+
231
+ //-------------------------------------------------------------------
232
+ // Get the row so we can change
233
+ //-------------------------------------------------------------------
234
+ CoinPackedVector & OsiRowCut::mutableRow()
235
+ {
236
+ return row_;
237
+ }
238
+
239
+ //----------------------------------------------------------------
240
+ // == operator
241
+ //-------------------------------------------------------------------
242
+ bool
243
+ OsiRowCut::operator==(const OsiRowCut& rhs) const
244
+ {
245
+ if ( this->OsiCut::operator!=(rhs) ) return false;
246
+ if ( row() != rhs.row() ) return false;
247
+ if ( lb() != rhs.lb() ) return false;
248
+ if ( ub() != rhs.ub() ) return false;
249
+ return true;
250
+ }
251
+ bool
252
+ OsiRowCut::operator!=(const OsiRowCut& rhs) const
253
+ {
254
+ return !( (*this)==rhs );
255
+ }
256
+
257
+
258
+ //----------------------------------------------------------------
259
+ // consistent & infeasible
260
+ //-------------------------------------------------------------------
261
+ bool OsiRowCut::consistent() const
262
+ {
263
+ const CoinPackedVector & r=row();
264
+ r.duplicateIndex("consistent", "OsiRowCut");
265
+ if ( r.getMinIndex() < 0 ) return false;
266
+ return true;
267
+ }
268
+ bool OsiRowCut::consistent(const OsiSolverInterface& im) const
269
+ {
270
+ const CoinPackedVector & r=row();
271
+ if ( r.getMaxIndex() >= im.getNumCols() ) return false;
272
+
273
+ return true;
274
+ }
275
+ bool OsiRowCut::infeasible(const OsiSolverInterface &im) const
276
+ {
277
+ if ( lb() > ub() ) return true;
278
+
279
+ return false;
280
+ }
281
+
282
+ #endif
283
+
284
+ /** Row Cut Class which refers back to row which created it.
285
+ It may be useful to strengthen a row rather than add a cut. To do this
286
+ we need to know which row is strengthened. This trivial extension
287
+ to OsiRowCut does that.
288
+
289
+ */
290
+ class OsiRowCut2 : public OsiRowCut {
291
+
292
+ public:
293
+
294
+ /**@name Which row */
295
+ //@{
296
+ /// Get row
297
+ inline int whichRow() const
298
+ { return whichRow_;}
299
+ /// Set row
300
+ inline void setWhichRow(int row)
301
+ { whichRow_=row;}
302
+ //@}
303
+
304
+ /**@name Constructors and destructors */
305
+ //@{
306
+ /// Assignment operator
307
+ OsiRowCut2 & operator=( const OsiRowCut2& rhs);
308
+
309
+ /// Copy constructor
310
+ OsiRowCut2 ( const OsiRowCut2 &);
311
+
312
+ /// Clone
313
+ virtual OsiRowCut * clone() const;
314
+
315
+ /// Default Constructor
316
+ OsiRowCut2 (int row=-1);
317
+
318
+ /// Destructor
319
+ virtual ~OsiRowCut2 ();
320
+ //@}
321
+
322
+ private:
323
+
324
+
325
+ /**@name Private member data */
326
+ //@{
327
+ /// Which row
328
+ int whichRow_;
329
+ //@}
330
+ };
331
+ #endif