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,35 @@
1
+ # libClpSolver.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libClpSolver.so.1'
9
+
10
+ # Names of this library.
11
+ library_names='libClpSolver.so.1.13.9 libClpSolver.so.1 libClpSolver.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libClp.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCoinUtils.la -lz'
18
+
19
+ # Version information for libClpSolver.
20
+ current=14
21
+ age=13
22
+ revision=9
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
@@ -0,0 +1,35 @@
1
+ # libCoinUtils.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libCoinUtils.so.3'
9
+
10
+ # Names of this library.
11
+ library_names='libCoinUtils.so.3.10.11 libCoinUtils.so.3 libCoinUtils.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' -lz'
18
+
19
+ # Version information for libCoinUtils.
20
+ current=13
21
+ age=10
22
+ revision=11
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
@@ -0,0 +1,35 @@
1
+ # libOsi.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libOsi.so.1'
9
+
10
+ # Names of this library.
11
+ library_names='libOsi.so.1.12.6 libOsi.so.1 libOsi.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCoinUtils.la -lz'
18
+
19
+ # Version information for libOsi.
20
+ current=13
21
+ age=12
22
+ revision=6
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
Binary file
@@ -0,0 +1,35 @@
1
+ # libOsiCbc.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libOsiCbc.so.3'
9
+
10
+ # Names of this library.
11
+ library_names='libOsiCbc.so.3.9.7 libOsiCbc.so.3 libOsiCbc.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCbc.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCgl.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libOsiClp.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libClpSolver.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libClp.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libOsi.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCoinUtils.la -lz'
18
+
19
+ # Version information for libOsiCbc.
20
+ current=12
21
+ age=9
22
+ revision=7
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
@@ -0,0 +1,35 @@
1
+ # libOsiClp.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libOsiClp.so.1'
9
+
10
+ # Names of this library.
11
+ library_names='libOsiClp.so.1.13.9 libOsiClp.so.1 libOsiClp.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libOsi.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libClp.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCoinUtils.la -lz'
18
+
19
+ # Version information for libOsiClp.
20
+ current=14
21
+ age=13
22
+ revision=9
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
@@ -0,0 +1,35 @@
1
+ # libOsiCommonTests.la - a libtool library file
2
+ # Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)
3
+ #
4
+ # Please DO NOT delete this file!
5
+ # It is necessary for linking the library.
6
+
7
+ # The name that we can dlopen(3).
8
+ dlname='libOsiCommonTests.so.1'
9
+
10
+ # Names of this library.
11
+ library_names='libOsiCommonTests.so.1.12.6 libOsiCommonTests.so.1 libOsiCommonTests.so'
12
+
13
+ # The name of the static archive.
14
+ old_library=''
15
+
16
+ # Libraries that this one depends upon.
17
+ dependency_libs=' /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libOsi.la /home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib/libCoinUtils.la -lz'
18
+
19
+ # Version information for libOsiCommonTests.
20
+ current=13
21
+ age=12
22
+ revision=6
23
+
24
+ # Is this an already installed library?
25
+ installed=yes
26
+
27
+ # Should we warn about portability when linking against -modules?
28
+ shouldnotlink=no
29
+
30
+ # Files to dlopen/dlpreopen
31
+ dlopen=''
32
+ dlpreopen=''
33
+
34
+ # Directory that this library needs to be installed in:
35
+ libdir='/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install/lib'
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: CBC
7
+ Description: COIN-OR Branch and Cut
8
+ URL: https://projects.coin-or.org/Cbc
9
+ Version: 2.9.7
10
+ Libs: -L${libdir} -lCbcSolver -lCbc
11
+ Cflags: -I${includedir}
12
+ Requires: osi-clp cgl osi coinutils
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: CGL
7
+ Description: COIN-OR Cut Generation Library
8
+ URL: https://projects.coin-or.org/Cgl
9
+ Version: 0.59.7
10
+ Libs: -L${libdir} -lCgl
11
+ Cflags: -I${includedir}
12
+ Requires: osi-clp osi coinutils
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: CLP
7
+ Description: COIN-OR Linear Programming Solver
8
+ URL: https://projects.coin-or.org/Clp
9
+ Version: 1.16.9
10
+ Libs: -L${libdir} -lClpSolver -lClp
11
+ Cflags: -I${includedir}
12
+ Requires: coinutils
@@ -0,0 +1,9 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ datadir=${prefix}/share/coin/Data/miplib3
3
+
4
+ Name: Miplib3
5
+ Description: MIPLIB3 models
6
+ URL: https://projects.coin-or.org/svn/Data/miplib3
7
+ Version: 1.2.6
8
+ Libs:
9
+ Cflags:
@@ -0,0 +1,9 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ datadir=${prefix}/share/coin/Data/Sample
3
+
4
+ Name: Sample
5
+ Description: Sample models
6
+ URL: https://projects.coin-or.org/svn/Data/Sample
7
+ Version: 1.2.10
8
+ Libs:
9
+ Cflags:
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: CoinUtils
7
+ Description: COIN-OR Utilities
8
+ URL: https://projects.coin-or.org/CoinUtils
9
+ Version: 2.10.11
10
+ Libs: -L${libdir} -lCoinUtils -lz -lm
11
+ Cflags: -I${includedir}
12
+ Requires:
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: OsiCbc
7
+ Description: COIN-OR Open Solver Interface for CBC
8
+ URL: https://projects.coin-or.org/Osi
9
+ Version: 2.9.7
10
+ Libs: -L${libdir} -lOsiCbc
11
+ Cflags: -I${includedir}
12
+ Requires: cbc
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: OsiClp
7
+ Description: COIN-OR Open Solver Interface for CLP
8
+ URL: https://projects.coin-or.org/Osi
9
+ Version: 1.16.9
10
+ Libs: -L${libdir} -lOsiClp
11
+ Cflags: -I${includedir}
12
+ Requires: clp osi
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: OsiUnitTests
7
+ Description: COIN-OR Open Solver Interface Common Unit Tests
8
+ URL: https://projects.coin-or.org/Osi
9
+ Version: 0.107.6
10
+ Libs: -L${libdir} -lOsiCommonTests
11
+ Cflags: -I${includedir}
12
+ Requires: osi
@@ -0,0 +1,12 @@
1
+ prefix=/home/guillaume/git/swig-cbc/src/cbc/ext/ruby-cbc/install
2
+ exec_prefix=${prefix}
3
+ libdir=${exec_prefix}/lib
4
+ includedir=${prefix}/include/coin
5
+
6
+ Name: Osi
7
+ Description: COIN-OR Open Solver Interface
8
+ URL: https://projects.coin-or.org/Osi
9
+ Version: 0.107.6
10
+ Libs: -L${libdir} -lOsi
11
+ Cflags: -I${includedir}
12
+ Requires: coinutils
@@ -0,0 +1,44 @@
1
+ module Ilp
2
+ class Constant
3
+ attr_accessor :value
4
+ def initialize(value)
5
+ raise ArgumentError, 'Argument is not numeric' unless value.is_a? Numeric
6
+ @value = value
7
+ end
8
+ def <= (term)
9
+ term >= value
10
+ end
11
+ def <(term)
12
+ term > value
13
+ end
14
+ def >=(term)
15
+ term <= value
16
+ end
17
+ def > (term)
18
+ term < value
19
+ end
20
+ def ==(term)
21
+ term == value
22
+ end
23
+
24
+ def *(term)
25
+ term * value
26
+ end
27
+
28
+ def +(term)
29
+ term + value
30
+ end
31
+
32
+ def -(term)
33
+ -1 * term + value
34
+ end
35
+
36
+ def to_s
37
+ value.to_s
38
+ end
39
+
40
+ def pretty_print
41
+ value.to_s
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,32 @@
1
+ module Ilp
2
+ class Constraint
3
+
4
+ LESS_OR_EQ = :less_or_eq
5
+ GREATER_OR_EQ = :greater_or_eq
6
+ EQUALS = :equals
7
+
8
+ attr_accessor :terms, :type, :bound
9
+
10
+ def initialize(terms, type, bound)
11
+ @terms = terms - bound
12
+ @terms.normalize!
13
+ @bound = -1 * @terms.send(:pop_constant)
14
+ @type = type
15
+ end
16
+
17
+ def to_s
18
+ case @type
19
+ when LESS_OR_EQ
20
+ sign = '<='
21
+ when GREATER_OR_EQ
22
+ sign = '>='
23
+ when EQUALS
24
+ sign = '='
25
+ else
26
+ sign = '??'
27
+ end
28
+ "#{@terms.to_s} #{sign} #{@bound}"
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ module Ilp
2
+ class Objective
3
+
4
+ MINIMIZE = :min
5
+ MAXIMIZE = :max
6
+
7
+ attr_accessor :terms, :objective_function
8
+ def initialize(terms, objective_function = MAXIMIZE)
9
+ @terms = terms
10
+ @terms = Ilp::Term.new(@terms) if @terms.is_a? Ilp::Var
11
+ @terms = Ilp::TermArray.new(@terms) if @terms.is_a? Ilp::Term
12
+ @terms.normalize!
13
+ cste = @terms.send(:pop_constant)
14
+ puts "Removing constant [#{cste}] in objective" if cste != 0
15
+ @objective_function = objective_function
16
+ end
17
+
18
+ def to_s
19
+ str = ""
20
+ str << (@objective_function == :max ? "Maximize" : "Minimize")
21
+ str << "\n "
22
+ str << terms.to_s
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,47 @@
1
+ module Ilp
2
+ class Term
3
+
4
+ attr_accessor :mult, :var
5
+
6
+ def initialize(var, mult = 1)
7
+ @mult = mult
8
+ @var = var
9
+ end
10
+
11
+ def +(vars)
12
+ Ilp::TermArray.new(self) + vars
13
+ end
14
+
15
+ def -(vars)
16
+ Ilp::TermArray.new(self) - vars
17
+ end
18
+
19
+ def ==(vars)
20
+ Ilp::TermArray.new(self) == vars
21
+ end
22
+
23
+ def <=(vars)
24
+ Ilp::TermArray.new(self) <= vars
25
+ end
26
+
27
+ def >=(vars)
28
+ Ilp::TermArray.new(self) >= vars
29
+ end
30
+
31
+
32
+ def *(mult)
33
+ raise ArgumentError, 'Argument is not numeric' unless mult.is_a? Numeric
34
+ Ilp::Term.new(@var, @mult * mult)
35
+ end
36
+
37
+ def coerce(num)
38
+ [Ilp::TermArray.new(self), num]
39
+ end
40
+
41
+ def to_s
42
+ str = "++-"[mult <=> 0] << " "
43
+ str << mult.abs.to_s << " " if mult != 1
44
+ str << var.to_s
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,80 @@
1
+ module Ilp
2
+ class TermArray
3
+ include Enumerable
4
+
5
+ attr_accessor :terms
6
+
7
+ def initialize(*terms)
8
+ @terms = terms
9
+ end
10
+
11
+ def +(vars)
12
+ if vars.is_a? Numeric
13
+ @terms << vars
14
+ elsif vars.is_a? Ilp::Var
15
+ @terms << Ilp::Term.new(vars)
16
+ elsif vars.is_a? Ilp::Term
17
+ @terms << vars
18
+ elsif vars.is_a? Ilp::TermArray
19
+ @terms += vars.terms
20
+ else
21
+ raise ArgumentError, "Argument is not allowed: #{vars} of type #{vars.class}"
22
+ end
23
+ self
24
+ end
25
+
26
+ def -(vars)
27
+ self + -1 * vars
28
+ end
29
+
30
+ def *(mult)
31
+ raise ArgumentError, 'Argument is not numeric' unless mult.is_a? Numeric
32
+ @terms.map! { |term| term * mult }
33
+ self
34
+ end
35
+
36
+ # cste + nb * var + nb * var...
37
+ def normalize!
38
+ constant = @terms.select{ |t| t.is_a? Numeric }.inject(:+)
39
+ hterms = @terms.select{ |t| t.is_a? Ilp::Term }.group_by(&:var)
40
+ @terms = []
41
+ constant ||= 0
42
+ @terms << constant
43
+ hterms.each do |v, ts|
44
+ t = ts.inject(Ilp::Term.new(v, 0)) { |v1, v2| v1.mult += v2.mult; v1 }
45
+ terms << t if t.mult != 0
46
+ end
47
+ self
48
+ end
49
+
50
+ def <=(value)
51
+ Ilp::Constraint.new(self, Ilp::Constraint::LESS_OR_EQ, value)
52
+ end
53
+
54
+ def >=(value)
55
+ Ilp::Constraint.new(self, Ilp::Constraint::GREATER_OR_EQ, value)
56
+ end
57
+
58
+ def ==(value)
59
+ Ilp::Constraint.new(self, Ilp::Constraint::EQUALS, value)
60
+ end
61
+
62
+ def coerce(value)
63
+ [Ilp::Constant.new(value), self]
64
+ end
65
+
66
+ def each(&block)
67
+ @terms.each(&block)
68
+ end
69
+
70
+ def to_s
71
+ @terms.map(&:to_s).join(' ')
72
+ end
73
+
74
+ private
75
+ # Must be normalized!
76
+ def pop_constant
77
+ terms.slice!(0)
78
+ end
79
+ end
80
+ end