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,58 @@
1
+ /* $Id: CoinWarmStart.hpp 1372 2011-01-03 23:31:00Z lou $ */
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 CoinWarmStart_H
7
+ #define CoinWarmStart_H
8
+
9
+ //#############################################################################
10
+
11
+ class CoinWarmStartDiff;
12
+
13
+ /** Abstract base class for warm start information.
14
+
15
+ Really nothing can be generalized for warm start information --- all we
16
+ know is that it exists. Hence the abstract base class contains only a
17
+ virtual destructor and a virtual clone function (a virtual constructor),
18
+ so that derived classes can provide these functions.
19
+ */
20
+
21
+ class CoinWarmStart {
22
+ public:
23
+
24
+ /// Abstract destructor
25
+ virtual ~CoinWarmStart() {}
26
+
27
+ /// `Virtual constructor'
28
+ virtual CoinWarmStart *clone() const = 0 ;
29
+
30
+ virtual CoinWarmStartDiff*
31
+ generateDiff (const CoinWarmStart *const ) const { return 0; }
32
+
33
+
34
+ virtual void
35
+ applyDiff (const CoinWarmStartDiff *const ) {}
36
+
37
+ };
38
+
39
+
40
+ /*! \class CoinWarmStartDiff
41
+ \brief Abstract base class for warm start `diff' objects
42
+
43
+ For those types of warm start objects where the notion of a `diff' makes
44
+ sense, this virtual base class is provided. As with CoinWarmStart, its sole
45
+ reason for existence is to make it possible to write solver-independent code.
46
+ */
47
+
48
+ class CoinWarmStartDiff {
49
+ public:
50
+
51
+ /// Abstract destructor
52
+ virtual ~CoinWarmStartDiff() {}
53
+
54
+ /// `Virtual constructor'
55
+ virtual CoinWarmStartDiff *clone() const = 0 ;
56
+ };
57
+
58
+ #endif
@@ -0,0 +1,456 @@
1
+ /* $Id: CoinWarmStartBasis.hpp 1515 2011-12-10 23:38:04Z lou $ */
2
+ /*! \legal
3
+ Copyright (C) 2000 -- 2003, International Business Machines Corporation
4
+ and others. All Rights Reserved.
5
+ This code is licensed under the terms of the Eclipse Public License (EPL).
6
+ */
7
+
8
+ /*! \file CoinWarmStart.hpp
9
+ \brief Declaration of the generic simplex (basis-oriented) warm start
10
+ class. Also contains a basis diff class.
11
+ */
12
+
13
+ #ifndef CoinWarmStartBasis_H
14
+ #define CoinWarmStartBasis_H
15
+
16
+ #include <vector>
17
+
18
+ #include "CoinSort.hpp"
19
+ #include "CoinHelperFunctions.hpp"
20
+ #include "CoinWarmStart.hpp"
21
+
22
+ //#############################################################################
23
+
24
+ /*! \class CoinWarmStartBasis
25
+ \brief The default COIN simplex (basis-oriented) warm start class
26
+
27
+ CoinWarmStartBasis provides for a warm start object which contains the
28
+ status of each variable (structural and artificial).
29
+
30
+ \todo Modify this class so that the number of status entries per byte
31
+ and bytes per status vector allocation unit are not hardcoded.
32
+ At the least, collect this into a couple of macros.
33
+
34
+ \todo Consider separate fields for allocated capacity and actual basis
35
+ size. We could avoid some reallocation, at the price of retaining
36
+ more space than we need. Perhaps more important, we could do much
37
+ better sanity checks.
38
+ */
39
+
40
+ class CoinWarmStartBasis : public virtual CoinWarmStart {
41
+ public:
42
+
43
+ /*! \brief Enum for status of variables
44
+
45
+ Matches CoinPrePostsolveMatrix::Status, without superBasic. Most code that
46
+ converts between CoinPrePostsolveMatrix::Status and
47
+ CoinWarmStartBasis::Status will break if this correspondence is broken.
48
+
49
+ The status vectors are currently packed using two bits per status code,
50
+ four codes per byte. The location of the status information for
51
+ variable \c i is in byte <code>i>>2</code> and occupies bits 0:1
52
+ if <code>i\%4 == 0</code>, bits 2:3 if <code>i\%4 == 1</code>, etc.
53
+ The non-member functions getStatus(const char*,int) and
54
+ setStatus(char*,int,CoinWarmStartBasis::Status) are provided to hide
55
+ details of the packing.
56
+ */
57
+ enum Status {
58
+ isFree = 0x00, ///< Nonbasic free variable
59
+ basic = 0x01, ///< Basic variable
60
+ atUpperBound = 0x02, ///< Nonbasic at upper bound
61
+ atLowerBound = 0x03 ///< Nonbasic at lower bound
62
+ };
63
+
64
+ /** \brief Transfer vector entry for
65
+ mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*)
66
+ */
67
+ typedef CoinTriple<int,int,int> XferEntry ;
68
+
69
+ /** \brief Transfer vector for
70
+ mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*)
71
+ */
72
+ typedef std::vector<XferEntry> XferVec ;
73
+
74
+ public:
75
+
76
+ /*! \name Methods to get and set basis information.
77
+
78
+ The status of variables is kept in a pair of arrays, one for structural
79
+ variables, and one for artificials (aka logicals and slacks). The status
80
+ is coded using the values of the Status enum.
81
+
82
+ \sa CoinWarmStartBasis::Status for a description of the packing used in
83
+ the status arrays.
84
+ */
85
+ //@{
86
+ /// Return the number of structural variables
87
+ inline int getNumStructural() const { return numStructural_; }
88
+
89
+ /// Return the number of artificial variables
90
+ inline int getNumArtificial() const { return numArtificial_; }
91
+
92
+ /** Return the number of basic structurals
93
+
94
+ A fast test for an all-slack basis.
95
+ */
96
+ int numberBasicStructurals() const ;
97
+
98
+ /// Return the status of the specified structural variable.
99
+ inline Status getStructStatus(int i) const {
100
+ const int st = (structuralStatus_[i>>2] >> ((i&3)<<1)) & 3;
101
+ return static_cast<CoinWarmStartBasis::Status>(st);
102
+ }
103
+
104
+ /// Set the status of the specified structural variable.
105
+ inline void setStructStatus(int i, Status st) {
106
+ char& st_byte = structuralStatus_[i>>2];
107
+ st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
108
+ st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
109
+ }
110
+
111
+ /** Return the status array for the structural variables
112
+
113
+ The status information is stored using the codes defined in the
114
+ Status enum, 2 bits per variable, packed 4 variables per byte.
115
+ */
116
+ inline char * getStructuralStatus() { return structuralStatus_; }
117
+
118
+ /** \c const overload for
119
+ \link CoinWarmStartBasis::getStructuralStatus()
120
+ getStructuralStatus()
121
+ \endlink
122
+ */
123
+ inline const char * getStructuralStatus() const { return structuralStatus_; }
124
+
125
+ /** As for \link getStructuralStatus() getStructuralStatus \endlink,
126
+ but returns the status array for the artificial variables.
127
+ */
128
+ inline char * getArtificialStatus() { return artificialStatus_; }
129
+
130
+ /// Return the status of the specified artificial variable.
131
+ inline Status getArtifStatus(int i) const {
132
+ const int st = (artificialStatus_[i>>2] >> ((i&3)<<1)) & 3;
133
+ return static_cast<CoinWarmStartBasis::Status>(st);
134
+ }
135
+
136
+ /// Set the status of the specified artificial variable.
137
+ inline void setArtifStatus(int i, Status st) {
138
+ char& st_byte = artificialStatus_[i>>2];
139
+ st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
140
+ st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
141
+ }
142
+
143
+ /** \c const overload for
144
+ \link CoinWarmStartBasis::getArtificialStatus()
145
+ getArtificialStatus()
146
+ \endlink
147
+ */
148
+ inline const char * getArtificialStatus() const { return artificialStatus_; }
149
+
150
+ //@}
151
+
152
+ /*! \name Basis `diff' methods */
153
+ //@{
154
+
155
+ /*! \brief Generate a `diff' that can convert the warm start basis passed as
156
+ a parameter to the warm start basis specified by \c this.
157
+
158
+ The capabilities are limited: the basis passed as a parameter can be no
159
+ larger than the basis pointed to by \c this.
160
+ */
161
+
162
+ virtual CoinWarmStartDiff*
163
+ generateDiff (const CoinWarmStart *const oldCWS) const ;
164
+
165
+ /*! \brief Apply \p diff to this basis
166
+
167
+ Update this basis by applying \p diff. It's assumed that the allocated
168
+ capacity of the basis is sufficiently large.
169
+ */
170
+
171
+ virtual void
172
+ applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
173
+
174
+ //@}
175
+
176
+
177
+ /*! \name Methods to modify the warm start object */
178
+ //@{
179
+
180
+ /*! \brief Set basis capacity; existing basis is discarded.
181
+
182
+ After execution of this routine, the warm start object does not describe
183
+ a valid basis: all structural and artificial variables have status isFree.
184
+ */
185
+ virtual void setSize(int ns, int na) ;
186
+
187
+ /*! \brief Set basis capacity; existing basis is maintained.
188
+
189
+ After execution of this routine, the warm start object describes a valid
190
+ basis: the status of new structural variables (added columns) is set to
191
+ nonbasic at lower bound, and the status of new artificial variables
192
+ (added rows) is set to basic. (The basis can be invalid if new structural
193
+ variables do not have a finite lower bound.)
194
+ */
195
+ virtual void resize (int newNumberRows, int newNumberColumns);
196
+
197
+ /** \brief Delete a set of rows from the basis
198
+
199
+ \warning
200
+ This routine assumes that the set of indices to be deleted is sorted in
201
+ ascending order and contains no duplicates. Use deleteRows() if this is
202
+ not the case.
203
+
204
+ \warning
205
+ The resulting basis is guaranteed valid only if all deleted
206
+ constraints are slack (hence the associated logicals are basic).
207
+
208
+ Removal of a tight constraint with a nonbasic logical implies that
209
+ some basic variable must be made nonbasic. This correction is left to
210
+ the client.
211
+ */
212
+
213
+ virtual void compressRows (int tgtCnt, const int *tgts) ;
214
+
215
+ /** \brief Delete a set of rows from the basis
216
+
217
+ \warning
218
+ The resulting basis is guaranteed valid only if all deleted
219
+ constraints are slack (hence the associated logicals are basic).
220
+
221
+ Removal of a tight constraint with a nonbasic logical implies that
222
+ some basic variable must be made nonbasic. This correction is left to
223
+ the client.
224
+ */
225
+
226
+ virtual void deleteRows(int rawTgtCnt, const int *rawTgts) ;
227
+
228
+ /** \brief Delete a set of columns from the basis
229
+
230
+ \warning
231
+ The resulting basis is guaranteed valid only if all deleted variables
232
+ are nonbasic.
233
+
234
+ Removal of a basic variable implies that some nonbasic variable must be
235
+ made basic. This correction is left to the client.
236
+ */
237
+
238
+ virtual void deleteColumns(int number, const int * which);
239
+
240
+ /** \brief Merge entries from a source basis into this basis.
241
+
242
+ \warning
243
+ It's the client's responsibility to ensure validity of the merged basis,
244
+ if that's important to the application.
245
+
246
+ The vector xferCols (xferRows) specifies runs of entries to be taken from
247
+ the source basis and placed in this basis. Each entry is a CoinTriple,
248
+ with first specifying the starting source index of a run, second
249
+ specifying the starting destination index, and third specifying the run
250
+ length.
251
+ */
252
+ virtual void mergeBasis(const CoinWarmStartBasis *src,
253
+ const XferVec *xferRows,
254
+ const XferVec *xferCols) ;
255
+
256
+ //@}
257
+
258
+ /*! \name Constructors, destructors, and related functions */
259
+
260
+ //@{
261
+
262
+ /** Default constructor
263
+
264
+ Creates a warm start object representing an empty basis
265
+ (0 rows, 0 columns).
266
+ */
267
+ CoinWarmStartBasis();
268
+
269
+ /** Constructs a warm start object with the specified status vectors.
270
+
271
+ The parameters are copied.
272
+ Consider assignBasisStatus(int,int,char*&,char*&) if the object should
273
+ assume ownership.
274
+
275
+ \sa CoinWarmStartBasis::Status for a description of the packing used in
276
+ the status arrays.
277
+ */
278
+ CoinWarmStartBasis(int ns, int na, const char* sStat, const char* aStat) ;
279
+
280
+ /** Copy constructor */
281
+ CoinWarmStartBasis(const CoinWarmStartBasis& ws) ;
282
+
283
+ /** `Virtual constructor' */
284
+ virtual CoinWarmStart *clone() const
285
+ {
286
+ return new CoinWarmStartBasis(*this);
287
+ }
288
+
289
+ /** Destructor */
290
+ virtual ~CoinWarmStartBasis();
291
+
292
+ /** Assignment */
293
+
294
+ virtual CoinWarmStartBasis& operator=(const CoinWarmStartBasis& rhs) ;
295
+
296
+ /** Assign the status vectors to be the warm start information.
297
+
298
+ In this method the CoinWarmStartBasis object assumes ownership of the
299
+ pointers and upon return the argument pointers will be NULL.
300
+ If copying is desirable, use the
301
+ \link CoinWarmStartBasis(int,int,const char*,const char*)
302
+ array constructor \endlink
303
+ or the
304
+ \link operator=(const CoinWarmStartBasis&)
305
+ assignment operator \endlink.
306
+
307
+ \note
308
+ The pointers passed to this method will be
309
+ freed using delete[], so they must be created using new[].
310
+ */
311
+ virtual void assignBasisStatus(int ns, int na, char*& sStat, char*& aStat) ;
312
+ //@}
313
+
314
+ /*! \name Miscellaneous methods */
315
+ //@{
316
+
317
+ /// Prints in readable format (for debug)
318
+ virtual void print() const;
319
+ /// Returns true if full basis (for debug)
320
+ bool fullBasis() const;
321
+ /// Returns true if full basis and fixes up (for debug)
322
+ bool fixFullBasis();
323
+
324
+ //@}
325
+
326
+ protected:
327
+ /** \name Protected data members
328
+
329
+ \sa CoinWarmStartBasis::Status for a description of the packing used in
330
+ the status arrays.
331
+ */
332
+ //@{
333
+ /// The number of structural variables
334
+ int numStructural_;
335
+ /// The number of artificial variables
336
+ int numArtificial_;
337
+ /// The maximum sise (in ints - actually 4*char) (so resize does not need to do new)
338
+ int maxSize_;
339
+ /** The status of the structural variables. */
340
+ char * structuralStatus_;
341
+ /** The status of the artificial variables. */
342
+ char * artificialStatus_;
343
+ //@}
344
+ };
345
+
346
+
347
+ /*! \relates CoinWarmStartBasis
348
+ \brief Get the status of the specified variable in the given status array.
349
+ */
350
+
351
+ inline CoinWarmStartBasis::Status getStatus(const char *array, int i) {
352
+ const int st = (array[i>>2] >> ((i&3)<<1)) & 3;
353
+ return static_cast<CoinWarmStartBasis::Status>(st);
354
+ }
355
+
356
+ /*! \relates CoinWarmStartBasis
357
+ \brief Set the status of the specified variable in the given status array.
358
+ */
359
+
360
+ inline void setStatus(char * array, int i, CoinWarmStartBasis::Status st) {
361
+ char& st_byte = array[i>>2];
362
+ st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
363
+ st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
364
+ }
365
+
366
+ /*! \relates CoinWarmStartBasis
367
+ \brief Generate a print string for a status code
368
+ */
369
+ const char *statusName(CoinWarmStartBasis::Status status) ;
370
+
371
+
372
+ /*! \class CoinWarmStartBasisDiff
373
+ \brief A `diff' between two CoinWarmStartBasis objects
374
+
375
+ This class exists in order to hide from the world the details of
376
+ calculating and representing a `diff' between two CoinWarmStartBasis
377
+ objects. For convenience, assignment, cloning, and deletion are visible to
378
+ the world, and default and copy constructors are made available to derived
379
+ classes. Knowledge of the rest of this structure, and of generating and
380
+ applying diffs, is restricted to the friend functions
381
+ CoinWarmStartBasis::generateDiff() and CoinWarmStartBasis::applyDiff().
382
+
383
+ The actual data structure is an unsigned int vector, #difference_ which
384
+ starts with indices of changed and then has values starting after #sze_
385
+
386
+ \todo This is a pretty generic structure, and vector diff is a pretty generic
387
+ activity. We should be able to convert this to a template.
388
+
389
+ \todo Using unsigned int as the data type for the diff vectors might help
390
+ to contain the damage when this code is inevitably compiled for 64 bit
391
+ architectures. But the notion of int as 4 bytes is hardwired into
392
+ CoinWarmStartBasis, so changes are definitely required.
393
+ */
394
+
395
+ class CoinWarmStartBasisDiff : public virtual CoinWarmStartDiff
396
+ { public:
397
+
398
+ /*! \brief `Virtual constructor' */
399
+ virtual CoinWarmStartDiff *clone() const
400
+ { CoinWarmStartBasisDiff *cwsbd = new CoinWarmStartBasisDiff(*this) ;
401
+ return (dynamic_cast<CoinWarmStartDiff *>(cwsbd)) ; }
402
+
403
+ /*! \brief Assignment */
404
+ virtual
405
+ CoinWarmStartBasisDiff &operator= (const CoinWarmStartBasisDiff &rhs) ;
406
+
407
+ /*! \brief Destructor */
408
+ virtual ~CoinWarmStartBasisDiff();
409
+
410
+ protected:
411
+
412
+ /*! \brief Default constructor
413
+
414
+ This is protected (rather than private) so that derived classes can
415
+ see it when they make <i>their</i> default constructor protected or
416
+ private.
417
+ */
418
+ CoinWarmStartBasisDiff () : sze_(0), difference_(0) { }
419
+
420
+ /*! \brief Copy constructor
421
+
422
+ For convenience when copying objects containing CoinWarmStartBasisDiff
423
+ objects. But consider whether you should be using #clone() to retain
424
+ polymorphism.
425
+
426
+ This is protected (rather than private) so that derived classes can
427
+ see it when they make <i>their</i> copy constructor protected or
428
+ private.
429
+ */
430
+ CoinWarmStartBasisDiff (const CoinWarmStartBasisDiff &cwsbd) ;
431
+
432
+ /*! \brief Standard constructor */
433
+ CoinWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
434
+ const unsigned int *const diffVals) ;
435
+
436
+ /*! \brief Constructor when full is smaller than diff!*/
437
+ CoinWarmStartBasisDiff (const CoinWarmStartBasis * rhs);
438
+
439
+ private:
440
+
441
+ friend CoinWarmStartDiff*
442
+ CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const ;
443
+ friend void
444
+ CoinWarmStartBasis::applyDiff(const CoinWarmStartDiff *const diff) ;
445
+
446
+ /*! \brief Number of entries (and allocated capacity), in units of \c int. */
447
+ int sze_ ;
448
+
449
+ /*! \brief Array of diff indices and diff values */
450
+
451
+ unsigned int *difference_ ;
452
+
453
+ } ;
454
+
455
+
456
+ #endif
@@ -0,0 +1,166 @@
1
+ /* $Id: CoinWarmStartDual.hpp 1372 2011-01-03 23:31:00Z lou $ */
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 CoinWarmStartDual_H
7
+ #define CoinWarmStartDual_H
8
+
9
+ #include "CoinHelperFunctions.hpp"
10
+ #include "CoinWarmStart.hpp"
11
+ #include "CoinWarmStartVector.hpp"
12
+
13
+
14
+ //#############################################################################
15
+
16
+ /** WarmStart information that is only a dual vector */
17
+
18
+ class CoinWarmStartDual : public virtual CoinWarmStart {
19
+ public:
20
+ /// return the size of the dual vector
21
+ inline int size() const { return dual_.size(); }
22
+ /// return a pointer to the array of duals
23
+ inline const double * dual() const { return dual_.values(); }
24
+
25
+ /** Assign the dual vector to be the warmstart information. In this method
26
+ the object assumes ownership of the pointer and upon return "dual" will
27
+ be a NULL pointer. If copying is desirable use the constructor. */
28
+ inline void assignDual(int size, double *& dual)
29
+ { dual_.assignVector(size, dual); }
30
+
31
+ CoinWarmStartDual() {}
32
+
33
+ CoinWarmStartDual(int size, const double * dual) : dual_(size, dual) {}
34
+
35
+ CoinWarmStartDual(const CoinWarmStartDual& rhs) : dual_(rhs.dual_) {}
36
+
37
+ CoinWarmStartDual& operator=(const CoinWarmStartDual& rhs) {
38
+ if (this != &rhs) {
39
+ dual_ = rhs.dual_;
40
+ }
41
+ return *this;
42
+ }
43
+
44
+ /** `Virtual constructor' */
45
+ virtual CoinWarmStart *clone() const {
46
+ return new CoinWarmStartDual(*this);
47
+ }
48
+
49
+ virtual ~CoinWarmStartDual() {}
50
+
51
+ /*! \name Dual warm start `diff' methods */
52
+ //@{
53
+
54
+ /*! \brief Generate a `diff' that can convert the warm start passed as a
55
+ parameter to the warm start specified by \c this.
56
+
57
+ The capabilities are limited: the basis passed as a parameter can be no
58
+ larger than the basis pointed to by \c this.
59
+ */
60
+
61
+ virtual CoinWarmStartDiff*
62
+ generateDiff (const CoinWarmStart *const oldCWS) const ;
63
+
64
+ /*! \brief Apply \p diff to this warm start.
65
+
66
+ Update this warm start by applying \p diff. It's assumed that the
67
+ allocated capacity of the warm start is sufficiently large.
68
+ */
69
+
70
+ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
71
+
72
+ #if 0
73
+ protected:
74
+ inline const CoinWarmStartVector<double>& warmStartVector() const { return dual_; }
75
+ #endif
76
+
77
+ //@}
78
+
79
+ private:
80
+ ///@name Private data members
81
+ CoinWarmStartVector<double> dual_;
82
+ };
83
+
84
+ //#############################################################################
85
+
86
+ /*! \class CoinWarmStartDualDiff
87
+ \brief A `diff' between two CoinWarmStartDual objects
88
+
89
+ This class exists in order to hide from the world the details of
90
+ calculating and representing a `diff' between two CoinWarmStartDual
91
+ objects. For convenience, assignment, cloning, and deletion are visible to
92
+ the world, and default and copy constructors are made available to derived
93
+ classes. Knowledge of the rest of this structure, and of generating and
94
+ applying diffs, is restricted to the friend functions
95
+ CoinWarmStartDual::generateDiff() and CoinWarmStartDual::applyDiff().
96
+
97
+ The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_.
98
+
99
+ */
100
+
101
+ class CoinWarmStartDualDiff : public virtual CoinWarmStartDiff
102
+ { public:
103
+
104
+ /*! \brief `Virtual constructor' */
105
+ virtual CoinWarmStartDiff *clone() const
106
+ {
107
+ return new CoinWarmStartDualDiff(*this) ;
108
+ }
109
+
110
+ /*! \brief Assignment */
111
+ virtual CoinWarmStartDualDiff &operator= (const CoinWarmStartDualDiff &rhs)
112
+ {
113
+ if (this != &rhs) {
114
+ diff_ = rhs.diff_;
115
+ }
116
+ return *this;
117
+ }
118
+
119
+ /*! \brief Destructor */
120
+ virtual ~CoinWarmStartDualDiff() {}
121
+
122
+ protected:
123
+
124
+ /*! \brief Default constructor
125
+
126
+ This is protected (rather than private) so that derived classes can
127
+ see it when they make <i>their</i> default constructor protected or
128
+ private.
129
+ */
130
+ CoinWarmStartDualDiff () : diff_() {}
131
+
132
+ /*! \brief Copy constructor
133
+
134
+ For convenience when copying objects containing CoinWarmStartDualDiff
135
+ objects. But consider whether you should be using #clone() to retain
136
+ polymorphism.
137
+
138
+ This is protected (rather than private) so that derived classes can
139
+ see it when the make <i>their</i> copy constructor protected or
140
+ private.
141
+ */
142
+ CoinWarmStartDualDiff (const CoinWarmStartDualDiff &rhs) :
143
+ diff_(rhs.diff_) {}
144
+
145
+ private:
146
+
147
+ friend CoinWarmStartDiff*
148
+ CoinWarmStartDual::generateDiff(const CoinWarmStart *const oldCWS) const ;
149
+ friend void
150
+ CoinWarmStartDual::applyDiff(const CoinWarmStartDiff *const diff) ;
151
+
152
+ /*! \brief Standard constructor */
153
+ CoinWarmStartDualDiff (int sze, const unsigned int *const diffNdxs,
154
+ const double *const diffVals) :
155
+ diff_(sze, diffNdxs, diffVals) {}
156
+
157
+ /*!
158
+ \brief The difference in the dual vector is simply the difference in a
159
+ vector.
160
+ */
161
+ CoinWarmStartVectorDiff<double> diff_;
162
+ };
163
+
164
+
165
+ #endif
166
+