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,73 @@
1
+ /* $Id: CoinPresolveDoubleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */
2
+ // Copyright (C) 2002, 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 CoinPresolveDoubleton_H
7
+ #define CoinPresolveDoubleton_H
8
+
9
+ #define DOUBLETON 5
10
+
11
+ /*! \class doubleton_action
12
+ \brief Solve ax+by=c for y and substitute y out of the problem.
13
+
14
+ This moves the bounds information for y onto x, making y free and allowing
15
+ us to substitute it away.
16
+ \verbatim
17
+ a x + b y = c
18
+ l1 <= x <= u1
19
+ l2 <= y <= u2 ==>
20
+
21
+ l2 <= (c - a x) / b <= u2
22
+ b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a
23
+ b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a
24
+ \endverbatim
25
+ */
26
+ class doubleton_action : public CoinPresolveAction {
27
+ public:
28
+ struct action {
29
+
30
+ double clox;
31
+ double cupx;
32
+ double costx;
33
+
34
+ double costy;
35
+
36
+ double rlo;
37
+
38
+ double coeffx;
39
+ double coeffy;
40
+
41
+ double *colel;
42
+
43
+ int icolx;
44
+ int icoly;
45
+ int row;
46
+ int ncolx;
47
+ int ncoly;
48
+ };
49
+
50
+ const int nactions_;
51
+ const action *const actions_;
52
+
53
+ private:
54
+ doubleton_action(int nactions,
55
+ const action *actions,
56
+ const CoinPresolveAction *next) :
57
+ CoinPresolveAction(next),
58
+ nactions_(nactions), actions_(actions)
59
+ {}
60
+
61
+ public:
62
+ const char *name() const { return ("doubleton_action"); }
63
+
64
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
65
+ const CoinPresolveAction *next);
66
+
67
+ void postsolve(CoinPostsolveMatrix *prob) const;
68
+
69
+ virtual ~doubleton_action();
70
+ };
71
+ #endif
72
+
73
+
@@ -0,0 +1,85 @@
1
+ /* $Id: CoinPresolveDual.hpp 1510 2011-12-08 23:56:01Z lou $ */
2
+
3
+ // Copyright (C) 2002, International Business Machines
4
+ // Corporation and others. All Rights Reserved.
5
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
6
+
7
+ #ifndef CoinPresolveDual_H
8
+ #define CoinPresolveDual_H
9
+
10
+ /*! \class remove_dual_action
11
+ \brief Attempt to fix variables by bounding reduced costs
12
+
13
+ The reduced cost of x_j is d_j = c_j - y*a_j (1). Assume minimization,
14
+ so that at optimality d_j >= 0 for x_j nonbasic at lower bound, and
15
+ d_j <= 0 for x_j nonbasic at upper bound.
16
+
17
+ For a slack variable s_i, c_(n+i) = 0 and a_(n+i) is a unit vector, hence
18
+ d_(n+i) = -y_i. If s_i has a finite lower bound and no upper bound, we
19
+ must have y_i <= 0 at optimality. Similarly, if s_i has no lower bound and a
20
+ finite upper bound, we must have y_i >= 0.
21
+
22
+ For a singleton variable x_j, d_j = c_j - y_i*a_ij. Given x_j with a
23
+ single finite bound, we can bound d_j greater or less than 0 at
24
+ optimality, and that allows us to calculate an upper or lower bound on y_i
25
+ (depending on the bound on d_j and the sign of a_ij).
26
+
27
+ Now we have bounds on some subset of the y_i, and we can use these to
28
+ calculate upper and lower bounds on the d_j, using bound propagation on
29
+ (1). If we can manage to bound some d_j as strictly positive or strictly
30
+ negative, then at optimality the corresponding variable must be nonbasic
31
+ at its lower or upper bound, respectively. If the required bound is lacking,
32
+ the problem is unbounded.
33
+ */
34
+
35
+ class remove_dual_action : public CoinPresolveAction {
36
+
37
+ public:
38
+
39
+ /// Destructor
40
+ ~remove_dual_action () ;
41
+
42
+ /// Name
43
+ inline const char *name () const { return ("remove_dual_action") ; }
44
+
45
+ /*! \brief Attempt to fix variables by bounding reduced costs
46
+
47
+ Always scans all variables. Propagates bounds on reduced costs until there's
48
+ no change or until some set of variables can be fixed.
49
+ */
50
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
51
+ const CoinPresolveAction *next) ;
52
+
53
+ /*! \brief Postsolve
54
+
55
+ In addition to fixing variables (handled by make_fixed_action), we may
56
+ need use our own postsolve to restore constraint bounds.
57
+ */
58
+ void postsolve (CoinPostsolveMatrix *prob) const ;
59
+
60
+ private:
61
+
62
+ /// Postsolve (bound restore) instruction
63
+ struct action {
64
+ double rlo_ ; ///< restored row lower bound
65
+ double rup_ ; ///< restored row upper bound
66
+ int ndx_ ; ///< row index
67
+ } ;
68
+
69
+ /// Constructor with postsolve actions.
70
+ remove_dual_action(int nactions, const action *actions,
71
+ const CoinPresolveAction *next)
72
+ : CoinPresolveAction(next),
73
+ nactions_(nactions),
74
+ actions_(actions)
75
+ {}
76
+
77
+ /// Count of bound restore entries
78
+ const int nactions_ ;
79
+ /// Bound restore entries
80
+ const action *actions_ ;
81
+
82
+ } ;
83
+ #endif
84
+
85
+
@@ -0,0 +1,226 @@
1
+ /* $Id: CoinPresolveDupcol.hpp 1817 2015-03-22 16:43:28Z forrest $ */
2
+ // Copyright (C) 2002, 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 CoinPresolveDupcol_H
7
+ #define CoinPresolveDupcol_H
8
+
9
+ #include "CoinPresolveMatrix.hpp"
10
+
11
+ /*!
12
+ \file
13
+ */
14
+
15
+ #define DUPCOL 10
16
+
17
+ /*! \class dupcol_action
18
+ \brief Detect and remove duplicate columns
19
+
20
+ The general technique is to sum the coefficients a_(*,j) of each column.
21
+ Columns with identical sums are duplicates. The obvious problem is that,
22
+ <i>e.g.</i>, [1 0 1 0] and [0 1 0 1] both add to 2. To minimize the
23
+ chances of false positives, the coefficients of each row are multipled by
24
+ a random number r_i, so that we sum r_i*a_ij.
25
+
26
+ Candidate columns are checked to confirm they are identical. Where the
27
+ columns have the same objective coefficient, the two are combined. If the
28
+ columns have different objective coefficients, complications ensue. In order
29
+ to remove the duplicate, it must be possible to fix the variable at a bound.
30
+ */
31
+
32
+ class dupcol_action : public CoinPresolveAction {
33
+ dupcol_action();
34
+ dupcol_action(const dupcol_action& rhs);
35
+ dupcol_action& operator=(const dupcol_action& rhs);
36
+
37
+ struct action {
38
+ double thislo;
39
+ double thisup;
40
+ double lastlo;
41
+ double lastup;
42
+ int ithis;
43
+ int ilast;
44
+
45
+ double *colels;
46
+ int nincol;
47
+ };
48
+
49
+ const int nactions_;
50
+ // actions_ is owned by the class and must be deleted at destruction
51
+ const action *const actions_;
52
+
53
+ dupcol_action(int nactions, const action *actions,
54
+ const CoinPresolveAction *next) :
55
+ CoinPresolveAction(next),
56
+ nactions_(nactions),
57
+ actions_(actions) {}
58
+
59
+ public:
60
+ const char *name() const;
61
+
62
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
63
+ const CoinPresolveAction *next);
64
+
65
+ void postsolve(CoinPostsolveMatrix *prob) const;
66
+
67
+ virtual ~dupcol_action();
68
+
69
+ };
70
+
71
+
72
+ /*! \class duprow_action
73
+ \brief Detect and remove duplicate rows
74
+
75
+ The algorithm to detect duplicate rows is as outlined for dupcol_action.
76
+
77
+ If the feasible interval for one constraint is strictly contained in the
78
+ other, the tighter (contained) constraint is kept. If the feasible
79
+ intervals are disjoint, the problem is infeasible. If the feasible
80
+ intervals overlap, both constraints are kept.
81
+
82
+ duprow_action is definitely a work in progress; #postsolve is
83
+ unimplemented.
84
+ This doesn't matter as it uses useless_constraint.
85
+ */
86
+
87
+ class duprow_action : public CoinPresolveAction {
88
+ struct action {
89
+ int row;
90
+ double lbound;
91
+ double ubound;
92
+ };
93
+
94
+ const int nactions_;
95
+ const action *const actions_;
96
+
97
+ duprow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
98
+ duprow_action(int nactions,
99
+ const action *actions,
100
+ const CoinPresolveAction *next) :
101
+ CoinPresolveAction(next),
102
+ nactions_(nactions), actions_(actions) {}
103
+
104
+ public:
105
+ const char *name() const;
106
+
107
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
108
+ const CoinPresolveAction *next);
109
+
110
+ void postsolve(CoinPostsolveMatrix *prob) const;
111
+
112
+ //~duprow_action() { delete[]actions_; }
113
+ };
114
+
115
+ class duprow3_action : public CoinPresolveAction {
116
+ struct action {
117
+ int row;
118
+ double lbound;
119
+ double ubound;
120
+ };
121
+
122
+ const int nactions_;
123
+ const action *const actions_;
124
+
125
+ duprow3_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
126
+ duprow3_action(int nactions,
127
+ const action *actions,
128
+ const CoinPresolveAction *next) :
129
+ CoinPresolveAction(next),
130
+ nactions_(nactions), actions_(actions) {}
131
+
132
+ public:
133
+ const char *name() const;
134
+
135
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
136
+ const CoinPresolveAction *next);
137
+
138
+ void postsolve(CoinPostsolveMatrix *prob) const;
139
+
140
+ //~duprow_action() { delete[]actions_; }
141
+ };
142
+
143
+ /*! \class gubrow_action
144
+ \brief Detect and remove entries whose sum is known
145
+
146
+ If we have an equality row where all entries same then
147
+ For other rows where all entries for that equality row are same
148
+ then we can delete entries and modify rhs
149
+ gubrow_action is definitely a work in progress; #postsolve is
150
+ unimplemented.
151
+ */
152
+
153
+ class gubrow_action : public CoinPresolveAction {
154
+ struct action {
155
+ int row;
156
+ double lbound;
157
+ double ubound;
158
+ };
159
+
160
+ const int nactions_;
161
+ const action *const actions_;
162
+
163
+ gubrow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
164
+ gubrow_action(int nactions,
165
+ const action *actions,
166
+ const CoinPresolveAction *next) :
167
+ CoinPresolveAction(next),
168
+ nactions_(nactions), actions_(actions) {}
169
+
170
+ public:
171
+ const char *name() const;
172
+
173
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
174
+ const CoinPresolveAction *next);
175
+
176
+ void postsolve(CoinPostsolveMatrix *prob) const;
177
+
178
+ //~gubrow_action() { delete[]actions_; }
179
+ };
180
+
181
+ /*! \class twoxtwo_action
182
+ \brief Detect interesting 2 by 2 blocks
183
+
184
+ If a variable has two entries and for each row there are only
185
+ two entries with same other variable then we can get rid of
186
+ one constraint and modify costs.
187
+
188
+ This is a work in progress - I need more examples
189
+ */
190
+
191
+ class twoxtwo_action : public CoinPresolveAction {
192
+ struct action {
193
+ double lbound_row;
194
+ double ubound_row;
195
+ double lbound_col;
196
+ double ubound_col;
197
+ double cost_col;
198
+ double cost_othercol;
199
+ int row;
200
+ int col;
201
+ int othercol;
202
+ };
203
+
204
+ const int nactions_;
205
+ const action *const actions_;
206
+
207
+ twoxtwo_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
208
+ twoxtwo_action(int nactions,
209
+ const action *actions,
210
+ const CoinPresolveAction *next) :
211
+ CoinPresolveAction(next),
212
+ nactions_(nactions), actions_(actions) {}
213
+
214
+ public:
215
+ const char *name() const;
216
+
217
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
218
+ const CoinPresolveAction *next);
219
+
220
+ void postsolve(CoinPostsolveMatrix *prob) const;
221
+
222
+ ~twoxtwo_action() { delete [] actions_; }
223
+ };
224
+
225
+ #endif
226
+
@@ -0,0 +1,116 @@
1
+ /* $Id: CoinPresolveEmpty.hpp 1561 2012-11-24 00:32:16Z lou $ */
2
+ // Copyright (C) 2002, 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 CoinPresolveEmpty_H
7
+ #define CoinPresolveEmpty_H
8
+
9
+ /*! \file
10
+
11
+ Drop/reinsert empty rows/columns.
12
+ */
13
+
14
+ const int DROP_ROW = 3;
15
+ const int DROP_COL = 4;
16
+
17
+ /*! \class drop_empty_cols_action
18
+ \brief Physically removes empty columns in presolve, and reinserts
19
+ empty columns in postsolve.
20
+
21
+ Physical removal of rows and columns should be the last activities
22
+ performed during presolve. Do them exactly once. The row-major matrix
23
+ is <b>not</b> maintained by this transform.
24
+
25
+ To physically drop the columns, CoinPrePostsolveMatrix::mcstrt_ and
26
+ CoinPrePostsolveMatrix::hincol_ are compressed, along with column bounds,
27
+ objective, and (if present) the column portions of the solution. This
28
+ renumbers the columns. drop_empty_cols_action::presolve will reconstruct
29
+ CoinPresolveMatrix::clink_.
30
+
31
+ \todo Confirm correct behaviour with solution in presolve.
32
+ */
33
+
34
+ class drop_empty_cols_action : public CoinPresolveAction {
35
+ private:
36
+ const int nactions_;
37
+
38
+ struct action {
39
+ double clo;
40
+ double cup;
41
+ double cost;
42
+ double sol;
43
+ int jcol;
44
+ };
45
+ const action *const actions_;
46
+
47
+ drop_empty_cols_action(int nactions,
48
+ const action *const actions,
49
+ const CoinPresolveAction *next) :
50
+ CoinPresolveAction(next),
51
+ nactions_(nactions),
52
+ actions_(actions)
53
+ {}
54
+
55
+ public:
56
+ const char *name() const { return ("drop_empty_cols_action"); }
57
+
58
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
59
+ const int *ecols,
60
+ int necols,
61
+ const CoinPresolveAction*);
62
+
63
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
64
+ const CoinPresolveAction *next);
65
+
66
+ void postsolve(CoinPostsolveMatrix *prob) const;
67
+
68
+ virtual ~drop_empty_cols_action() { deleteAction(actions_,action*); }
69
+ };
70
+
71
+
72
+ /*! \class drop_empty_rows_action
73
+ \brief Physically removes empty rows in presolve, and reinserts
74
+ empty rows in postsolve.
75
+
76
+ Physical removal of rows and columns should be the last activities
77
+ performed during presolve. Do them exactly once. The row-major matrix
78
+ is <b>not</b> maintained by this transform.
79
+
80
+ To physically drop the rows, the rows are renumbered, excluding empty
81
+ rows. This involves rewriting CoinPrePostsolveMatrix::hrow_ and compressing
82
+ the row bounds and (if present) the row portions of the solution.
83
+
84
+ \todo Confirm behaviour when a solution is present in presolve.
85
+ */
86
+ class drop_empty_rows_action : public CoinPresolveAction {
87
+ private:
88
+ struct action {
89
+ double rlo;
90
+ double rup;
91
+ int row;
92
+ int fill_row; // which row was moved into position row to fill it
93
+ };
94
+
95
+ const int nactions_;
96
+ const action *const actions_;
97
+
98
+ drop_empty_rows_action(int nactions,
99
+ const action *actions,
100
+ const CoinPresolveAction *next) :
101
+ CoinPresolveAction(next),
102
+ nactions_(nactions), actions_(actions)
103
+ {}
104
+
105
+ public:
106
+ const char *name() const { return ("drop_empty_rows_action"); }
107
+
108
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
109
+ const CoinPresolveAction *next);
110
+
111
+ void postsolve(CoinPostsolveMatrix *prob) const;
112
+
113
+ virtual ~drop_empty_rows_action() { deleteAction(actions_,action*); }
114
+ };
115
+ #endif
116
+
@@ -0,0 +1,181 @@
1
+ /* $Id: CoinPresolveFixed.hpp 1510 2011-12-08 23:56:01Z lou $ */
2
+ // Copyright (C) 2002, 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 CoinPresolveFixed_H
7
+ #define CoinPresolveFixed_H
8
+ #define FIXED_VARIABLE 1
9
+
10
+ /*! \class remove_fixed_action
11
+ \brief Excise fixed variables from the model.
12
+
13
+ Implements the action of virtually removing one or more fixed variables
14
+ x_j from the model by substituting the value sol_j in each constraint.
15
+ Specifically, for each constraint i where a_ij != 0, rlo_i and rup_i
16
+ are adjusted by -a_ij*sol_j and a_ij is set to 0.
17
+
18
+ There is an implicit assumption that the variable already has the correct
19
+ value. If this isn't true, corrections to row activity may be incorrect.
20
+ If you want to guard against this possibility, consider make_fixed_action.
21
+
22
+ Actual removal of the empty column from the matrix is handled by
23
+ drop_empty_cols_action. Correction of the objective function is done there.
24
+ */
25
+ class remove_fixed_action : public CoinPresolveAction {
26
+ public:
27
+ /*! \brief Structure to hold information necessary to reintroduce a
28
+ column into the problem representation.
29
+ */
30
+ struct action {
31
+ int col; ///< column index of variable
32
+ int start; ///< start of coefficients in #colels_ and #colrows_
33
+ double sol; ///< value of variable
34
+ };
35
+ /// Array of row indices for coefficients of excised columns
36
+ int *colrows_;
37
+ /// Array of coefficients of excised columns
38
+ double *colels_;
39
+ /// Number of entries in #actions_
40
+ int nactions_;
41
+ /// Vector specifying variable(s) affected by this object
42
+ action *actions_;
43
+
44
+ private:
45
+ /*! \brief Constructor */
46
+ remove_fixed_action(int nactions,
47
+ action *actions,
48
+ double * colels,
49
+ int * colrows,
50
+ const CoinPresolveAction *next);
51
+
52
+ public:
53
+ /// Returns string "remove_fixed_action".
54
+ const char *name() const;
55
+
56
+ /*! \brief Excise the specified columns.
57
+
58
+ Remove the specified columns (\p nfcols, \p fcols) from the problem
59
+ representation (\p prob), leaving the appropriate postsolve object
60
+ linked as the head of the list of postsolve objects (currently headed
61
+ by \p next).
62
+ */
63
+ static const remove_fixed_action *presolve(CoinPresolveMatrix *prob,
64
+ int *fcols,
65
+ int nfcols,
66
+ const CoinPresolveAction *next);
67
+
68
+ void postsolve(CoinPostsolveMatrix *prob) const;
69
+
70
+ /// Destructor
71
+ virtual ~remove_fixed_action();
72
+ };
73
+
74
+
75
+ /*! \relates remove_fixed_action
76
+ \brief Scan the problem for fixed columns and remove them.
77
+
78
+ A front end to collect a list of columns with equal bounds and hand them to
79
+ remove_fixed_action::presolve() for processing.
80
+ */
81
+
82
+ const CoinPresolveAction *remove_fixed(CoinPresolveMatrix *prob,
83
+ const CoinPresolveAction *next);
84
+
85
+
86
+ /*! \class make_fixed_action
87
+ \brief Fix a variable at a specified bound.
88
+
89
+ Implements the action of fixing a variable by forcing both bounds to the same
90
+ value and forcing the value of the variable to match.
91
+
92
+ If the bounds are already equal, and the value of the variable is already
93
+ correct, consider remove_fixed_action.
94
+ */
95
+ class make_fixed_action : public CoinPresolveAction {
96
+
97
+ /// Structure to preserve the bound overwritten when fixing a variable
98
+ struct action {
99
+ double bound; ///< Value of bound overwritten to fix variable.
100
+ int col ; ///< column index of variable
101
+ };
102
+
103
+ /// Number of preserved bounds
104
+ int nactions_;
105
+ /// Vector of preserved bounds, one for each variable fixed in this object
106
+ const action *actions_;
107
+
108
+ /*! \brief True to fix at lower bound, false to fix at upper bound.
109
+
110
+ Note that this applies to all variables fixed in this object.
111
+ */
112
+ const bool fix_to_lower_;
113
+
114
+ /*! \brief The postsolve object with the information required to repopulate
115
+ the fixed columns.
116
+ */
117
+ const remove_fixed_action *faction_;
118
+
119
+ /*! \brief Constructor */
120
+ make_fixed_action(int nactions, const action *actions, bool fix_to_lower,
121
+ const remove_fixed_action *faction,
122
+ const CoinPresolveAction *next)
123
+ : CoinPresolveAction(next),
124
+ nactions_(nactions), actions_(actions),
125
+ fix_to_lower_(fix_to_lower),
126
+ faction_(faction)
127
+ {}
128
+
129
+ public:
130
+ /// Returns string "make_fixed_action".
131
+ const char *name() const;
132
+
133
+ /*! \brief Perform actions to fix variables and return postsolve object
134
+
135
+ For each specified variable (\p nfcols, \p fcols), fix the variable to
136
+ the specified bound (\p fix_to_lower) by setting the variable's bounds
137
+ to be equal in \p prob. Create a postsolve object, link it at the head of
138
+ the list of postsolve objects (\p next), and return the object.
139
+ */
140
+ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
141
+ int *fcols,
142
+ int nfcols,
143
+ bool fix_to_lower,
144
+ const CoinPresolveAction *next);
145
+
146
+ /*! \brief Postsolve (unfix variables)
147
+
148
+ Back out the variables fixed by the presolve side of this object.
149
+ */
150
+ void postsolve(CoinPostsolveMatrix *prob) const;
151
+
152
+ /// Destructor
153
+ virtual ~make_fixed_action() {
154
+ deleteAction(actions_,action*);
155
+ delete faction_;
156
+ }
157
+ };
158
+
159
+ /*! \relates make_fixed_action
160
+ \brief Scan variables and fix any with equal bounds
161
+
162
+ A front end to collect a list of columns with equal bounds and hand them to
163
+ make_fixed_action::presolve() for processing.
164
+ */
165
+
166
+ const CoinPresolveAction *make_fixed(CoinPresolveMatrix *prob,
167
+ const CoinPresolveAction *next) ;
168
+
169
+ /*! \brief Transfer costs from singleton variables
170
+ \relates make_fixed_action
171
+
172
+ Transfers costs from singleton variables in equalities onto the other
173
+ variables. Will also transfer costs from one integer variable to other
174
+ integer variables with zero cost if there's a net gain in integer variables
175
+ with non-zero cost.
176
+
177
+ The relation to make_fixed_action is tenuous, but this transform should be
178
+ attempted before the initial round of variable fixing.
179
+ */
180
+ void transferCosts(CoinPresolveMatrix * prob);
181
+ #endif