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,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