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,464 @@
1
+ // $Id: Cgl012cut.hpp 1149 2013-10-21 18:23:53Z tkr $
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
+ /** @file 012cut.h Include file for C coded 0-1/2 separator */
6
+ #ifndef CGL012CUT
7
+ #define CGL012CUT
8
+ #include <cstdio>
9
+ #include <cstdlib>
10
+ #include <cmath>
11
+
12
+ #define CGL_NEW_SHORT
13
+ #ifndef CGL_NEW_SHORT
14
+ typedef /* arc */
15
+ struct arc_st
16
+ {
17
+ int len; /* length of the arc */
18
+ struct node_st *head; /* head node */
19
+ }
20
+ arc;
21
+
22
+ typedef /* node */
23
+ struct node_st
24
+ {
25
+ arc *first; /* first outgoing arc */
26
+ int dist; /* tentative shortest path length */
27
+ struct node_st *parent; /* parent pointer */
28
+ struct node_st *next; /* next node in queue */
29
+ struct node_st *prev; /* previous node in queue */
30
+ int status; /* status of node */
31
+ int temp; /* for temporary labels */
32
+ int index; /* index of the node in the graph */
33
+ } node;
34
+ #endif
35
+ typedef struct
36
+ {
37
+ int length; // Length of arc
38
+ int to; // To node
39
+ } cgl_arc;
40
+
41
+ typedef struct
42
+ {
43
+ cgl_arc * firstArc; // First outgoing arc
44
+ int parentNode; // Parent node in shortest path
45
+ int index; // Which node I am
46
+ int distanceBack; // Distance back to source
47
+ } cgl_node;
48
+
49
+ typedef struct
50
+ {
51
+ int nnodes; // Number of nodes in graph
52
+ int narcs; // Number of arcs in graph
53
+ cgl_node * nodes;
54
+ cgl_arc * arcs;
55
+ } cgl_graph;
56
+ /* #define PRINT */
57
+ /* #define PRINT_CUTS */
58
+ #define REDUCTION
59
+
60
+ typedef struct {
61
+ int mr; /* number of rows in the ILP matrix */
62
+ int mc; /* number of columns in the ILP matrix */
63
+ int mnz; /* number of nonzero's in the ILP matrix */
64
+ int *mtbeg; /* starting position of each row in arrays mtind and mtval */
65
+ int *mtcnt; /* number of entries of each row in arrays mtind and mtval */
66
+ int *mtind; /* column indices of the nonzero entries of the ILP matrix */
67
+ int *mtval; /* values of the nonzero entries of the ILP matrix */
68
+ int *vlb; /* lower bounds on the variables */
69
+ int *vub; /* upper bounds on the variables */
70
+ int *mrhs; /* right hand sides of the constraints */
71
+ char *msense; /* senses of the constraints: 'L', 'G' or 'E' */
72
+ const double *xstar; /* current optimal solution of the LP relaxation */
73
+ } ilp;
74
+
75
+ typedef struct {
76
+ int mr; /* number of rows in the parity ILP matrix */
77
+ int mc; /* number of columns in the parity ILP matrix */
78
+ int mnz; /* number of 1's in the parity ILP matrix */
79
+ int *mtbeg; /* starting position of each row in arrays mtind and mtval */
80
+ int *mtcnt; /* number of entries of each row in arrays mtind and mtval */
81
+ int *mtind; /* column indices of the 1's of the parity ILP matrix */
82
+ short int *mrhs; /* right hand side parity of the constraints */
83
+ double *xstar; /* current optimal solution of the LP relaxation */
84
+ double *slack; /* slack of the constraints w.r.t. xstar */
85
+ short int *row_to_delete; /* flag for marking rows not to be considered */
86
+ short int *col_to_delete; /* flag for marking columns not to be considered */
87
+ int *gcd; /* greatest common divisor of each row in the input ILP matrix */
88
+ short int *possible_weak; /* possible weakening types of each column */
89
+ short int *type_even_weak; /* type of even weakening of each column
90
+ (lower or upper bound weakening) */
91
+ short int *type_odd_weak; /* type of odd weakening of each column
92
+ (lower or upper bound weakening) */
93
+ double *loss_even_weak; /* loss for the even weakening of each column */
94
+ double *loss_odd_weak; /* loss for the odd weakening of each column */
95
+ double *min_loss_by_weak; /* minimum loss for the weakening of each column */
96
+ } parity_ilp;
97
+
98
+ typedef struct {
99
+ int nweak; /* number of variables weakened */
100
+ int *var; /* list of variables weakened */
101
+ short int *type; /* type of weakening (lower or upper bound weakening) */
102
+ } info_weak;
103
+
104
+ typedef struct {
105
+ int endpoint1, endpoint2; /* endpoints of the edge */
106
+ double weight; /* edge weight */
107
+ short int parity; /* edge parity (even or odd) */
108
+ int constr; /* constraint associated with the edge */
109
+ info_weak *weak; /* weakening information */
110
+ } edge;
111
+
112
+ typedef struct {
113
+ int nnodes; /* number of nodes */
114
+ int nedges; /* number of edges */
115
+ int *nodes; /* indexes of the ILP columns corresponding to the nodes */
116
+ int *ind; /* indexes of the nodes corresponding to the ILP columns */
117
+ edge **even_adj_list; /* pointers to the even edges */
118
+ edge **odd_adj_list; /* pointers to the odd edges */
119
+ } separation_graph;
120
+
121
+ #ifndef CGL_NEW_SHORT
122
+ typedef struct {
123
+ int nnodes; /* number of nodes */
124
+ int narcs; /* number of arcs */
125
+ node *nodes; /* array of the nodes - see "types_db.h" */
126
+ arc *arcs; /* array of the arcs - see "types_db.h" */
127
+ } auxiliary_graph;
128
+ #else
129
+ typedef struct {
130
+ int nnodes; /* number of nodes */
131
+ int narcs; /* number of arcs */
132
+ cgl_node *nodes; /* array of the nodes - see "types_db.h" */
133
+ cgl_arc *arcs; /* array of the arcs - see "types_db.h" */
134
+ } auxiliary_graph;
135
+ #endif
136
+
137
+ typedef struct {
138
+ long dist; /* distance from/to root */
139
+ int pred; /* index of the predecessor */
140
+ } short_path_node;
141
+
142
+ typedef struct {
143
+ double weight; /* overall weight of the cycle */
144
+ int length; /* number of edges in the cycle */
145
+ edge **edge_list; /* list of edges in the cycle */
146
+ } cycle;
147
+
148
+ typedef struct {
149
+ int cnum; /* overall number of cycles */
150
+ cycle **list; /* pointers to the cycles in the list */
151
+ } cycle_list;
152
+
153
+ typedef struct {
154
+ int n_of_constr; /* number of constraints combined to get the cut */
155
+ int *constr_list; /* list of the constraints combined */
156
+ short int *in_constr_list; /* flag saying whether a given constraint is
157
+ in the list of constraints of the cut (IN)
158
+ or not (OUT) */
159
+ int cnzcnt; /* overall number of nonzero's in the cut */
160
+ int *cind; /* column indices of the nonzero entries of the cut */
161
+ int *cval; /* values of the nonzero entries of the cut */
162
+ int crhs; /* right hand side of the cut */
163
+ char csense; /* sense of the cut: 'L', 'G' or 'E' */
164
+ double violation; /* violation of the cut w.r.t. the current LP solution */
165
+ } cut;
166
+
167
+ typedef struct {
168
+ int cnum; /* overall number of cuts */
169
+ cut **list; /* pointers to the cuts in the list */
170
+ } cut_list;
171
+
172
+ typedef struct {
173
+ int n_of_constr; /* number of constraints combined to get the cut */
174
+ int *constr_list; /* list of the constraints combined */
175
+ int code; /* identifier of the cut */
176
+ int n_it_violated; /* number of consecutive iterations (starting from the
177
+ last and going backward) in which the cut was
178
+ violated by the LP solution */
179
+ int it_found; /* iteration in which the cut was separated */
180
+ double score; /* score of the cut, used to choose wich cut should be
181
+ added to the current LP (if any) */
182
+ } pool_cut;
183
+
184
+ typedef struct {
185
+ int cnum; /* overall number of cuts */
186
+ pool_cut **list; /* pointers to the cuts in the list */
187
+ int *ncod; /* number of cuts with a given code in the pool */
188
+ } pool_cut_list;
189
+
190
+ typedef struct {
191
+ int *ccoef; /* coefficients of the cut */
192
+ int crhs; /* right hand side of the cut */
193
+ int pool_index; /* index of the cut in the pool */
194
+ double score; /* cut score (to be maximized) */
195
+ } select_cut;
196
+
197
+ typedef struct {
198
+ int n_it_zero; /* number of consecutive iterations (starting from the
199
+ last and going backward) in which each variable took
200
+ the value 0 in the LP solution */
201
+ } log_var;
202
+ /** 012Cut Generator Class
203
+
204
+ This class is to make Cgl01cut thread safe etc
205
+ */
206
+
207
+ class Cgl012Cut {
208
+
209
+ public:
210
+
211
+ /**@name Generate Cuts */
212
+ //@{
213
+ int sep_012_cut(
214
+ /*
215
+ INPUT parameters:
216
+ */
217
+ int mr, /* number of rows in the ILP matrix */
218
+ int mc, /* number of columns in the ILP matrix */
219
+ int mnz, /* number of nonzero's in the ILP matrix */
220
+ int *mtbeg, /* starting position of each row in arrays mtind and mtval */
221
+ int *mtcnt, /* number of entries of each row in arrays mtind and mtval */
222
+ int *mtind, /* column indices of the nonzero entries of the ILP matrix */
223
+ int *mtval, /* values of the nonzero entries of the ILP matrix */
224
+ int *vlb, /* lower bounds on the variables */
225
+ int *vub, /* upper bounds on the variables */
226
+ int *mrhs, /* right hand sides of the constraints */
227
+ char *msense, /* senses of the constraints: 'L', 'G' or 'E' */
228
+ const double *xstar, /* current optimal solution of the LP relaxation */
229
+ bool aggressive, /* flag asking whether as many cuts as possible are
230
+ required on output (TRUE) or not (FALSE) */
231
+ /*
232
+ OUTPUT parameters (the memory for the vectors is allocated INTERNALLY
233
+ by the procedure: if some memory is already allocated, it is FREED):
234
+ */
235
+ int *cnum, /* number of violated 0-1/2 cuts identified by the procedure */
236
+ int *cnzcnt, /* overall number of nonzero's in the cuts */
237
+ int **cbeg, /* starting position of each cut in arrays cind and cval */
238
+ int **ccnt, /* number of entries of each cut in arrays cind and cval */
239
+ int **cind, /* column indices of the nonzero entries of the cuts */
240
+ int **cval, /* values of the nonzero entries of the cuts */
241
+ int **crhs, /* right hand sides of the cuts */
242
+ char **csense /* senses of the cuts: 'L', 'G' or 'E' */
243
+ /*
244
+ NOTE that all the numerical input/output vectors are INTEGER (with
245
+ the exception of xstar), since the procedure is intended to work
246
+ with pure ILP's, and that the ILP matrix has to be given on input
247
+ in ROW format.
248
+ */
249
+ );
250
+ void ilp_load(
251
+ int mr, /* number of rows in the ILP matrix */
252
+ int mc, /* number of columns in the ILP matrix */
253
+ int mnz, /* number of nonzero's in the ILP matrix */
254
+ int *mtbeg, /* starting position of each row in arrays mtind and mtval */
255
+ int *mtcnt, /* number of entries of each row in arrays mtind and mtval */
256
+ int *mtind, /* column indices of the nonzero entries of the ILP matrix */
257
+ int *mtval, /* values of the nonzero entries of the ILP matrix */
258
+ int *vlb, /* lower bounds on the variables */
259
+ int *vub, /* upper bounds on the variables */
260
+ int *mrhs, /* right hand sides of the constraints */
261
+ char *msense /* senses of the constraints: 'L', 'G' or 'E' */
262
+ );
263
+ void free_ilp();
264
+ /* alloc_parity_ilp: allocate the memory for the parity ILP data structure */
265
+
266
+ void alloc_parity_ilp(
267
+ int mr, /* number of rows in the ILP matrix */
268
+ int mc, /* number of columns in the ILP matrix */
269
+ int mnz /* number of nonzero's in the ILP matrix */
270
+ );
271
+ void free_parity_ilp();
272
+ void initialize_log_var();
273
+ /* free_log_var */
274
+ void free_log_var();
275
+ private:
276
+ /* best_weakening: find the best upper/lower bound weakening of a set
277
+ of variables */
278
+
279
+ int best_weakening(
280
+ int n_to_weak, /* number of variables to weaken */
281
+ int *vars_to_weak, /* indices of the variables to weaken */
282
+ short int original_parity, /* original parity of the constraint to weaken */
283
+ double original_slack, /* original slack of the constraint to weaken */
284
+ double *best_even_slack, /* best possible slack of a weakened constraint
285
+ with even right-hand-side */
286
+ double *best_odd_slack, /* best possible slack of a weakened constraint
287
+ with odd right-hand-side */
288
+ info_weak **info_even_weak, /* weakening information about the best possible
289
+ even weakened constraint */
290
+ info_weak **info_odd_weak, /* weakening information about the best possible
291
+ odd weakened constraint */
292
+ short int only_odd, /* flag which tells whether only an odd weakening is of
293
+ interest (TRUE) or both weakenings are (FALSE) */
294
+ short int only_viol /* flag which tells whether only an inequality of
295
+ slack smaller than MAX_SLACK is of interest (TRUE)
296
+ otherwise (FALSE) */
297
+ );
298
+
299
+ /* best_cut: find the coefficients, the rhs and the violation of the
300
+ best possible cut that can be obtained by weakening a given set of
301
+ coefficients to even and a rhs to odd, dividing by 2 and rounding */
302
+
303
+ short int best_cut(
304
+ int *ccoef, /* vector of the coefficients */
305
+ int *crhs, /* pointer to rhs value */
306
+ double *violation, /* violation of the cut */
307
+ short int update, /* TRUE/FALSE: if TRUE, the new ccoef and crhs are
308
+ given on output */
309
+ short int only_viol /* flag which tells whether only an inequality of
310
+ slack smaller than MAX_SLACK is of interest (TRUE)
311
+ otherwise (FALSE) */
312
+ );
313
+ /* get_cut: extract a hopefully violated cut from an odd cycle of the
314
+ separation graph */
315
+
316
+ cut *get_cut(
317
+ cycle *s_cyc /* shortest odd cycles identified in the separation graph */
318
+ );
319
+
320
+ /* update_log_var: update the log information for the problem variables */
321
+ void update_log_var();
322
+
323
+ /* basic_separation: try to identify violated 0-1/2 cuts by using the
324
+ original procedure described in Caprara and Fischetti's MP paper */
325
+
326
+ cut_list *basic_separation();
327
+
328
+ /* score_by_moving: compute the score of the best cut obtainable from
329
+ the current local search solution by inserting/deleting a constraint */
330
+
331
+ double score_by_moving(
332
+ int i, /* constraint to be moved */
333
+ short int itype, /* type of move - ADD or DEL */
334
+ double thresh /* minimum value of an interesting score */
335
+ );
336
+ /* modify_current: update the current local search solution by inserting/
337
+ deleting a constraint */
338
+
339
+ void modify_current(
340
+ int i, /* constraint to be moved */
341
+ short int itype /* type of move - ADD or DEL */
342
+ );
343
+
344
+ /* best neighbour: find the cut to be added/deleted from the current
345
+ solution among those allowed by the tabu rules */
346
+
347
+ short int best_neighbour(cut_list *out_cuts /* list of the violated cuts found */);
348
+
349
+ /* add_tight_constraint: initialize the current cut by adding a tight
350
+ constraint to it */
351
+
352
+ void add_tight_constraint();
353
+
354
+ /* tabu_012: try to identify violated 0-1/2 cuts by a simple tabu search
355
+ procedure adapted from that used by Battiti and Protasi for finding
356
+ large cliques */
357
+
358
+ cut_list *tabu_012();
359
+ /* initialize: initialize the data structures for local search */
360
+
361
+ void initialize();
362
+ /* restart: perform a restart of the search - IMPORTANT: in the current
363
+ implementation vector last_moved is not cleared at restart */
364
+
365
+ void restart(short int failure /* flag forcing the restart if some trouble occurred */);
366
+ void print_constr(int i /* constraint to be printed */);
367
+ void print_parity_ilp();
368
+
369
+ /* get_parity_ilp: construct an internal data structure containing all the
370
+ information which can be useful for 0-1/2 cut separation */
371
+
372
+ void get_parity_ilp();
373
+ /* initialize_sep_graph: allocate and initialize the data structure
374
+ to contain the information associated with a separation graph */
375
+
376
+ separation_graph *initialize_sep_graph();
377
+ void print_cut(cut *v_cut);
378
+ /* get_ori_cut_coef: get the coefficients of a cut, before dividing by 2 and
379
+ rounding, starting from the list of the constraints combined to get
380
+ the cut */
381
+
382
+ short int get_ori_cut_coef(
383
+ int n_of_constr, /* number of constraints combined */
384
+ int *constr_list, /* list of the constraints combined */
385
+ int *ccoef, /* cut left hand side coefficients */
386
+ int *crhs, /* cut right hand side */
387
+ short int only_viol /* flag which tells whether only an inequality of
388
+ slack smaller than MAX_SLACK is of interest (TRUE)
389
+ otherwise (FALSE) */
390
+ );
391
+ /* define_cut: construct a cut data structure from a vector of
392
+ coefficients and a right-hand-side */
393
+
394
+ cut *define_cut(
395
+ int *ccoef, /* coefficients of the cut */
396
+ int crhs /* right hand side of the cut */
397
+ );
398
+
399
+ /* cut_score: define the score of a (violated) cut */
400
+
401
+ double cut_score(
402
+ int *ccoef, /* cut left hand side coefficients */
403
+ int crhs, /* cut right hand side */
404
+ double viol, /* cut violation */
405
+ short int only_viol /* flag which tells whether only an inequality of
406
+ slack smaller than MAX_SLACK is of interest (TRUE)
407
+ otherwise (FALSE) */
408
+ );
409
+ /* get_current_cut: return a cut data type with the information about
410
+ the current cut of the search procedure */
411
+
412
+ cut *get_current_cut();
413
+ /* print_cur_cut: display cur_cut on output */
414
+
415
+ void print_cur_cut();
416
+ void print_cut_list(cut_list *cuts);
417
+ //@}
418
+ public:
419
+ /**@name Constructors and destructors */
420
+ //@{
421
+ /// Default constructor
422
+ Cgl012Cut ();
423
+
424
+ /// Copy constructor
425
+ Cgl012Cut (
426
+ const Cgl012Cut &);
427
+
428
+ /// Assignment operator
429
+ Cgl012Cut &
430
+ operator=(
431
+ const Cgl012Cut& rhs);
432
+
433
+ /// Destructor
434
+ virtual ~Cgl012Cut ();
435
+ //@}
436
+
437
+ private:
438
+
439
+ // Private member methods
440
+
441
+ /**@name Private methods */
442
+ //@{
443
+ //@}
444
+
445
+
446
+ /**@name Private member data */
447
+ //@{
448
+
449
+ ilp *inp_ilp; /* input ILP data structure */
450
+ parity_ilp *p_ilp; /* parity ILP data structure */
451
+ int iter;
452
+ double gap;
453
+ double maxgap;
454
+ int errorNo;
455
+ int sep_iter; /* number of the current separation iteration */
456
+ log_var **vlog; /* information about the value attained
457
+ by the variables in the last iterations,
458
+ used to possibly set to 0 some coefficient
459
+ > 0 in a cut to be added */
460
+ bool aggr; /* flag saying whether as many cuts as possible are required
461
+ from the separation procedure (TRUE) or not (FALSE) */
462
+ //@}
463
+ };
464
+ #endif
@@ -0,0 +1,115 @@
1
+ // Copyright (C) 2005, International Business Machines
2
+ // Corporation and others. All Rights Reserved.
3
+ // This code is licensed under the terms of the Eclipse Public License (EPL).
4
+
5
+ #ifndef CglAllDifferent_H
6
+ #define CglAllDifferent_H
7
+
8
+ #include <string>
9
+
10
+ #include "CglCutGenerator.hpp"
11
+
12
+ /** AllDifferent Cut Generator Class
13
+ This has a number of sets. All the members in each set are general integer
14
+ variables which have to be different from all others in the set.
15
+
16
+ At present this only generates column cuts
17
+
18
+ At present it is very primitive compared to proper CSP implementations
19
+ */
20
+ class CglAllDifferent : public CglCutGenerator {
21
+
22
+ public:
23
+
24
+
25
+ /**@name Generate Cuts */
26
+ //@{
27
+ /** This fixes (or reduces bounds) on sets of all different variables
28
+ */
29
+ virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
30
+ const CglTreeInfo info = CglTreeInfo());
31
+ //@}
32
+
33
+
34
+ /**@name Constructors and destructors */
35
+ //@{
36
+ /// Default constructor
37
+ CglAllDifferent ();
38
+
39
+ /// Useful constructot
40
+ CglAllDifferent(int numberSets, const int * starts, const int * which);
41
+
42
+ /// Copy constructor
43
+ CglAllDifferent (
44
+ const CglAllDifferent &);
45
+
46
+ /// Clone
47
+ virtual CglCutGenerator * clone() const;
48
+
49
+ /// Assignment operator
50
+ CglAllDifferent &
51
+ operator=(
52
+ const CglAllDifferent& rhs);
53
+
54
+ /// Destructor
55
+ virtual
56
+ ~CglAllDifferent ();
57
+ /// Create C++ lines to get to current state
58
+ virtual std::string generateCpp( FILE * fp);
59
+
60
+ /// This can be used to refresh any inforamtion
61
+ virtual void refreshSolver(OsiSolverInterface * solver);
62
+ /**
63
+ Returns true if may generate Row cuts in tree (rather than root node).
64
+ Used so know if matrix will change in tree. Really
65
+ meant so column cut generators can still be active
66
+ without worrying code.
67
+ Default is true
68
+ */
69
+ virtual bool mayGenerateRowCutsInTree() const
70
+ { return false;}
71
+ //@}
72
+ /**@name Sets and Gets */
73
+ //@{
74
+ /// Set log level
75
+ inline void setLogLevel(int value)
76
+ { logLevel_=value;}
77
+ /// Get log level
78
+ inline int getLogLevel() const
79
+ { return logLevel_;}
80
+ /// Set Maximum number of sets to look at at once
81
+ inline void setMaxLook(int value)
82
+ { maxLook_=value;}
83
+ /// Get Maximum number of sets to look at at once
84
+ inline int getMaxLook() const
85
+ { return maxLook_;}
86
+ //@}
87
+
88
+ private:
89
+
90
+ // Private member methods
91
+ /**@name */
92
+ //@{
93
+ //@}
94
+
95
+ // Private member data
96
+
97
+ /**@name Private member data */
98
+ //@{
99
+ /// Number of sets
100
+ int numberSets_;
101
+ /// Total number of variables in all different sets
102
+ int numberDifferent_;
103
+ /// Maximum number of sets to look at at once
104
+ int maxLook_;
105
+ /// Log level - 0 none, 1 - a bit, 2 - more details
106
+ int logLevel_;
107
+ /// Start of each set
108
+ int * start_;
109
+ /// Members (0,1,....) not as in original model
110
+ int * which_;
111
+ /// Original members
112
+ int * originalWhich_;
113
+ //@}
114
+ };
115
+ #endif