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,211 @@
1
+ /* $Id: CoinWarmStartPrimalDual.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 CoinWarmStartPrimalDual_H
7
+ #define CoinWarmStartPrimalDual_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 CoinWarmStartPrimalDual : public virtual CoinWarmStart {
19
+ public:
20
+ /// return the size of the dual vector
21
+ inline int dualSize() const { return dual_.size(); }
22
+ /// return a pointer to the array of duals
23
+ inline const double * dual() const { return dual_.values(); }
24
+
25
+ /// return the size of the primal vector
26
+ inline int primalSize() const { return primal_.size(); }
27
+ /// return a pointer to the array of primals
28
+ inline const double * primal() const { return primal_.values(); }
29
+
30
+ /** Assign the primal/dual vectors to be the warmstart information. In this
31
+ method the object assumes ownership of the pointers and upon return \c
32
+ primal and \c dual will be a NULL pointers. If copying is desirable use
33
+ the constructor.
34
+
35
+ NOTE: \c primal and \c dual must have been allocated by new double[],
36
+ because they will be freed by delete[] upon the desructtion of this
37
+ object...
38
+ */
39
+ void assign(int primalSize, int dualSize, double*& primal, double *& dual) {
40
+ primal_.assignVector(primalSize, primal);
41
+ dual_.assignVector(dualSize, dual);
42
+ }
43
+
44
+ CoinWarmStartPrimalDual() : primal_(), dual_() {}
45
+
46
+ CoinWarmStartPrimalDual(int primalSize, int dualSize,
47
+ const double* primal, const double * dual) :
48
+ primal_(primalSize, primal), dual_(dualSize, dual) {}
49
+
50
+ CoinWarmStartPrimalDual(const CoinWarmStartPrimalDual& rhs) :
51
+ primal_(rhs.primal_), dual_(rhs.dual_) {}
52
+
53
+ CoinWarmStartPrimalDual& operator=(const CoinWarmStartPrimalDual& rhs) {
54
+ if (this != &rhs) {
55
+ primal_ = rhs.primal_;
56
+ dual_ = rhs.dual_;
57
+ }
58
+ return *this;
59
+ }
60
+
61
+ /*! \brief Clear the data
62
+
63
+ Make it appear as if the warmstart was just created using the default
64
+ constructor.
65
+ */
66
+ inline void clear() {
67
+ primal_.clear();
68
+ dual_.clear();
69
+ }
70
+
71
+ inline void swap(CoinWarmStartPrimalDual& rhs) {
72
+ if (this != &rhs) {
73
+ primal_.swap(rhs.primal_);
74
+ dual_.swap(rhs.dual_);
75
+ }
76
+ }
77
+
78
+ /** `Virtual constructor' */
79
+ virtual CoinWarmStart *clone() const {
80
+ return new CoinWarmStartPrimalDual(*this);
81
+ }
82
+
83
+ virtual ~CoinWarmStartPrimalDual() {}
84
+
85
+ /*! \name PrimalDual warm start `diff' methods */
86
+ //@{
87
+
88
+ /*! \brief Generate a `diff' that can convert the warm start passed as a
89
+ parameter to the warm start specified by \c this.
90
+
91
+ The capabilities are limited: the basis passed as a parameter can be no
92
+ larger than the basis pointed to by \c this.
93
+ */
94
+
95
+ virtual CoinWarmStartDiff*
96
+ generateDiff (const CoinWarmStart *const oldCWS) const ;
97
+
98
+ /*! \brief Apply \p diff to this warm start.
99
+
100
+ Update this warm start by applying \p diff. It's assumed that the
101
+ allocated capacity of the warm start is sufficiently large.
102
+ */
103
+
104
+ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
105
+
106
+ //@}
107
+
108
+ #if 0
109
+ protected:
110
+ inline const CoinWarmStartVector<double>& primalWarmStartVector() const
111
+ { return primal_; }
112
+ inline const CoinWarmStartVector<double>& dualWarmStartVector() const
113
+ { return dual_; }
114
+ #endif
115
+
116
+ private:
117
+ ///@name Private data members
118
+ //@{
119
+ CoinWarmStartVector<double> primal_;
120
+ CoinWarmStartVector<double> dual_;
121
+ //@}
122
+ };
123
+
124
+ //#############################################################################
125
+
126
+ /*! \class CoinWarmStartPrimalDualDiff
127
+ \brief A `diff' between two CoinWarmStartPrimalDual objects
128
+
129
+ This class exists in order to hide from the world the details of calculating
130
+ and representing a `diff' between two CoinWarmStartPrimalDual objects. For
131
+ convenience, assignment, cloning, and deletion are visible to the world, and
132
+ default and copy constructors are made available to derived classes.
133
+ Knowledge of the rest of this structure, and of generating and applying
134
+ diffs, is restricted to the friend functions
135
+ CoinWarmStartPrimalDual::generateDiff() and
136
+ CoinWarmStartPrimalDual::applyDiff().
137
+
138
+ The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_.
139
+
140
+ */
141
+
142
+ class CoinWarmStartPrimalDualDiff : public virtual CoinWarmStartDiff
143
+ {
144
+ friend CoinWarmStartDiff*
145
+ CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const;
146
+ friend void
147
+ CoinWarmStartPrimalDual::applyDiff(const CoinWarmStartDiff *const diff) ;
148
+
149
+ public:
150
+
151
+ /*! \brief `Virtual constructor'. To be used when retaining polymorphism is
152
+ important */
153
+ virtual CoinWarmStartDiff *clone() const
154
+ {
155
+ return new CoinWarmStartPrimalDualDiff(*this);
156
+ }
157
+
158
+ /*! \brief Destructor */
159
+ virtual ~CoinWarmStartPrimalDualDiff() {}
160
+
161
+ protected:
162
+
163
+ /*! \brief Default constructor
164
+
165
+ This is protected (rather than private) so that derived classes can
166
+ see it when they make <i>their</i> default constructor protected or
167
+ private.
168
+ */
169
+ CoinWarmStartPrimalDualDiff () : primalDiff_(), dualDiff_() {}
170
+
171
+ /*! \brief Copy constructor
172
+
173
+ For convenience when copying objects containing
174
+ CoinWarmStartPrimalDualDiff objects. But consider whether you should be
175
+ using #clone() to retain polymorphism.
176
+
177
+ This is protected (rather than private) so that derived classes can
178
+ see it when the make <i>their</i> copy constructor protected or
179
+ private.
180
+ */
181
+ CoinWarmStartPrimalDualDiff (const CoinWarmStartPrimalDualDiff &rhs) :
182
+ primalDiff_(rhs.primalDiff_), dualDiff_(rhs.dualDiff_) {}
183
+
184
+ /*! \brief Clear the data
185
+
186
+ Make it appear as if the diff was just created using the default
187
+ constructor.
188
+ */
189
+ inline void clear() {
190
+ primalDiff_.clear();
191
+ dualDiff_.clear();
192
+ }
193
+
194
+ inline void swap(CoinWarmStartPrimalDualDiff& rhs) {
195
+ if (this != &rhs) {
196
+ primalDiff_.swap(rhs.primalDiff_);
197
+ dualDiff_.swap(rhs.dualDiff_);
198
+ }
199
+ }
200
+
201
+ private:
202
+
203
+ /*!
204
+ \brief These two differences describe the differences in the primal and
205
+ in the dual vector.
206
+ */
207
+ CoinWarmStartVectorDiff<double> primalDiff_;
208
+ CoinWarmStartVectorDiff<double> dualDiff_;
209
+ } ;
210
+
211
+ #endif
@@ -0,0 +1,488 @@
1
+ /* $Id: CoinWarmStartVector.hpp 1498 2011-11-02 15:25:35Z mjs $ */
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 CoinWarmStartVector_H
7
+ #define CoinWarmStartVector_H
8
+
9
+ #if defined(_MSC_VER)
10
+ // Turn off compiler warning about long names
11
+ # pragma warning(disable:4786)
12
+ #endif
13
+
14
+ #include <cassert>
15
+ #include <cmath>
16
+
17
+ #include "CoinHelperFunctions.hpp"
18
+ #include "CoinWarmStart.hpp"
19
+
20
+
21
+ //#############################################################################
22
+
23
+ /** WarmStart information that is only a vector */
24
+
25
+ template <typename T>
26
+ class CoinWarmStartVector : public virtual CoinWarmStart
27
+ {
28
+ protected:
29
+ inline void gutsOfDestructor() {
30
+ delete[] values_;
31
+ }
32
+ inline void gutsOfCopy(const CoinWarmStartVector<T>& rhs) {
33
+ size_ = rhs.size_;
34
+ values_ = new T[size_];
35
+ CoinDisjointCopyN(rhs.values_, size_, values_);
36
+ }
37
+
38
+ public:
39
+ /// return the size of the vector
40
+ int size() const { return size_; }
41
+ /// return a pointer to the array of vectors
42
+ const T* values() const { return values_; }
43
+
44
+ /** Assign the vector to be the warmstart information. In this method
45
+ the object assumes ownership of the pointer and upon return #vector will
46
+ be a NULL pointer. If copying is desirable use the constructor. */
47
+ void assignVector(int size, T*& vec) {
48
+ size_ = size;
49
+ delete[] values_;
50
+ values_ = vec;
51
+ vec = NULL;
52
+ }
53
+
54
+ CoinWarmStartVector() : size_(0), values_(NULL) {}
55
+
56
+ CoinWarmStartVector(int size, const T* vec) :
57
+ size_(size), values_(new T[size]) {
58
+ CoinDisjointCopyN(vec, size, values_);
59
+ }
60
+
61
+ CoinWarmStartVector(const CoinWarmStartVector& rhs) {
62
+ gutsOfCopy(rhs);
63
+ }
64
+
65
+ CoinWarmStartVector& operator=(const CoinWarmStartVector& rhs) {
66
+ if (this != &rhs) {
67
+ gutsOfDestructor();
68
+ gutsOfCopy(rhs);
69
+ }
70
+ return *this;
71
+ }
72
+
73
+ inline void swap(CoinWarmStartVector& rhs) {
74
+ if (this != &rhs) {
75
+ std::swap(size_, rhs.size_);
76
+ std::swap(values_, rhs.values_);
77
+ }
78
+ }
79
+
80
+ /** `Virtual constructor' */
81
+ virtual CoinWarmStart *clone() const {
82
+ return new CoinWarmStartVector(*this);
83
+ }
84
+
85
+ virtual ~CoinWarmStartVector() {
86
+ gutsOfDestructor();
87
+ }
88
+
89
+ /*! \brief Clear the data
90
+
91
+ Make it appear as if the warmstart was just created using the default
92
+ constructor.
93
+ */
94
+ inline void clear() {
95
+ size_ = 0;
96
+ delete[] values_;
97
+ values_ = NULL;
98
+ }
99
+
100
+ /*! \name Vector warm start `diff' methods */
101
+ //@{
102
+
103
+ /*! \brief Generate a `diff' that can convert the warm start passed as a
104
+ parameter to the warm start specified by \c this.
105
+
106
+ The capabilities are limited: the basis passed as a parameter can be no
107
+ larger than the basis pointed to by \c this.
108
+ */
109
+
110
+ virtual CoinWarmStartDiff*
111
+ generateDiff (const CoinWarmStart *const oldCWS) const ;
112
+
113
+ /*! \brief Apply \p diff to this warm start.
114
+
115
+ Update this warm start by applying \p diff. It's assumed that the
116
+ allocated capacity of the warm start is sufficiently large.
117
+ */
118
+
119
+ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
120
+
121
+ //@}
122
+
123
+ private:
124
+ ///@name Private data members
125
+ //@{
126
+ /// the size of the vector
127
+ int size_;
128
+ /// the vector itself
129
+ T* values_;
130
+ //@}
131
+ };
132
+
133
+ //=============================================================================
134
+
135
+ /*! \class CoinWarmStartVectorDiff
136
+ \brief A `diff' between two CoinWarmStartVector objects
137
+
138
+ This class exists in order to hide from the world the details of calculating
139
+ and representing a `diff' between two CoinWarmStartVector objects. For
140
+ convenience, assignment, cloning, and deletion are visible to the world, and
141
+ default and copy constructors are made available to derived classes.
142
+ Knowledge of the rest of this structure, and of generating and applying
143
+ diffs, is restricted to the friend functions
144
+ CoinWarmStartVector::generateDiff() and CoinWarmStartVector::applyDiff().
145
+
146
+ The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_.
147
+
148
+ */
149
+
150
+ template <typename T>
151
+ class CoinWarmStartVectorDiff : public virtual CoinWarmStartDiff
152
+ {
153
+ friend CoinWarmStartDiff*
154
+ CoinWarmStartVector<T>::generateDiff(const CoinWarmStart *const oldCWS) const;
155
+ friend void
156
+ CoinWarmStartVector<T>::applyDiff(const CoinWarmStartDiff *const diff) ;
157
+
158
+ public:
159
+
160
+ /*! \brief `Virtual constructor' */
161
+ virtual CoinWarmStartDiff * clone() const {
162
+ return new CoinWarmStartVectorDiff(*this) ;
163
+ }
164
+
165
+ /*! \brief Assignment */
166
+ virtual CoinWarmStartVectorDiff &
167
+ operator= (const CoinWarmStartVectorDiff<T>& rhs) ;
168
+
169
+ /*! \brief Destructor */
170
+ virtual ~CoinWarmStartVectorDiff() {
171
+ delete[] diffNdxs_ ;
172
+ delete[] diffVals_ ;
173
+ }
174
+
175
+ inline void swap(CoinWarmStartVectorDiff& rhs) {
176
+ if (this != &rhs) {
177
+ std::swap(sze_, rhs.sze_);
178
+ std::swap(diffNdxs_, rhs.diffNdxs_);
179
+ std::swap(diffVals_, rhs.diffVals_);
180
+ }
181
+ }
182
+
183
+ /*! \brief Default constructor
184
+ */
185
+ CoinWarmStartVectorDiff () : sze_(0), diffNdxs_(0), diffVals_(NULL) {}
186
+
187
+ /*! \brief Copy constructor
188
+
189
+ For convenience when copying objects containing CoinWarmStartVectorDiff
190
+ objects. But consider whether you should be using #clone() to retain
191
+ polymorphism.
192
+ */
193
+ CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff<T>& rhs) ;
194
+
195
+ /*! \brief Standard constructor */
196
+ CoinWarmStartVectorDiff(int sze, const unsigned int* const diffNdxs,
197
+ const T* const diffVals) ;
198
+
199
+ /*! \brief Clear the data
200
+
201
+ Make it appear as if the diff was just created using the default
202
+ constructor.
203
+ */
204
+ inline void clear() {
205
+ sze_ = 0;
206
+ delete[] diffNdxs_; diffNdxs_ = NULL;
207
+ delete[] diffVals_; diffVals_ = NULL;
208
+ }
209
+
210
+ private:
211
+
212
+ /*!
213
+ \brief Number of entries (and allocated capacity), in units of \c T.
214
+ */
215
+ int sze_ ;
216
+
217
+ /*! \brief Array of diff indices */
218
+
219
+ unsigned int* diffNdxs_ ;
220
+
221
+ /*! \brief Array of diff values */
222
+
223
+ T* diffVals_ ;
224
+ };
225
+
226
+ //##############################################################################
227
+
228
+ template <typename T, typename U>
229
+ class CoinWarmStartVectorPair : public virtual CoinWarmStart
230
+ {
231
+ private:
232
+ CoinWarmStartVector<T> t_;
233
+ CoinWarmStartVector<U> u_;
234
+
235
+ public:
236
+ inline int size0() const { return t_.size(); }
237
+ inline int size1() const { return u_.size(); }
238
+ inline const T* values0() const { return t_.values(); }
239
+ inline const U* values1() const { return u_.values(); }
240
+
241
+ inline void assignVector0(int size, T*& vec) { t_.assignVector(size, vec); }
242
+ inline void assignVector1(int size, U*& vec) { u_.assignVector(size, vec); }
243
+
244
+ CoinWarmStartVectorPair() {}
245
+ CoinWarmStartVectorPair(int s0, const T* v0, int s1, const U* v1) :
246
+ t_(s0, v0), u_(s1, v1) {}
247
+
248
+ CoinWarmStartVectorPair(const CoinWarmStartVectorPair<T,U>& rhs) :
249
+ t_(rhs.t_), u_(rhs.u_) {}
250
+ CoinWarmStartVectorPair& operator=(const CoinWarmStartVectorPair<T,U>& rhs) {
251
+ if (this != &rhs) {
252
+ t_ = rhs.t_;
253
+ u_ = rhs.u_;
254
+ }
255
+ return *this;
256
+ }
257
+
258
+ inline void swap(CoinWarmStartVectorPair<T,U>& rhs) {
259
+ t_.swap(rhs.t_);
260
+ u_.swap(rhs.u_);
261
+ }
262
+
263
+ virtual CoinWarmStart *clone() const {
264
+ return new CoinWarmStartVectorPair(*this);
265
+ }
266
+
267
+ virtual ~CoinWarmStartVectorPair() {}
268
+
269
+ inline void clear() {
270
+ t_.clear();
271
+ u_.clear();
272
+ }
273
+
274
+ virtual CoinWarmStartDiff*
275
+ generateDiff (const CoinWarmStart *const oldCWS) const ;
276
+
277
+ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
278
+ };
279
+
280
+ //=============================================================================
281
+
282
+ template <typename T, typename U>
283
+ class CoinWarmStartVectorPairDiff : public virtual CoinWarmStartDiff
284
+ {
285
+ friend CoinWarmStartDiff*
286
+ CoinWarmStartVectorPair<T,U>::generateDiff(const CoinWarmStart *const oldCWS) const;
287
+ friend void
288
+ CoinWarmStartVectorPair<T,U>::applyDiff(const CoinWarmStartDiff *const diff) ;
289
+
290
+ private:
291
+ CoinWarmStartVectorDiff<T> tdiff_;
292
+ CoinWarmStartVectorDiff<U> udiff_;
293
+
294
+ public:
295
+ CoinWarmStartVectorPairDiff() {}
296
+ CoinWarmStartVectorPairDiff(const CoinWarmStartVectorPairDiff<T,U>& rhs) :
297
+ tdiff_(rhs.tdiff_), udiff_(rhs.udiff_) {}
298
+ virtual ~CoinWarmStartVectorPairDiff() {}
299
+
300
+ virtual CoinWarmStartVectorPairDiff&
301
+ operator=(const CoinWarmStartVectorPairDiff<T,U>& rhs) {
302
+ if (this != &rhs) {
303
+ tdiff_ = rhs.tdiff_;
304
+ udiff_ = rhs.udiff_;
305
+ }
306
+ return *this;
307
+ }
308
+
309
+ virtual CoinWarmStartDiff * clone() const {
310
+ return new CoinWarmStartVectorPairDiff(*this) ;
311
+ }
312
+
313
+ inline void swap(CoinWarmStartVectorPairDiff<T,U>& rhs) {
314
+ tdiff_.swap(rhs.tdiff_);
315
+ udiff_.swap(rhs.udiff_);
316
+ }
317
+
318
+ inline void clear() {
319
+ tdiff_.clear();
320
+ udiff_.clear();
321
+ }
322
+ };
323
+
324
+ //##############################################################################
325
+ //#############################################################################
326
+
327
+ /*
328
+ Generate a `diff' that can convert the warm start passed as a parameter to
329
+ the warm start specified by this.
330
+
331
+ The capabilities are limited: the basis passed as a parameter can be no
332
+ larger than the basis pointed to by this.
333
+ */
334
+
335
+ template <typename T> CoinWarmStartDiff*
336
+ CoinWarmStartVector<T>::generateDiff(const CoinWarmStart *const oldCWS) const
337
+ {
338
+ /*
339
+ Make sure the parameter is CoinWarmStartVector or derived class.
340
+ */
341
+ const CoinWarmStartVector<T>* oldVector =
342
+ dynamic_cast<const CoinWarmStartVector<T>*>(oldCWS);
343
+ if (!oldVector)
344
+ { throw CoinError("Old warm start not derived from CoinWarmStartVector.",
345
+ "generateDiff","CoinWarmStartVector") ; }
346
+ const CoinWarmStartVector<T>* newVector = this ;
347
+ /*
348
+ Make sure newVector is equal or bigger than oldVector. Calculate the worst
349
+ case number of diffs and allocate vectors to hold them.
350
+ */
351
+ const int oldCnt = oldVector->size() ;
352
+ const int newCnt = newVector->size() ;
353
+
354
+ assert(newCnt >= oldCnt) ;
355
+
356
+ unsigned int *diffNdx = new unsigned int [newCnt];
357
+ T* diffVal = new T[newCnt];
358
+ /*
359
+ Scan the vector vectors. For the portion of the vectors which overlap,
360
+ create diffs. Then add any additional entries from newVector.
361
+ */
362
+ const T*oldVal = oldVector->values() ;
363
+ const T*newVal = newVector->values() ;
364
+ int numberChanged = 0 ;
365
+ int i ;
366
+ for (i = 0 ; i < oldCnt ; i++) {
367
+ if (oldVal[i] != newVal[i]) {
368
+ diffNdx[numberChanged] = i ;
369
+ diffVal[numberChanged++] = newVal[i] ;
370
+ }
371
+ }
372
+ for ( ; i < newCnt ; i++) {
373
+ diffNdx[numberChanged] = i ;
374
+ diffVal[numberChanged++] = newVal[i] ;
375
+ }
376
+ /*
377
+ Create the object of our desire.
378
+ */
379
+ CoinWarmStartVectorDiff<T> *diff =
380
+ new CoinWarmStartVectorDiff<T>(numberChanged,diffNdx,diffVal) ;
381
+ /*
382
+ Clean up and return.
383
+ */
384
+ delete[] diffNdx ;
385
+ delete[] diffVal ;
386
+
387
+ return diff;
388
+ // return (dynamic_cast<CoinWarmStartDiff<T>*>(diff)) ;
389
+ }
390
+
391
+
392
+ /*
393
+ Apply diff to this warm start.
394
+
395
+ Update this warm start by applying diff. It's assumed that the
396
+ allocated capacity of the warm start is sufficiently large.
397
+ */
398
+
399
+ template <typename T> void
400
+ CoinWarmStartVector<T>::applyDiff (const CoinWarmStartDiff *const cwsdDiff)
401
+ {
402
+ /*
403
+ Make sure we have a CoinWarmStartVectorDiff
404
+ */
405
+ const CoinWarmStartVectorDiff<T>* diff =
406
+ dynamic_cast<const CoinWarmStartVectorDiff<T>*>(cwsdDiff) ;
407
+ if (!diff) {
408
+ throw CoinError("Diff not derived from CoinWarmStartVectorDiff.",
409
+ "applyDiff","CoinWarmStartVector") ;
410
+ }
411
+ /*
412
+ Application is by straighforward replacement of words in the vector vector.
413
+ */
414
+ const int numberChanges = diff->sze_ ;
415
+ const unsigned int *diffNdxs = diff->diffNdxs_ ;
416
+ const T* diffVals = diff->diffVals_ ;
417
+ T* vals = this->values_ ;
418
+
419
+ for (int i = 0 ; i < numberChanges ; i++) {
420
+ unsigned int diffNdx = diffNdxs[i] ;
421
+ T diffVal = diffVals[i] ;
422
+ vals[diffNdx] = diffVal ;
423
+ }
424
+ }
425
+
426
+ //#############################################################################
427
+
428
+
429
+ // Assignment
430
+
431
+ template <typename T> CoinWarmStartVectorDiff<T>&
432
+ CoinWarmStartVectorDiff<T>::operator=(const CoinWarmStartVectorDiff<T> &rhs)
433
+ {
434
+ if (this != &rhs) {
435
+ if (sze_ > 0) {
436
+ delete[] diffNdxs_ ;
437
+ delete[] diffVals_ ;
438
+ }
439
+ sze_ = rhs.sze_ ;
440
+ if (sze_ > 0) {
441
+ diffNdxs_ = new unsigned int[sze_] ;
442
+ memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ;
443
+ diffVals_ = new T[sze_] ;
444
+ memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ;
445
+ } else {
446
+ diffNdxs_ = 0 ;
447
+ diffVals_ = 0 ;
448
+ }
449
+ }
450
+
451
+ return (*this) ;
452
+ }
453
+
454
+
455
+ // Copy constructor
456
+
457
+ template <typename T>
458
+ CoinWarmStartVectorDiff<T>::CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff<T> &rhs)
459
+ : sze_(rhs.sze_),
460
+ diffNdxs_(0),
461
+ diffVals_(0)
462
+ {
463
+ if (sze_ > 0) {
464
+ diffNdxs_ = new unsigned int[sze_] ;
465
+ memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ;
466
+ diffVals_ = new T[sze_] ;
467
+ memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ;
468
+ }
469
+ }
470
+
471
+ /// Standard constructor
472
+
473
+ template <typename T>
474
+ CoinWarmStartVectorDiff<T>::CoinWarmStartVectorDiff
475
+ (int sze, const unsigned int *const diffNdxs, const T *const diffVals)
476
+ : sze_(sze),
477
+ diffNdxs_(0),
478
+ diffVals_(0)
479
+ {
480
+ if (sze > 0) {
481
+ diffNdxs_ = new unsigned int[sze] ;
482
+ memcpy(diffNdxs_,diffNdxs,sze*sizeof(unsigned int)) ;
483
+ diffVals_ = new T[sze] ;
484
+ memcpy(diffVals_,diffVals,sze*sizeof(T)) ;
485
+ }
486
+ }
487
+
488
+ #endif