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,565 @@
1
+ // $Id: CglTwomir.hpp 1119 2013-04-06 20:24:18Z stefan $
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 CglTwomir_H
7
+ #define CglTwomir_H
8
+ #include <string>
9
+
10
+ #include "CglCutGenerator.hpp"
11
+ #include "CoinFactorization.hpp"
12
+
13
+ typedef struct
14
+ {
15
+
16
+ int nz; /* current length of arrays index[] and coeff[] */
17
+ int max_nz; /* max length of arrays index[] and coeff[] */
18
+ double *coeff; /* coefficient of each variable in the constraint */
19
+ int *index; /* index of the variable (value in 0 ... nrow+ncol) */
20
+ double rhs; /* rhs of the constraint */
21
+ char sense; /* ?? is it necessary */
22
+
23
+ } DGG_constraint_t;
24
+
25
+ typedef struct{
26
+ int n;
27
+ DGG_constraint_t **c;
28
+ int *ctype;
29
+ double *alpha;
30
+ } DGG_list_t;
31
+
32
+ /******************** BASIS INFORMATION ADTs **********************************/
33
+ typedef struct{
34
+ int q_min;
35
+ int q_max;
36
+ int t_min;
37
+ int t_max;
38
+ int a_max;
39
+ int max_elements;
40
+ } cutParams;
41
+
42
+ typedef struct
43
+ {
44
+ double gomory_threshold; /* factional variable must be this away from int */
45
+ int ncol, /* number of columns in LP */
46
+ nrow, /* number of constaints in LP */
47
+ ninteger; /* number of integer variables in LP */
48
+
49
+ int nbasic_col, /* number of basic columns in the LP */
50
+ nbasic_row; /* number of basic rows in the LP */
51
+
52
+ /* the following arrays are all of size (ncol+nrow) */
53
+ int *info; /* description of each variable (see below) */
54
+ double *lb; /* specifies the lower bound (if any) of each variable */
55
+ double *ub; /* specifies the upper bound (if any) of each variable */
56
+ double *x; /* current solution */
57
+ double *rc; /* current reduced cost */
58
+ double *opt_x;
59
+
60
+ cutParams cparams;
61
+ } DGG_data_t;
62
+
63
+ /* the following macros allow us to decode the info of the DGG_data
64
+ type. The encoding is as follows,
65
+ bit 1 : if the variable is basic or not (non-basic).
66
+ bit 2 : if the variable is integer or or not (rational).
67
+ bit 3 : if the variable is structural or not (artifical).
68
+ bit 4 : if the variable is non-basic and at its upper bound
69
+ (else if non-basic at lower bound). */
70
+
71
+ #define DGG_isBasic(data,idx) ((data->info[idx])&1)
72
+ #define DGG_isInteger(data,idx) ((data->info[idx] >> 1)&1)
73
+ #define DGG_isStructural(data,idx) ((data->info[idx] >> 2)&1)
74
+ #define DGG_isEqualityConstraint(data,idx) ((data->info[idx] >> 3)&1)
75
+ #define DGG_isNonBasicAtUB(data,idx) ((data->info[idx] >> 4)&1)
76
+ #define DGG_isNonBasicAtLB(data,idx) ((data->info[idx] >> 5)&1)
77
+ #define DGG_isConstraintBoundedAbove(data,idx) ((data->info[idx] >> 6)&1)
78
+ #define DGG_isConstraintBoundedBelow(data,idx) ((data->info[idx] >> 7)&1)
79
+
80
+ #define DGG_setIsBasic(data,idx) ((data->info[idx]) |= 1)
81
+ #define DGG_setIsInteger(data,idx) ((data->info[idx]) |= (1<<1))
82
+ #define DGG_setIsStructural(data,idx) ((data->info[idx]) |= (1<<2))
83
+ #define DGG_setEqualityConstraint(data,idx) ((data->info[idx]) |= (1<<3))
84
+ #define DGG_setIsNonBasicAtUB(data,idx) ((data->info[idx]) |= (1<<4))
85
+ #define DGG_setIsNonBasicAtLB(data,idx) ((data->info[idx]) |= (1<<5))
86
+ #define DGG_setIsConstraintBoundedAbove(data,idx) ((data->info[idx]) |= (1<<6))
87
+ #define DGG_setIsConstraintBoundedBelow(data,idx) ((data->info[idx]) |= (1<<7))
88
+
89
+ class CoinWarmStartBasis;
90
+ /** Twostep MIR Cut Generator Class */
91
+ class CglTwomir : public CglCutGenerator {
92
+
93
+ friend void CglTwomirUnitTest(const OsiSolverInterface * siP,
94
+ const std::string mpdDir );
95
+
96
+
97
+ public:
98
+
99
+ /// Problem name
100
+ std::string probname_;
101
+
102
+ /**@name Generate Cuts */
103
+ //@{
104
+ /** Generate Two step MIR cuts either from the tableau rows or from the
105
+ formulation rows
106
+ */
107
+ virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
108
+ const CglTreeInfo info = CglTreeInfo());
109
+ /// Return true if needs optimal basis to do cuts (will return true)
110
+ virtual bool needsOptimalBasis() const;
111
+
112
+ /**@name Change criterion on which scalings to use (default = 1,1,1,1) */
113
+ //@{
114
+ /// Set
115
+ void setMirScale (int tmin, int tmax) {t_min_ = tmin; t_max_ = tmax;}
116
+ void setTwomirScale (int qmin, int qmax) {q_min_ = qmin; q_max_ = qmax;}
117
+ void setAMax (int a) {a_max_ = a;}
118
+ void setMaxElements (int n) {max_elements_ = n;}
119
+ void setMaxElementsRoot (int n) {max_elements_root_ = n;}
120
+ void setCutTypes (bool mir, bool twomir, bool tab, bool form)
121
+ { do_mir_ = mir; do_2mir_ = twomir; do_tab_ = tab; do_form_ = form;}
122
+ void setFormulationRows (int n) {form_nrows_ = n;}
123
+
124
+ /// Get
125
+ int getTmin() const {return t_min_;}
126
+ int getTmax() const {return t_max_;}
127
+ int getQmin() const {return q_min_;}
128
+ int getQmax() const {return q_max_;}
129
+ int getAmax() const {return a_max_;}
130
+ int getMaxElements() const {return max_elements_;}
131
+ int getMaxElementsRoot() const {return max_elements_root_;}
132
+ int getIfMir() const { return do_mir_;}
133
+ int getIfTwomir() const { return do_2mir_;}
134
+ int getIfTableau() const { return do_tab_;}
135
+ int getIfFormulation() const { return do_form_;}
136
+ //@}
137
+
138
+ /**@name Change criterion on which variables to look at. All ones
139
+ more than "away" away from integrality will be investigated
140
+ (default 0.05) */
141
+ //@{
142
+ /// Set away
143
+ void setAway(double value);
144
+ /// Get away
145
+ double getAway() const;
146
+ /// Set away at root
147
+ void setAwayAtRoot(double value);
148
+ /// Get away at root
149
+ double getAwayAtRoot() const;
150
+ /// Return maximum length of cut in tree
151
+ virtual int maximumLengthOfCutInTree() const
152
+ { return max_elements_;}
153
+ //@}
154
+
155
+ /**@name Change way TwoMir works */
156
+ //@{
157
+ /// Pass in a copy of original solver (clone it)
158
+ void passInOriginalSolver(OsiSolverInterface * solver);
159
+ /// Returns original solver
160
+ inline OsiSolverInterface * originalSolver() const
161
+ { return originalSolver_;}
162
+ /// Set type - 0 normal, 1 add original matrix one, 2 replace
163
+ inline void setTwomirType(int type)
164
+ { twomirType_=type;}
165
+ /// Return type
166
+ inline int twomirType() const
167
+ { return twomirType_;}
168
+ //@}
169
+
170
+ /**@name Constructors and destructors */
171
+ //@{
172
+ /// Default constructor
173
+ CglTwomir ();
174
+
175
+ /// Copy constructor
176
+ CglTwomir (const CglTwomir &);
177
+
178
+ /// Clone
179
+ virtual CglCutGenerator * clone() const;
180
+
181
+ /// Assignment operator
182
+ CglTwomir & operator=(const CglTwomir& rhs);
183
+
184
+ /// Destructor
185
+ virtual ~CglTwomir ();
186
+ /// Create C++ lines to get to current state
187
+ virtual std::string generateCpp( FILE * fp);
188
+ /// This can be used to refresh any inforamtion
189
+ virtual void refreshSolver(OsiSolverInterface * solver);
190
+ //@}
191
+
192
+ private:
193
+ // Private member data
194
+ /**@name Private member data */
195
+ //@{
196
+ /// Threadsafe random number generator
197
+ CoinThreadRandom randomNumberGenerator_;
198
+ /// Original solver
199
+ OsiSolverInterface * originalSolver_;
200
+ /// Only investigate if more than this away from integrality
201
+ double away_;
202
+ /// Only investigate if more than this away from integrality (at root)
203
+ double awayAtRoot_;
204
+ /// Type - 0 normal, 1 add original matrix one, 2 replace
205
+ int twomirType_;
206
+ bool do_mir_;
207
+ bool do_2mir_;
208
+ bool do_tab_;
209
+ bool do_form_;
210
+
211
+ int t_min_; /// t_min - first value of t to use for tMIR inequalities
212
+ int t_max_; /// t_max - last value of t to use for tMIR inequalities
213
+ int q_min_; /// q_min - first value of t to use for 2-Step tMIR inequalities
214
+ int q_max_; /// q_max - last value of t to use for 2-Step tMIR inequalities
215
+ int a_max_; /// a_max - maximum value of bhat/alpha
216
+ int max_elements_; /// Maximum number of elements in cut
217
+ int max_elements_root_; /// Maximum number of elements in cut at root
218
+ int form_nrows_; //number of rows on which formulation cuts will be generated
219
+ //@}
220
+ };
221
+
222
+ //#############################################################################
223
+
224
+ /*
225
+ #include <stdlib.h>
226
+ #include <stdio.h>
227
+ #include <stdarg.h>
228
+ #include <math.h>
229
+ #include <float.h>
230
+ #include <cassert>
231
+ #include <iostream.h>
232
+ */
233
+
234
+ /******************** DEBUG DEFINITIONS ***************************************/
235
+
236
+ #define DGG_DEBUG_DGG 1
237
+ #define DGG_TRACE_ERRORS 0
238
+ #define DGG_DISPLAY 0
239
+ #define DGG_AUTO_CHECK_CUT_OFF_OPTIMAL 1
240
+
241
+ /******************** CONFIGURATION DEFAULTS **********************************/
242
+
243
+ #define DGG_DEFAULT_METHOD 2
244
+ #define DGG_DEFAULT_TMIN 1
245
+ #define DGG_DEFAULT_TMAX 1
246
+ #define DGG_DEFAULT_TAUMIN 2
247
+ #define DGG_DEFAULT_TAUMAX 6
248
+ #define DGG_DEFAULT_MAX_CUTS 500
249
+ #define DGG_DEFAULT_IMPROVEMENT_THRESH 0.001
250
+ #define DGG_DEFAULT_NBELOW_THRESH INT_MAX
251
+ #define DGG_DEFAULT_NROOT_ROUNDS 2
252
+ #define DGG_DEFAULT_NEGATIVE_SCALED_TWOSTEPS 0
253
+ #define DGG_DEFAULT_ALPHA_RULE 0
254
+ #define DGG_DEFAULT_CUT_INC 250
255
+ #define DGG_DEFAULT_CUT_FORM 0
256
+ #define DGG_DEFAULT_NICEFY 0
257
+ #define DGG_DEFAULT_ONLY_DELAYED 0
258
+ #define DGG_DEFAULT_DELAYED_FREQ 9999999
259
+ #define DGG_DEFAULT_LPROWS_FREQ 9999999
260
+ #define DGG_DEFAULT_WHICH_FORMULATION_CUTS 2
261
+
262
+ /******************** SOLVER CONFIGURATION DEFINITIONS ************************/
263
+
264
+ #define DGG_OSI 0
265
+ #define DGG_CPX 1
266
+ #define DGG_QSO 2
267
+
268
+ /* determines the solver to be used */
269
+ #define DGG_SOLVER DGG_OSI
270
+
271
+ /* adds checking routines to make sure solver works as expected */
272
+ #define DGG_DEBUG_SOLVER 0
273
+
274
+ /* turn off screen output from solver */
275
+ #define DGG_SOLVER_SCREEN_FLAG 0
276
+
277
+ /******************** CUT DEFINITIONS *****************************************/
278
+
279
+ /* internal names for cut types */
280
+ #define DGG_TMIR_CUT 1
281
+ #define DGG_2STEP_CUT 2
282
+
283
+ /* internal names for alpha-selection rules */
284
+ #define DGG_ALPHA_MIN_SUM 0
285
+ #define DGG_ALPHA_RANDOM_01 1
286
+ #define DGG_ALPHA_RANDOM_COEFF 2
287
+ #define DGG_ALPHA_ALL 3
288
+ #define DGG_ALPHA_MAX_STEEP 5
289
+
290
+ /******************** PRECISION & NUMERICAL ISSUES DEFINITIONS ****************/
291
+
292
+ /* how steep a cut must be before adding it to the lp */
293
+ #define DGG_MIN_STEEPNESS 1.0e-4
294
+ #define DGG_MAX_L2NORM 1.0e7
295
+
296
+ /* 0 = min steepness, 1 = max norm */
297
+ #define DGG_NORM_CRITERIA 1
298
+
299
+ /* internal representation of +infinity */
300
+ #define UB_MAX DBL_MAX
301
+
302
+ /* used to define how fractional a basic-integer variable must be
303
+ before choosing to use it to generate a TMIR cut on.
304
+ OSI's default is 1.0e-7 */
305
+ #define DGG_GOMORY_THRESH 0.005
306
+
307
+ #define DGG_RHS_THRESH 0.005
308
+
309
+ /* used for comparing variables to their upper bounds.
310
+ OSI's default is 1.0e-7.
311
+ We set it to 1.0e6 because e-7 seems too sensitive.
312
+ In fact, with e-7 the problem dsbmip.mps complains. */
313
+ #define DGG_BOUND_THRESH 1.0e-6
314
+
315
+ /* used for comparing the lhs (activity) value of a tableau row
316
+ with the rhs. This is only used for debugging purposes. */
317
+ #define DGG_EQUALITY_THRESH 1.0e-5
318
+
319
+ /* used for comparing a variable's lower bound to 0.0
320
+ and determining if we need to shift the variable */
321
+ #define DGG_SHIFT_THRESH 1.0e-6
322
+
323
+ /* used for determing how far from an integer is still an integer.
324
+ This value is used for comparing coefficients to integers.
325
+ OSI's default is 1.0e-10. */
326
+ #define DGG_INTEGRALITY_THRESH 1.0e-10
327
+
328
+ /* the min value that a coeff can have in the tableau row
329
+ before being set to zero. */
330
+ #define CBC_CHECK_CUT
331
+ #ifndef CBC_CHECK_CUT
332
+ #define DGG_MIN_TABLEAU_COEFFICIENT 1.0e-8
333
+ #else
334
+ #define DGG_MIN_TABLEAU_COEFFICIENT 1.0e-12
335
+ #endif
336
+
337
+ /* smallest value rho is allowed to have for a simple 2-step MIR
338
+ (ie: not an extended two-step MIR) */
339
+ #define DGG_MIN_RHO 1.0e-7
340
+ #define DGG_MIN_ALPHA 1.0e-7
341
+
342
+ /* when a slack is null: used to check if a cut is satisfied or not. */
343
+ #define DGG_NULL_SLACK 1.0e-5
344
+
345
+ /* nicefy constants */
346
+ #define DGG_NICEFY_MIN_ABSVALUE 1.0e-13
347
+ #define DGG_NICEFY_MIN_FIX 1.0e-7
348
+ #define DGG_NICEFY_MAX_PADDING 1.0e-6
349
+ #define DGG_NICEFY_MAX_RATIO 1.0e9
350
+
351
+
352
+ /******************** ERROR-CATCHING MACROS ***********************************/
353
+ #if DGG_TRACE_ERRORS > 0
354
+
355
+ #define __DGG_PRINT_LOC__(F) fprintf(((F==0)?stdout:F), " in %s (%s:%d)\n", __func__, __FILE__, __LINE__)
356
+
357
+ #define DGG_THROW(A,REST...) {\
358
+ fprintf(stdout, ##REST); \
359
+ __DGG_PRINT_LOC__(stdout); \
360
+ return (A);}
361
+
362
+ #define DGG_IF_EXIT(A,B,REST...) {\
363
+ if(A) {\
364
+ fprintf(stdout, ##REST); \
365
+ __DGG_PRINT_LOC__(stdout); \
366
+ exit(B);}}
367
+
368
+ #define DGG_CHECKRVAL(A,B) {\
369
+ if(A) {\
370
+ __DGG_PRINT_LOC__(stdout); \
371
+ return B; } }
372
+
373
+ #define DGG_CHECKRVAL1(A,B) {\
374
+ if(A) {\
375
+ __DGG_PRINT_LOC__(stdout); \
376
+ rval = B; goto CLEANUP; } }
377
+
378
+ #define DGG_WARNING(A, REST...) {\
379
+ if(A) {\
380
+ fprintf(stdout, ##REST); \
381
+ __DGG_PRINT_LOC__(stdout); \
382
+ }}
383
+
384
+ #define DGG_TEST(A,B,REST...) {\
385
+ if(A) DGG_THROW(B,##REST) }
386
+
387
+ #define DGG_TEST2(A,B,C,REST) {DGG_TEST(A,B,C,REST) }
388
+ #define DGG_TEST3(A,B,C,D,REST) {DGG_TEST(A,B,C,D,REST) }
389
+
390
+ #else
391
+
392
+ #define DGG_IF_EXIT(A,B,REST) {if(A) {fprintf(stdout, REST);exit(B);}}
393
+
394
+ #define DGG_THROW(A,B) return(A)
395
+
396
+ #define DGG_CHECKRVAL(A,B) { if(A) return(B); }
397
+ #define DGG_CHECKRVAL1(A,B){ if(A) { rval = B; goto CLEANUP; } }
398
+
399
+ #define DGG_TEST(A,B,REST) { if(A) return(B);}
400
+ #define DGG_TEST2(A,B,REST,C) { DGG_TEST(A,B,REST) }
401
+ #define DGG_TEST3(A,B,REST,C,D) { DGG_TEST(A,B,REST) }
402
+
403
+ #endif
404
+
405
+ /******************** SIMPLE MACROS AND FUNCTIONS *****************************/
406
+
407
+ #define DGG_MIN(a,b) ( (a<b)?a:b )
408
+ #define DGG_MAX(a,b) ( (a>b)?a:b )
409
+ #define KREM(vht,alpha,tau) (DGG_MIN( ceil(vht / alpha), tau ) - 1)
410
+ #define LMIN(vht, d, bht) (DGG_MIN( floor(d*bht/bht), d))
411
+ #define ABOV(v) (v - floor(v))
412
+ #define QINT(vht,bht,tau) ( (int)floor( (vht*(tau-1))/bht ) )
413
+ #define V2I(bht,tau,i) ( ((i+1)*bht / tau) )
414
+
415
+ int DGG_is_even(double vht, double bht, int tau, int q);
416
+ double frac_part(double value);
417
+ int DGG_is_a_multiple_of_b(double a, double b);
418
+
419
+
420
+ /* free function for DGG_data_t. Frees internal arrays and data structure */
421
+ int DGG_freeData( DGG_data_t *data );
422
+
423
+ /******************** CONSTRAINT ADTs *****************************************/
424
+ DGG_constraint_t* DGG_newConstraint(int max_arrays);
425
+ void DGG_freeConstraint(DGG_constraint_t *c);
426
+ DGG_constraint_t *DGG_copyConstraint(DGG_constraint_t *c);
427
+ void DGG_scaleConstraint(DGG_constraint_t *c, int t);
428
+
429
+ /******************** CONFIGURATION *******************************************/
430
+ void DGG_list_init (DGG_list_t *l);
431
+ int DGG_list_addcut (DGG_list_t *l, DGG_constraint_t *cut, int ctype, double alpha);
432
+ void DGG_list_delcut (DGG_list_t *l, int i);
433
+ void DGG_list_free(DGG_list_t *l);
434
+
435
+ /******************* SOLVER SPECIFIC METHODS **********************************/
436
+ DGG_data_t *DGG_getData(const void *solver_ptr);
437
+
438
+ /******************* CONSTRAINT MANIPULATION **********************************/
439
+
440
+ /* DGG_transformConstraint: manipulates a constraint in the following way:
441
+
442
+ packs everything in output
443
+
444
+ 1 - variables at their upper bounds are substituted for their
445
+ complements. This is done by adjusting the coefficients and
446
+ the right hand side (simple substitution).
447
+
448
+ 2 - variables with non-zero lower bounds are shifted. */
449
+
450
+ int DGG_transformConstraint( DGG_data_t *data,
451
+ double **x_out,
452
+ double **rc_out,
453
+ char **isint_out,
454
+ DGG_constraint_t *constraint );
455
+
456
+ /* DGG_unTransformConstraint :
457
+
458
+ 1 - Undoes step (1) of DGG_transformConstraint
459
+ 2 - Undoes step (2) of DGG_transformConstraint */
460
+
461
+ int DGG_unTransformConstraint( DGG_data_t *data,
462
+ DGG_constraint_t *constraint );
463
+
464
+ /* substitutes each slack variable by the structural variables which
465
+ define it. This function, hence, changes the constraint 'cut'. */
466
+
467
+ int DGG_substituteSlacks( const void *solver_ptr,
468
+ DGG_data_t *data,
469
+ DGG_constraint_t *cut );
470
+
471
+ int DGG_nicefyConstraint( const void *solver_ptr,
472
+ DGG_data_t *data,
473
+ DGG_constraint_t *cut);
474
+
475
+ /******************* CUT GENERATION *******************************************/
476
+ int DGG_getFormulaConstraint( int row_idx,
477
+ const void *solver_ptr,
478
+ DGG_data_t *data,
479
+ DGG_constraint_t* row );
480
+
481
+ int DGG_getTableauConstraint( int index,
482
+ const void *solver_ptr,
483
+ DGG_data_t *data,
484
+ DGG_constraint_t* tabrow,
485
+ const int * colIsBasic,
486
+ const int * rowIsBasic,
487
+ CoinFactorization & factorization,
488
+ int mode );
489
+
490
+ DGG_constraint_t* DGG_getSlackExpression(const void *solver_ptr, DGG_data_t* data, int row_index);
491
+
492
+ int DGG_generateTabRowCuts( DGG_list_t *list,
493
+ DGG_data_t *data,
494
+ const void *solver_ptr );
495
+
496
+ int DGG_generateFormulationCuts( DGG_list_t *list,
497
+ DGG_data_t *data,
498
+ const void *solver_ptr,
499
+ int nrows,
500
+ CoinThreadRandom & generator);
501
+
502
+
503
+ int DGG_generateFormulationCutsFromBase( DGG_constraint_t *base,
504
+ double slack,
505
+ DGG_list_t *list,
506
+ DGG_data_t *data,
507
+ const void *solver_ptr,
508
+ CoinThreadRandom & generator);
509
+
510
+ int DGG_generateCutsFromBase( DGG_constraint_t *base,
511
+ DGG_list_t *list,
512
+ DGG_data_t *data,
513
+ const void *solver_ptr );
514
+
515
+ int DGG_buildMir( char *isint,
516
+ DGG_constraint_t *base,
517
+ DGG_constraint_t **cut_out );
518
+
519
+ int DGG_build2step( double alpha,
520
+ char *isint,
521
+ DGG_constraint_t *base,
522
+ DGG_constraint_t **cut_out );
523
+
524
+ int DGG_addMirToList ( DGG_constraint_t *base,
525
+ char *isint,
526
+ double *x,
527
+ DGG_list_t *list,
528
+ DGG_data_t *data,
529
+ DGG_constraint_t *orig_base );
530
+
531
+ int DGG_add2stepToList ( DGG_constraint_t *base,
532
+ char *isint,
533
+ double *x,
534
+ double *rc,
535
+ DGG_list_t *list,
536
+ DGG_data_t *data,
537
+ DGG_constraint_t *orig_base );
538
+
539
+ /******************* CUT INFORMATION ******************************************/
540
+
541
+ double DGG_cutLHS(DGG_constraint_t *c, double *x);
542
+ int DGG_isCutDesirable(DGG_constraint_t *c, DGG_data_t *d);
543
+
544
+ /******************* TEST / DEBUGGING ROUTINES ********************************/
545
+
546
+ int DGG_isConstraintViolated(DGG_data_t *d, DGG_constraint_t *c);
547
+
548
+ int DGG_isBaseTrivial(DGG_data_t *d, DGG_constraint_t* c);
549
+ int DGG_is2stepValid(double alpha, double bht);
550
+
551
+ int DGG_cutsOffPoint(double *x, DGG_constraint_t *cut);
552
+
553
+ //#############################################################################
554
+ /** A function that tests the methods in the CglTwomir class. The
555
+ only reason for it not to be a member method is that this way it doesn't
556
+ have to be compiled into the library. And that's a gain, because the
557
+ library should be compiled with optimization on, but this method should be
558
+ compiled with debugging. */
559
+ void CglTwomirUnitTest(const OsiSolverInterface * siP,
560
+ const std::string mpdDir);
561
+
562
+
563
+ #endif
564
+
565
+
@@ -0,0 +1,133 @@
1
+ // $Id: CglZeroHalf.hpp 1122 2013-04-06 20:39:53Z stefan $
2
+ // Copyright (C) 2010, 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
+ #ifndef CglZeroHalf_H
6
+ #define CglZeroHalf_H
7
+
8
+ #include <string>
9
+
10
+ #include "CglCutGenerator.hpp"
11
+ #include "CoinPackedMatrix.hpp"
12
+ #include "Cgl012cut.hpp"
13
+
14
+ /** Zero Half Cut Generator Class
15
+
16
+ This class generates zero half cuts via the following method:
17
+
18
+ See -
19
+
20
+ G. Andreello, A. Caprara, M. Fischetti,
21
+ “Embedding Cuts in a Branch and Cut Framework: a Computational Study
22
+ with {0,1/2}-Cuts”, INFORMS Journal on Computing 19(2), 229-238, 2007.
23
+
24
+ */
25
+
26
+ class CglZeroHalf : public CglCutGenerator {
27
+ friend void CglZeroHalfUnitTest(const OsiSolverInterface * siP,
28
+ const std::string mpdDir );
29
+
30
+ public:
31
+
32
+ /**@name Generate Cuts */
33
+ //@{
34
+ /** Generate zero half cuts for the model accessed through the solver interface.
35
+ Insert generated cuts into the cut set cs.
36
+ */
37
+ virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
38
+ const CglTreeInfo info = CglTreeInfo());
39
+ //@}
40
+
41
+ /**@name Sets and Gets */
42
+ //@{
43
+ /// Get flags
44
+ inline int getFlags() const
45
+ { return flags_;}
46
+ /// Set flags
47
+ inline void setFlags(int value)
48
+ { flags_ = value;}
49
+ //@}
50
+
51
+ /**@name Constructors and destructors */
52
+ //@{
53
+ /// Default constructor
54
+ CglZeroHalf ();
55
+
56
+ /// Copy constructor
57
+ CglZeroHalf (
58
+ const CglZeroHalf &);
59
+
60
+ /// Clone
61
+ virtual CglCutGenerator * clone() const;
62
+
63
+ /// Assignment operator
64
+ CglZeroHalf &
65
+ operator=(
66
+ const CglZeroHalf& rhs);
67
+
68
+ /// Destructor
69
+ virtual
70
+ ~CglZeroHalf ();
71
+ /// Create C++ lines to get to current state
72
+ virtual std::string generateCpp( FILE * fp);
73
+ /// This can be used to refresh any information
74
+ virtual void refreshSolver(OsiSolverInterface * solver);
75
+ //@}
76
+
77
+ private:
78
+
79
+ // Private member methods
80
+
81
+ /**@name Private methods */
82
+ //@{
83
+ //@}
84
+
85
+
86
+ /**@name Private member data */
87
+ //@{
88
+ /// number of rows in the ILP matrix
89
+ int mr_;
90
+ /// number of columns in the ILP matrix
91
+ int mc_;
92
+ /// number of nonzero's in the ILP matrix
93
+ int mnz_;
94
+ /// starting position of each row in arrays mtind and mtval
95
+ int *mtbeg_;
96
+ /// number of entries of each row in arrays mtind and mtval
97
+ int *mtcnt_;
98
+ /// column indices of the nonzero entries of the ILP matrix
99
+ int *mtind_;
100
+ /// values of the nonzero entries of the ILP matrix
101
+ int *mtval_;
102
+ /// lower bounds on the variables
103
+ int *vlb_;
104
+ /// upper bounds on the variables
105
+ int *vub_;
106
+ /// right hand sides of the constraints
107
+ int *mrhs_;
108
+ /// senses of the constraints: 'L', 'G' or 'E'
109
+ char *msense_;
110
+ /// Cgl012Cut object to make thread safe
111
+ Cgl012Cut cutInfo_;
112
+ /** Flags
113
+ 1 bit - global cuts
114
+ */
115
+ int flags_;
116
+ //@}
117
+ };
118
+ /// A simple Dijkstra shortest path - make better later
119
+ #ifndef CGL_NEW_SHORT
120
+ void cglShortestPath(cgl_graph * graph, int source, int maximumLength);
121
+ #else
122
+ void cglShortestPath(auxiliary_graph * graph, int source, int maximumLength);
123
+ #endif
124
+ //#############################################################################
125
+ /** A function that tests the methods in the CglZeroHalf class. The
126
+ only reason for it not to be a member method is that this way it doesn't
127
+ have to be compiled into the library. And that's a gain, because the
128
+ library should be compiled with optimization on, but this method should be
129
+ compiled with debugging. */
130
+ void CglZeroHalfUnitTest(const OsiSolverInterface * siP,
131
+ const std::string mpdDir );
132
+
133
+ #endif