ruby-cbc 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/README.md +203 -0
  7. data/Rakefile +40 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/ext/ruby-cbc/cbc.i +15 -0
  11. data/ext/ruby-cbc/cbc_wrap.c +4618 -0
  12. data/ext/ruby-cbc/extconf.rb +60 -0
  13. data/ext/ruby-cbc/install/bin/cbc +0 -0
  14. data/ext/ruby-cbc/install/bin/clp +0 -0
  15. data/ext/ruby-cbc/install/include/coin/CbcBranchActual.hpp +24 -0
  16. data/ext/ruby-cbc/install/include/coin/CbcBranchAllDifferent.hpp +62 -0
  17. data/ext/ruby-cbc/install/include/coin/CbcBranchBase.hpp +78 -0
  18. data/ext/ruby-cbc/install/include/coin/CbcBranchCut.hpp +183 -0
  19. data/ext/ruby-cbc/install/include/coin/CbcBranchDecision.hpp +129 -0
  20. data/ext/ruby-cbc/install/include/coin/CbcBranchDefaultDecision.hpp +100 -0
  21. data/ext/ruby-cbc/install/include/coin/CbcBranchDynamic.hpp +206 -0
  22. data/ext/ruby-cbc/install/include/coin/CbcBranchLotsize.hpp +242 -0
  23. data/ext/ruby-cbc/install/include/coin/CbcBranchToFixLots.hpp +94 -0
  24. data/ext/ruby-cbc/install/include/coin/CbcBranchingObject.hpp +236 -0
  25. data/ext/ruby-cbc/install/include/coin/CbcClique.hpp +303 -0
  26. data/ext/ruby-cbc/install/include/coin/CbcCompare.hpp +39 -0
  27. data/ext/ruby-cbc/install/include/coin/CbcCompareActual.hpp +14 -0
  28. data/ext/ruby-cbc/install/include/coin/CbcCompareBase.hpp +142 -0
  29. data/ext/ruby-cbc/install/include/coin/CbcCompareDefault.hpp +120 -0
  30. data/ext/ruby-cbc/install/include/coin/CbcCompareDepth.hpp +47 -0
  31. data/ext/ruby-cbc/install/include/coin/CbcCompareEstimate.hpp +48 -0
  32. data/ext/ruby-cbc/install/include/coin/CbcCompareObjective.hpp +49 -0
  33. data/ext/ruby-cbc/install/include/coin/CbcConfig.h +14 -0
  34. data/ext/ruby-cbc/install/include/coin/CbcConsequence.hpp +49 -0
  35. data/ext/ruby-cbc/install/include/coin/CbcCountRowCut.hpp +168 -0
  36. data/ext/ruby-cbc/install/include/coin/CbcCutGenerator.hpp +482 -0
  37. data/ext/ruby-cbc/install/include/coin/CbcCutModifier.hpp +57 -0
  38. data/ext/ruby-cbc/install/include/coin/CbcCutSubsetModifier.hpp +66 -0
  39. data/ext/ruby-cbc/install/include/coin/CbcDummyBranchingObject.hpp +83 -0
  40. data/ext/ruby-cbc/install/include/coin/CbcEventHandler.hpp +245 -0
  41. data/ext/ruby-cbc/install/include/coin/CbcFathom.hpp +137 -0
  42. data/ext/ruby-cbc/install/include/coin/CbcFathomDynamicProgramming.hpp +169 -0
  43. data/ext/ruby-cbc/install/include/coin/CbcFeasibilityBase.hpp +56 -0
  44. data/ext/ruby-cbc/install/include/coin/CbcFixVariable.hpp +67 -0
  45. data/ext/ruby-cbc/install/include/coin/CbcFollowOn.hpp +207 -0
  46. data/ext/ruby-cbc/install/include/coin/CbcFullNodeInfo.hpp +161 -0
  47. data/ext/ruby-cbc/install/include/coin/CbcGeneral.hpp +60 -0
  48. data/ext/ruby-cbc/install/include/coin/CbcGeneralDepth.hpp +279 -0
  49. data/ext/ruby-cbc/install/include/coin/CbcHeuristic.hpp +682 -0
  50. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDINS.hpp +96 -0
  51. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDW.hpp +309 -0
  52. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDive.hpp +192 -0
  53. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveCoefficient.hpp +52 -0
  54. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveFractional.hpp +52 -0
  55. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveGuided.hpp +55 -0
  56. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveLineSearch.hpp +52 -0
  57. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDivePseudoCost.hpp +60 -0
  58. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveVectorLength.hpp +52 -0
  59. data/ext/ruby-cbc/install/include/coin/CbcHeuristicFPump.hpp +340 -0
  60. data/ext/ruby-cbc/install/include/coin/CbcHeuristicGreedy.hpp +280 -0
  61. data/ext/ruby-cbc/install/include/coin/CbcHeuristicLocal.hpp +271 -0
  62. data/ext/ruby-cbc/install/include/coin/CbcHeuristicPivotAndFix.hpp +58 -0
  63. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRENS.hpp +77 -0
  64. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRINS.hpp +102 -0
  65. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRandRound.hpp +58 -0
  66. data/ext/ruby-cbc/install/include/coin/CbcHeuristicVND.hpp +94 -0
  67. data/ext/ruby-cbc/install/include/coin/CbcLinked.hpp +1406 -0
  68. data/ext/ruby-cbc/install/include/coin/CbcMessage.hpp +94 -0
  69. data/ext/ruby-cbc/install/include/coin/CbcMipStartIO.hpp +26 -0
  70. data/ext/ruby-cbc/install/include/coin/CbcModel.hpp +2952 -0
  71. data/ext/ruby-cbc/install/include/coin/CbcNWay.hpp +166 -0
  72. data/ext/ruby-cbc/install/include/coin/CbcNode.hpp +351 -0
  73. data/ext/ruby-cbc/install/include/coin/CbcNodeInfo.hpp +349 -0
  74. data/ext/ruby-cbc/install/include/coin/CbcObject.hpp +272 -0
  75. data/ext/ruby-cbc/install/include/coin/CbcObjectUpdateData.hpp +64 -0
  76. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.cpp +4134 -0
  77. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.hpp +532 -0
  78. data/ext/ruby-cbc/install/include/coin/CbcParam.hpp +324 -0
  79. data/ext/ruby-cbc/install/include/coin/CbcPartialNodeInfo.hpp +110 -0
  80. data/ext/ruby-cbc/install/include/coin/CbcSOS.hpp +279 -0
  81. data/ext/ruby-cbc/install/include/coin/CbcSimpleInteger.hpp +286 -0
  82. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +564 -0
  83. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerPseudoCost.hpp +114 -0
  84. data/ext/ruby-cbc/install/include/coin/CbcSolver.hpp +447 -0
  85. data/ext/ruby-cbc/install/include/coin/CbcStrategy.hpp +258 -0
  86. data/ext/ruby-cbc/install/include/coin/CbcSubProblem.hpp +83 -0
  87. data/ext/ruby-cbc/install/include/coin/CbcTree.hpp +490 -0
  88. data/ext/ruby-cbc/install/include/coin/CbcTreeLocal.hpp +372 -0
  89. data/ext/ruby-cbc/install/include/coin/Cbc_C_Interface.h +381 -0
  90. data/ext/ruby-cbc/install/include/coin/Cgl012cut.hpp +464 -0
  91. data/ext/ruby-cbc/install/include/coin/CglAllDifferent.hpp +115 -0
  92. data/ext/ruby-cbc/install/include/coin/CglClique.hpp +308 -0
  93. data/ext/ruby-cbc/install/include/coin/CglConfig.h +19 -0
  94. data/ext/ruby-cbc/install/include/coin/CglCutGenerator.hpp +121 -0
  95. data/ext/ruby-cbc/install/include/coin/CglDuplicateRow.hpp +189 -0
  96. data/ext/ruby-cbc/install/include/coin/CglFlowCover.hpp +371 -0
  97. data/ext/ruby-cbc/install/include/coin/CglGMI.hpp +364 -0
  98. data/ext/ruby-cbc/install/include/coin/CglGMIParam.hpp +313 -0
  99. data/ext/ruby-cbc/install/include/coin/CglGomory.hpp +204 -0
  100. data/ext/ruby-cbc/install/include/coin/CglKnapsackCover.hpp +310 -0
  101. data/ext/ruby-cbc/install/include/coin/CglLandP.hpp +306 -0
  102. data/ext/ruby-cbc/install/include/coin/CglLandPValidator.hpp +130 -0
  103. data/ext/ruby-cbc/install/include/coin/CglLiftAndProject.hpp +104 -0
  104. data/ext/ruby-cbc/install/include/coin/CglMessage.hpp +50 -0
  105. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding.hpp +429 -0
  106. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding2.hpp +427 -0
  107. data/ext/ruby-cbc/install/include/coin/CglOddHole.hpp +160 -0
  108. data/ext/ruby-cbc/install/include/coin/CglParam.hpp +93 -0
  109. data/ext/ruby-cbc/install/include/coin/CglPreProcess.hpp +492 -0
  110. data/ext/ruby-cbc/install/include/coin/CglProbing.hpp +543 -0
  111. data/ext/ruby-cbc/install/include/coin/CglRedSplit.hpp +448 -0
  112. data/ext/ruby-cbc/install/include/coin/CglRedSplit2.hpp +494 -0
  113. data/ext/ruby-cbc/install/include/coin/CglRedSplit2Param.hpp +495 -0
  114. data/ext/ruby-cbc/install/include/coin/CglRedSplitParam.hpp +272 -0
  115. data/ext/ruby-cbc/install/include/coin/CglResidualCapacity.hpp +240 -0
  116. data/ext/ruby-cbc/install/include/coin/CglSimpleRounding.hpp +174 -0
  117. data/ext/ruby-cbc/install/include/coin/CglStored.hpp +125 -0
  118. data/ext/ruby-cbc/install/include/coin/CglTreeInfo.hpp +180 -0
  119. data/ext/ruby-cbc/install/include/coin/CglTwomir.hpp +565 -0
  120. data/ext/ruby-cbc/install/include/coin/CglZeroHalf.hpp +133 -0
  121. data/ext/ruby-cbc/install/include/coin/ClpAmplObjective.hpp +113 -0
  122. data/ext/ruby-cbc/install/include/coin/ClpCholeskyBase.hpp +294 -0
  123. data/ext/ruby-cbc/install/include/coin/ClpCholeskyDense.hpp +162 -0
  124. data/ext/ruby-cbc/install/include/coin/ClpConfig.h +17 -0
  125. data/ext/ruby-cbc/install/include/coin/ClpConstraint.hpp +125 -0
  126. data/ext/ruby-cbc/install/include/coin/ClpConstraintAmpl.hpp +108 -0
  127. data/ext/ruby-cbc/install/include/coin/ClpConstraintLinear.hpp +110 -0
  128. data/ext/ruby-cbc/install/include/coin/ClpConstraintQuadratic.hpp +119 -0
  129. data/ext/ruby-cbc/install/include/coin/ClpDualRowDantzig.hpp +71 -0
  130. data/ext/ruby-cbc/install/include/coin/ClpDualRowPivot.hpp +129 -0
  131. data/ext/ruby-cbc/install/include/coin/ClpDualRowSteepest.hpp +153 -0
  132. data/ext/ruby-cbc/install/include/coin/ClpDummyMatrix.hpp +183 -0
  133. data/ext/ruby-cbc/install/include/coin/ClpDynamicExampleMatrix.hpp +186 -0
  134. data/ext/ruby-cbc/install/include/coin/ClpDynamicMatrix.hpp +381 -0
  135. data/ext/ruby-cbc/install/include/coin/ClpEventHandler.hpp +187 -0
  136. data/ext/ruby-cbc/install/include/coin/ClpFactorization.hpp +432 -0
  137. data/ext/ruby-cbc/install/include/coin/ClpGubDynamicMatrix.hpp +247 -0
  138. data/ext/ruby-cbc/install/include/coin/ClpGubMatrix.hpp +358 -0
  139. data/ext/ruby-cbc/install/include/coin/ClpInterior.hpp +570 -0
  140. data/ext/ruby-cbc/install/include/coin/ClpLinearObjective.hpp +103 -0
  141. data/ext/ruby-cbc/install/include/coin/ClpMatrixBase.hpp +524 -0
  142. data/ext/ruby-cbc/install/include/coin/ClpMessage.hpp +131 -0
  143. data/ext/ruby-cbc/install/include/coin/ClpModel.hpp +1307 -0
  144. data/ext/ruby-cbc/install/include/coin/ClpNetworkMatrix.hpp +229 -0
  145. data/ext/ruby-cbc/install/include/coin/ClpNode.hpp +349 -0
  146. data/ext/ruby-cbc/install/include/coin/ClpNonLinearCost.hpp +401 -0
  147. data/ext/ruby-cbc/install/include/coin/ClpObjective.hpp +134 -0
  148. data/ext/ruby-cbc/install/include/coin/ClpPackedMatrix.hpp +638 -0
  149. data/ext/ruby-cbc/install/include/coin/ClpParameters.hpp +126 -0
  150. data/ext/ruby-cbc/install/include/coin/ClpPdcoBase.hpp +103 -0
  151. data/ext/ruby-cbc/install/include/coin/ClpPlusMinusOneMatrix.hpp +290 -0
  152. data/ext/ruby-cbc/install/include/coin/ClpPresolve.hpp +299 -0
  153. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnDantzig.hpp +72 -0
  154. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnPivot.hpp +155 -0
  155. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnSteepest.hpp +247 -0
  156. data/ext/ruby-cbc/install/include/coin/ClpQuadraticObjective.hpp +155 -0
  157. data/ext/ruby-cbc/install/include/coin/ClpSimplex.hpp +1797 -0
  158. data/ext/ruby-cbc/install/include/coin/ClpSimplexDual.hpp +300 -0
  159. data/ext/ruby-cbc/install/include/coin/ClpSimplexNonlinear.hpp +117 -0
  160. data/ext/ruby-cbc/install/include/coin/ClpSimplexOther.hpp +277 -0
  161. data/ext/ruby-cbc/install/include/coin/ClpSimplexPrimal.hpp +244 -0
  162. data/ext/ruby-cbc/install/include/coin/ClpSolve.hpp +446 -0
  163. data/ext/ruby-cbc/install/include/coin/Clp_C_Interface.h +525 -0
  164. data/ext/ruby-cbc/install/include/coin/CoinAlloc.hpp +176 -0
  165. data/ext/ruby-cbc/install/include/coin/CoinBuild.hpp +149 -0
  166. data/ext/ruby-cbc/install/include/coin/CoinDenseFactorization.hpp +419 -0
  167. data/ext/ruby-cbc/install/include/coin/CoinDenseVector.hpp +383 -0
  168. data/ext/ruby-cbc/install/include/coin/CoinDistance.hpp +48 -0
  169. data/ext/ruby-cbc/install/include/coin/CoinError.hpp +257 -0
  170. data/ext/ruby-cbc/install/include/coin/CoinFactorization.hpp +2044 -0
  171. data/ext/ruby-cbc/install/include/coin/CoinFileIO.hpp +166 -0
  172. data/ext/ruby-cbc/install/include/coin/CoinFinite.hpp +34 -0
  173. data/ext/ruby-cbc/install/include/coin/CoinFloatEqual.hpp +177 -0
  174. data/ext/ruby-cbc/install/include/coin/CoinHelperFunctions.hpp +1111 -0
  175. data/ext/ruby-cbc/install/include/coin/CoinIndexedVector.hpp +1164 -0
  176. data/ext/ruby-cbc/install/include/coin/CoinLpIO.hpp +805 -0
  177. data/ext/ruby-cbc/install/include/coin/CoinMessage.hpp +96 -0
  178. data/ext/ruby-cbc/install/include/coin/CoinMessageHandler.hpp +666 -0
  179. data/ext/ruby-cbc/install/include/coin/CoinModel.hpp +1054 -0
  180. data/ext/ruby-cbc/install/include/coin/CoinModelUseful.hpp +441 -0
  181. data/ext/ruby-cbc/install/include/coin/CoinMpsIO.hpp +1056 -0
  182. data/ext/ruby-cbc/install/include/coin/CoinOslFactorization.hpp +280 -0
  183. data/ext/ruby-cbc/install/include/coin/CoinPackedMatrix.hpp +947 -0
  184. data/ext/ruby-cbc/install/include/coin/CoinPackedVector.hpp +657 -0
  185. data/ext/ruby-cbc/install/include/coin/CoinPackedVectorBase.hpp +269 -0
  186. data/ext/ruby-cbc/install/include/coin/CoinParam.hpp +644 -0
  187. data/ext/ruby-cbc/install/include/coin/CoinPragma.hpp +26 -0
  188. data/ext/ruby-cbc/install/include/coin/CoinPresolveDoubleton.hpp +73 -0
  189. data/ext/ruby-cbc/install/include/coin/CoinPresolveDual.hpp +85 -0
  190. data/ext/ruby-cbc/install/include/coin/CoinPresolveDupcol.hpp +226 -0
  191. data/ext/ruby-cbc/install/include/coin/CoinPresolveEmpty.hpp +116 -0
  192. data/ext/ruby-cbc/install/include/coin/CoinPresolveFixed.hpp +181 -0
  193. data/ext/ruby-cbc/install/include/coin/CoinPresolveForcing.hpp +61 -0
  194. data/ext/ruby-cbc/install/include/coin/CoinPresolveImpliedFree.hpp +60 -0
  195. data/ext/ruby-cbc/install/include/coin/CoinPresolveIsolated.hpp +51 -0
  196. data/ext/ruby-cbc/install/include/coin/CoinPresolveMatrix.hpp +1842 -0
  197. data/ext/ruby-cbc/install/include/coin/CoinPresolveMonitor.hpp +105 -0
  198. data/ext/ruby-cbc/install/include/coin/CoinPresolvePsdebug.hpp +166 -0
  199. data/ext/ruby-cbc/install/include/coin/CoinPresolveSingleton.hpp +112 -0
  200. data/ext/ruby-cbc/install/include/coin/CoinPresolveSubst.hpp +101 -0
  201. data/ext/ruby-cbc/install/include/coin/CoinPresolveTighten.hpp +55 -0
  202. data/ext/ruby-cbc/install/include/coin/CoinPresolveTripleton.hpp +66 -0
  203. data/ext/ruby-cbc/install/include/coin/CoinPresolveUseless.hpp +63 -0
  204. data/ext/ruby-cbc/install/include/coin/CoinPresolveZeros.hpp +60 -0
  205. data/ext/ruby-cbc/install/include/coin/CoinRational.hpp +44 -0
  206. data/ext/ruby-cbc/install/include/coin/CoinSearchTree.hpp +465 -0
  207. data/ext/ruby-cbc/install/include/coin/CoinShallowPackedVector.hpp +148 -0
  208. data/ext/ruby-cbc/install/include/coin/CoinSignal.hpp +117 -0
  209. data/ext/ruby-cbc/install/include/coin/CoinSimpFactorization.hpp +431 -0
  210. data/ext/ruby-cbc/install/include/coin/CoinSmartPtr.hpp +528 -0
  211. data/ext/ruby-cbc/install/include/coin/CoinSnapshot.hpp +476 -0
  212. data/ext/ruby-cbc/install/include/coin/CoinSort.hpp +678 -0
  213. data/ext/ruby-cbc/install/include/coin/CoinStructuredModel.hpp +247 -0
  214. data/ext/ruby-cbc/install/include/coin/CoinTime.hpp +310 -0
  215. data/ext/ruby-cbc/install/include/coin/CoinTypes.hpp +64 -0
  216. data/ext/ruby-cbc/install/include/coin/CoinUtility.hpp +19 -0
  217. data/ext/ruby-cbc/install/include/coin/CoinUtilsConfig.h +34 -0
  218. data/ext/ruby-cbc/install/include/coin/CoinWarmStart.hpp +58 -0
  219. data/ext/ruby-cbc/install/include/coin/CoinWarmStartBasis.hpp +456 -0
  220. data/ext/ruby-cbc/install/include/coin/CoinWarmStartDual.hpp +166 -0
  221. data/ext/ruby-cbc/install/include/coin/CoinWarmStartPrimalDual.hpp +211 -0
  222. data/ext/ruby-cbc/install/include/coin/CoinWarmStartVector.hpp +488 -0
  223. data/ext/ruby-cbc/install/include/coin/Coin_C_defines.h +115 -0
  224. data/ext/ruby-cbc/install/include/coin/Idiot.hpp +298 -0
  225. data/ext/ruby-cbc/install/include/coin/OsiAuxInfo.hpp +206 -0
  226. data/ext/ruby-cbc/install/include/coin/OsiBranchingObject.hpp +1005 -0
  227. data/ext/ruby-cbc/install/include/coin/OsiCbcSolverInterface.hpp +764 -0
  228. data/ext/ruby-cbc/install/include/coin/OsiChooseVariable.hpp +534 -0
  229. data/ext/ruby-cbc/install/include/coin/OsiClpSolverInterface.hpp +1509 -0
  230. data/ext/ruby-cbc/install/include/coin/OsiColCut.hpp +324 -0
  231. data/ext/ruby-cbc/install/include/coin/OsiCollections.hpp +35 -0
  232. data/ext/ruby-cbc/install/include/coin/OsiConfig.h +19 -0
  233. data/ext/ruby-cbc/install/include/coin/OsiCut.hpp +245 -0
  234. data/ext/ruby-cbc/install/include/coin/OsiCuts.hpp +474 -0
  235. data/ext/ruby-cbc/install/include/coin/OsiPresolve.hpp +252 -0
  236. data/ext/ruby-cbc/install/include/coin/OsiRowCut.hpp +331 -0
  237. data/ext/ruby-cbc/install/include/coin/OsiRowCutDebugger.hpp +187 -0
  238. data/ext/ruby-cbc/install/include/coin/OsiSolverBranch.hpp +152 -0
  239. data/ext/ruby-cbc/install/include/coin/OsiSolverInterface.hpp +2143 -0
  240. data/ext/ruby-cbc/install/include/coin/OsiSolverParameters.hpp +142 -0
  241. data/ext/ruby-cbc/install/include/coin/OsiUnitTests.hpp +374 -0
  242. data/ext/ruby-cbc/install/lib/libCbc.la +35 -0
  243. data/ext/ruby-cbc/install/lib/libCbc.so +0 -0
  244. data/ext/ruby-cbc/install/lib/libCbc.so.3 +0 -0
  245. data/ext/ruby-cbc/install/lib/libCbc.so.3.9.7 +0 -0
  246. data/ext/ruby-cbc/install/lib/libCbcSolver.la +35 -0
  247. data/ext/ruby-cbc/install/lib/libCbcSolver.so +0 -0
  248. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3 +0 -0
  249. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3.9.7 +0 -0
  250. data/ext/ruby-cbc/install/lib/libCgl.la +35 -0
  251. data/ext/ruby-cbc/install/lib/libCgl.so +0 -0
  252. data/ext/ruby-cbc/install/lib/libCgl.so.1 +0 -0
  253. data/ext/ruby-cbc/install/lib/libCgl.so.1.9.7 +0 -0
  254. data/ext/ruby-cbc/install/lib/libClp.la +35 -0
  255. data/ext/ruby-cbc/install/lib/libClp.so +0 -0
  256. data/ext/ruby-cbc/install/lib/libClp.so.1 +0 -0
  257. data/ext/ruby-cbc/install/lib/libClp.so.1.13.9 +0 -0
  258. data/ext/ruby-cbc/install/lib/libClpSolver.la +35 -0
  259. data/ext/ruby-cbc/install/lib/libClpSolver.so +0 -0
  260. data/ext/ruby-cbc/install/lib/libClpSolver.so.1 +0 -0
  261. data/ext/ruby-cbc/install/lib/libClpSolver.so.1.13.9 +0 -0
  262. data/ext/ruby-cbc/install/lib/libCoinUtils.la +35 -0
  263. data/ext/ruby-cbc/install/lib/libCoinUtils.so +0 -0
  264. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3 +0 -0
  265. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3.10.11 +0 -0
  266. data/ext/ruby-cbc/install/lib/libOsi.la +35 -0
  267. data/ext/ruby-cbc/install/lib/libOsi.so +0 -0
  268. data/ext/ruby-cbc/install/lib/libOsi.so.1 +0 -0
  269. data/ext/ruby-cbc/install/lib/libOsi.so.1.12.6 +0 -0
  270. data/ext/ruby-cbc/install/lib/libOsiCbc.la +35 -0
  271. data/ext/ruby-cbc/install/lib/libOsiCbc.so +0 -0
  272. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3 +0 -0
  273. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3.9.7 +0 -0
  274. data/ext/ruby-cbc/install/lib/libOsiClp.la +35 -0
  275. data/ext/ruby-cbc/install/lib/libOsiClp.so +0 -0
  276. data/ext/ruby-cbc/install/lib/libOsiClp.so.1 +0 -0
  277. data/ext/ruby-cbc/install/lib/libOsiClp.so.1.13.9 +0 -0
  278. data/ext/ruby-cbc/install/lib/libOsiCommonTests.la +35 -0
  279. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so +0 -0
  280. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1 +0 -0
  281. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1.12.6 +0 -0
  282. data/ext/ruby-cbc/install/lib/pkgconfig/cbc.pc +12 -0
  283. data/ext/ruby-cbc/install/lib/pkgconfig/cgl.pc +12 -0
  284. data/ext/ruby-cbc/install/lib/pkgconfig/clp.pc +12 -0
  285. data/ext/ruby-cbc/install/lib/pkgconfig/coindatamiplib3.pc +9 -0
  286. data/ext/ruby-cbc/install/lib/pkgconfig/coindatasample.pc +9 -0
  287. data/ext/ruby-cbc/install/lib/pkgconfig/coinutils.pc +12 -0
  288. data/ext/ruby-cbc/install/lib/pkgconfig/osi-cbc.pc +12 -0
  289. data/ext/ruby-cbc/install/lib/pkgconfig/osi-clp.pc +12 -0
  290. data/ext/ruby-cbc/install/lib/pkgconfig/osi-unittests.pc +12 -0
  291. data/ext/ruby-cbc/install/lib/pkgconfig/osi.pc +12 -0
  292. data/lib/ruby-cbc/ilp/constant.rb +44 -0
  293. data/lib/ruby-cbc/ilp/constraint.rb +32 -0
  294. data/lib/ruby-cbc/ilp/objective.rb +26 -0
  295. data/lib/ruby-cbc/ilp/term.rb +47 -0
  296. data/lib/ruby-cbc/ilp/term_array.rb +80 -0
  297. data/lib/ruby-cbc/ilp/var.rb +62 -0
  298. data/lib/ruby-cbc/model.rb +125 -0
  299. data/lib/ruby-cbc/problem.rb +170 -0
  300. data/lib/ruby-cbc/version.rb +3 -0
  301. data/lib/ruby-cbc.rb +21 -0
  302. data/ruby-cbc.gemspec +36 -0
  303. metadata +431 -0
@@ -0,0 +1,244 @@
1
+ /* $Id: ClpSimplexPrimal.hpp 1665 2011-01-04 17:55:54Z 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
+ Authors
7
+
8
+ John Forrest
9
+
10
+ */
11
+ #ifndef ClpSimplexPrimal_H
12
+ #define ClpSimplexPrimal_H
13
+
14
+ #include "ClpSimplex.hpp"
15
+
16
+ /** This solves LPs using the primal simplex method
17
+
18
+ It inherits from ClpSimplex. It has no data of its own and
19
+ is never created - only cast from a ClpSimplex object at algorithm time.
20
+
21
+ */
22
+
23
+ class ClpSimplexPrimal : public ClpSimplex {
24
+
25
+ public:
26
+
27
+ /**@name Description of algorithm */
28
+ //@{
29
+ /** Primal algorithm
30
+
31
+ Method
32
+
33
+ It tries to be a single phase approach with a weight of 1.0 being
34
+ given to getting optimal and a weight of infeasibilityCost_ being
35
+ given to getting primal feasible. In this version I have tried to
36
+ be clever in a stupid way. The idea of fake bounds in dual
37
+ seems to work so the primal analogue would be that of getting
38
+ bounds on reduced costs (by a presolve approach) and using
39
+ these for being above or below feasible region. I decided to waste
40
+ memory and keep these explicitly. This allows for non-linear
41
+ costs! I have not tested non-linear costs but will be glad
42
+ to do something if a reasonable example is provided.
43
+
44
+ The code is designed to take advantage of sparsity so arrays are
45
+ seldom zeroed out from scratch or gone over in their entirety.
46
+ The only exception is a full scan to find incoming variable for
47
+ Dantzig row choice. For steepest edge we keep an updated list
48
+ of dual infeasibilities (actually squares).
49
+ On easy problems we don't need full scan - just
50
+ pick first reasonable. This method has not been coded.
51
+
52
+ One problem is how to tackle degeneracy and accuracy. At present
53
+ I am using the modification of costs which I put in OSL and which was
54
+ extended by Gill et al. I am still not sure whether we will also
55
+ need explicit perturbation.
56
+
57
+ The flow of primal is three while loops as follows:
58
+
59
+ while (not finished) {
60
+
61
+ while (not clean solution) {
62
+
63
+ Factorize and/or clean up solution by changing bounds so
64
+ primal feasible. If looks finished check fake primal bounds.
65
+ Repeat until status is iterating (-1) or finished (0,1,2)
66
+
67
+ }
68
+
69
+ while (status==-1) {
70
+
71
+ Iterate until no pivot in or out or time to re-factorize.
72
+
73
+ Flow is:
74
+
75
+ choose pivot column (incoming variable). if none then
76
+ we are primal feasible so looks as if done but we need to
77
+ break and check bounds etc.
78
+
79
+ Get pivot column in tableau
80
+
81
+ Choose outgoing row. If we don't find one then we look
82
+ primal unbounded so break and check bounds etc. (Also the
83
+ pivot tolerance is larger after any iterations so that may be
84
+ reason)
85
+
86
+ If we do find outgoing row, we may have to adjust costs to
87
+ keep going forwards (anti-degeneracy). Check pivot will be stable
88
+ and if unstable throw away iteration and break to re-factorize.
89
+ If minor error re-factorize after iteration.
90
+
91
+ Update everything (this may involve changing bounds on
92
+ variables to stay primal feasible.
93
+
94
+ }
95
+
96
+ }
97
+
98
+ TODO's (or maybe not)
99
+
100
+ At present we never check we are going forwards. I overdid that in
101
+ OSL so will try and make a last resort.
102
+
103
+ Needs partial scan pivot in option.
104
+
105
+ May need other anti-degeneracy measures, especially if we try and use
106
+ loose tolerances as a way to solve in fewer iterations.
107
+
108
+ I like idea of dynamic scaling. This gives opportunity to decouple
109
+ different implications of scaling for accuracy, iteration count and
110
+ feasibility tolerance.
111
+
112
+ for use of exotic parameter startFinishoptions see Clpsimplex.hpp
113
+ */
114
+
115
+ int primal(int ifValuesPass = 0, int startFinishOptions = 0);
116
+ //@}
117
+
118
+ /**@name For advanced users */
119
+ //@{
120
+ /// Do not change infeasibility cost and always say optimal
121
+ void alwaysOptimal(bool onOff);
122
+ bool alwaysOptimal() const;
123
+ /** Normally outgoing variables can go out to slightly negative
124
+ values (but within tolerance) - this is to help stability and
125
+ and degeneracy. This can be switched off
126
+ */
127
+ void exactOutgoing(bool onOff);
128
+ bool exactOutgoing() const;
129
+ //@}
130
+
131
+ /**@name Functions used in primal */
132
+ //@{
133
+ /** This has the flow between re-factorizations
134
+
135
+ Returns a code to say where decision to exit was made
136
+ Problem status set to:
137
+
138
+ -2 re-factorize
139
+ -4 Looks optimal/infeasible
140
+ -5 Looks unbounded
141
+ +3 max iterations
142
+
143
+ valuesOption has original value of valuesPass
144
+ */
145
+ int whileIterating(int valuesOption);
146
+
147
+ /** Do last half of an iteration. This is split out so people can
148
+ force incoming variable. If solveType_ is 2 then this may
149
+ re-factorize while normally it would exit to re-factorize.
150
+ Return codes
151
+ Reasons to come out (normal mode/user mode):
152
+ -1 normal
153
+ -2 factorize now - good iteration/ NA
154
+ -3 slight inaccuracy - refactorize - iteration done/ same but factor done
155
+ -4 inaccuracy - refactorize - no iteration/ NA
156
+ -5 something flagged - go round again/ pivot not possible
157
+ +2 looks unbounded
158
+ +3 max iterations (iteration done)
159
+
160
+ With solveType_ ==2 this should
161
+ Pivot in a variable and choose an outgoing one. Assumes primal
162
+ feasible - will not go through a bound. Returns step length in theta
163
+ Returns ray in ray_
164
+ */
165
+ int pivotResult(int ifValuesPass = 0);
166
+
167
+
168
+ /** The primals are updated by the given array.
169
+ Returns number of infeasibilities.
170
+ After rowArray will have cost changes for use next iteration
171
+ */
172
+ int updatePrimalsInPrimal(CoinIndexedVector * rowArray,
173
+ double theta,
174
+ double & objectiveChange,
175
+ int valuesPass);
176
+ /**
177
+ Row array has pivot column
178
+ This chooses pivot row.
179
+ Rhs array is used for distance to next bound (for speed)
180
+ For speed, we may need to go to a bucket approach when many
181
+ variables go through bounds
182
+ If valuesPass non-zero then compute dj for direction
183
+ */
184
+ void primalRow(CoinIndexedVector * rowArray,
185
+ CoinIndexedVector * rhsArray,
186
+ CoinIndexedVector * spareArray,
187
+ int valuesPass);
188
+ /**
189
+ Chooses primal pivot column
190
+ updateArray has cost updates (also use pivotRow_ from last iteration)
191
+ Would be faster with separate region to scan
192
+ and will have this (with square of infeasibility) when steepest
193
+ For easy problems we can just choose one of the first columns we look at
194
+ */
195
+ void primalColumn(CoinIndexedVector * updateArray,
196
+ CoinIndexedVector * spareRow1,
197
+ CoinIndexedVector * spareRow2,
198
+ CoinIndexedVector * spareColumn1,
199
+ CoinIndexedVector * spareColumn2);
200
+
201
+ /** Checks if tentative optimal actually means unbounded in primal
202
+ Returns -3 if not, 2 if is unbounded */
203
+ int checkUnbounded(CoinIndexedVector * ray, CoinIndexedVector * spare,
204
+ double changeCost);
205
+ /** Refactorizes if necessary
206
+ Checks if finished. Updates status.
207
+ lastCleaned refers to iteration at which some objective/feasibility
208
+ cleaning too place.
209
+
210
+ type - 0 initial so set up save arrays etc
211
+ - 1 normal -if good update save
212
+ - 2 restoring from saved
213
+ saveModel is normally NULL but may not be if doing Sprint
214
+ */
215
+ void statusOfProblemInPrimal(int & lastCleaned, int type,
216
+ ClpSimplexProgress * progress,
217
+ bool doFactorization,
218
+ int ifValuesPass,
219
+ ClpSimplex * saveModel = NULL);
220
+ /// Perturbs problem (method depends on perturbation())
221
+ void perturb(int type);
222
+ /// Take off effect of perturbation and say whether to try dual
223
+ bool unPerturb();
224
+ /// Unflag all variables and return number unflagged
225
+ int unflag();
226
+ /** Get next superbasic -1 if none,
227
+ Normal type is 1
228
+ If type is 3 then initializes sorted list
229
+ if 2 uses list.
230
+ */
231
+ int nextSuperBasic(int superBasicType, CoinIndexedVector * columnArray);
232
+
233
+ /// Create primal ray
234
+ void primalRay(CoinIndexedVector * rowArray);
235
+ /// Clears all bits and clears rowArray[1] etc
236
+ void clearAll();
237
+
238
+ /// Sort of lexicographic resolve
239
+ int lexSolve();
240
+
241
+ //@}
242
+ };
243
+ #endif
244
+
@@ -0,0 +1,446 @@
1
+ /* $Id: ClpSolve.hpp 2078 2015-01-05 12:39:49Z forrest $ */
2
+ // Copyright (C) 2003, 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
+ Authors
7
+
8
+ John Forrest
9
+
10
+ */
11
+ #ifndef ClpSolve_H
12
+ #define ClpSolve_H
13
+
14
+ /**
15
+ This is a very simple class to guide algorithms. It is used to tidy up
16
+ passing parameters to initialSolve and maybe for output from that
17
+
18
+ */
19
+
20
+ class ClpSolve {
21
+
22
+ public:
23
+
24
+ /** enums for solve function */
25
+ enum SolveType {
26
+ useDual = 0,
27
+ usePrimal,
28
+ usePrimalorSprint,
29
+ useBarrier,
30
+ useBarrierNoCross,
31
+ automatic,
32
+ tryDantzigWolfe,
33
+ tryBenders,
34
+ notImplemented
35
+ };
36
+ enum PresolveType {
37
+ presolveOn = 0,
38
+ presolveOff,
39
+ presolveNumber,
40
+ presolveNumberCost
41
+ };
42
+
43
+ /**@name Constructors and destructor and copy */
44
+ //@{
45
+ /// Default constructor
46
+ ClpSolve ( );
47
+ /// Constructor when you really know what you are doing
48
+ ClpSolve ( SolveType method, PresolveType presolveType,
49
+ int numberPasses, int options[6],
50
+ int extraInfo[6], int independentOptions[3]);
51
+ /// Generates code for above constructor
52
+ void generateCpp(FILE * fp);
53
+ /// Copy constructor.
54
+ ClpSolve(const ClpSolve &);
55
+ /// Assignment operator. This copies the data
56
+ ClpSolve & operator=(const ClpSolve & rhs);
57
+ /// Destructor
58
+ ~ClpSolve ( );
59
+ //@}
60
+
61
+ /**@name Functions most useful to user */
62
+ //@{
63
+ /** Special options - bits
64
+ 0 4 - use crash (default allslack in dual, idiot in primal)
65
+ 8 - all slack basis in primal
66
+ 2 16 - switch off interrupt handling
67
+ 3 32 - do not try and make plus minus one matrix
68
+ 64 - do not use sprint even if problem looks good
69
+ */
70
+ /** which translation is:
71
+ which:
72
+ 0 - startup in Dual (nothing if basis exists).:
73
+ 0 - no basis
74
+ 1 - crash
75
+ 2 - use initiative about idiot! but no crash
76
+ 1 - startup in Primal (nothing if basis exists):
77
+ 0 - use initiative
78
+ 1 - use crash
79
+ 2 - use idiot and look at further info
80
+ 3 - use sprint and look at further info
81
+ 4 - use all slack
82
+ 5 - use initiative but no idiot
83
+ 6 - use initiative but no sprint
84
+ 7 - use initiative but no crash
85
+ 8 - do allslack or idiot
86
+ 9 - do allslack or sprint
87
+ 10 - slp before
88
+ 11 - no nothing and primal(0)
89
+ 2 - interrupt handling - 0 yes, 1 no (for threadsafe)
90
+ 3 - whether to make +- 1matrix - 0 yes, 1 no
91
+ 4 - for barrier
92
+ 0 - dense cholesky
93
+ 1 - Wssmp allowing some long columns
94
+ 2 - Wssmp not allowing long columns
95
+ 3 - Wssmp using KKT
96
+ 4 - Using Florida ordering
97
+ 8 - bit set to do scaling
98
+ 16 - set to be aggressive with gamma/delta?
99
+ 32 - Use KKT
100
+ 5 - for presolve
101
+ 1 - switch off dual stuff
102
+ 6 - extra switches
103
+
104
+ */
105
+ void setSpecialOption(int which, int value, int extraInfo = -1);
106
+ int getSpecialOption(int which) const;
107
+
108
+ /// Solve types
109
+ void setSolveType(SolveType method, int extraInfo = -1);
110
+ SolveType getSolveType();
111
+
112
+ // Presolve types
113
+ void setPresolveType(PresolveType amount, int extraInfo = -1);
114
+ PresolveType getPresolveType();
115
+ int getPresolvePasses() const;
116
+ /// Extra info for idiot (or sprint)
117
+ int getExtraInfo(int which) const;
118
+ /** Say to return at once if infeasible,
119
+ default is to solve */
120
+ void setInfeasibleReturn(bool trueFalse);
121
+ inline bool infeasibleReturn() const {
122
+ return independentOptions_[0] != 0;
123
+ }
124
+ /// Whether we want to do dual part of presolve
125
+ inline bool doDual() const {
126
+ return (independentOptions_[1] & 1) == 0;
127
+ }
128
+ inline void setDoDual(bool doDual_) {
129
+ if (doDual_) independentOptions_[1] &= ~1;
130
+ else independentOptions_[1] |= 1;
131
+ }
132
+ /// Whether we want to do singleton part of presolve
133
+ inline bool doSingleton() const {
134
+ return (independentOptions_[1] & 2) == 0;
135
+ }
136
+ inline void setDoSingleton(bool doSingleton_) {
137
+ if (doSingleton_) independentOptions_[1] &= ~2;
138
+ else independentOptions_[1] |= 2;
139
+ }
140
+ /// Whether we want to do doubleton part of presolve
141
+ inline bool doDoubleton() const {
142
+ return (independentOptions_[1] & 4) == 0;
143
+ }
144
+ inline void setDoDoubleton(bool doDoubleton_) {
145
+ if (doDoubleton_) independentOptions_[1] &= ~4;
146
+ else independentOptions_[1] |= 4;
147
+ }
148
+ /// Whether we want to do tripleton part of presolve
149
+ inline bool doTripleton() const {
150
+ return (independentOptions_[1] & 8) == 0;
151
+ }
152
+ inline void setDoTripleton(bool doTripleton_) {
153
+ if (doTripleton_) independentOptions_[1] &= ~8;
154
+ else independentOptions_[1] |= 8;
155
+ }
156
+ /// Whether we want to do tighten part of presolve
157
+ inline bool doTighten() const {
158
+ return (independentOptions_[1] & 16) == 0;
159
+ }
160
+ inline void setDoTighten(bool doTighten_) {
161
+ if (doTighten_) independentOptions_[1] &= ~16;
162
+ else independentOptions_[1] |= 16;
163
+ }
164
+ /// Whether we want to do forcing part of presolve
165
+ inline bool doForcing() const {
166
+ return (independentOptions_[1] & 32) == 0;
167
+ }
168
+ inline void setDoForcing(bool doForcing_) {
169
+ if (doForcing_) independentOptions_[1] &= ~32;
170
+ else independentOptions_[1] |= 32;
171
+ }
172
+ /// Whether we want to do impliedfree part of presolve
173
+ inline bool doImpliedFree() const {
174
+ return (independentOptions_[1] & 64) == 0;
175
+ }
176
+ inline void setDoImpliedFree(bool doImpliedfree) {
177
+ if (doImpliedfree) independentOptions_[1] &= ~64;
178
+ else independentOptions_[1] |= 64;
179
+ }
180
+ /// Whether we want to do dupcol part of presolve
181
+ inline bool doDupcol() const {
182
+ return (independentOptions_[1] & 128) == 0;
183
+ }
184
+ inline void setDoDupcol(bool doDupcol_) {
185
+ if (doDupcol_) independentOptions_[1] &= ~128;
186
+ else independentOptions_[1] |= 128;
187
+ }
188
+ /// Whether we want to do duprow part of presolve
189
+ inline bool doDuprow() const {
190
+ return (independentOptions_[1] & 256) == 0;
191
+ }
192
+ inline void setDoDuprow(bool doDuprow_) {
193
+ if (doDuprow_) independentOptions_[1] &= ~256;
194
+ else independentOptions_[1] |= 256;
195
+ }
196
+ /// Whether we want to do singleton column part of presolve
197
+ inline bool doSingletonColumn() const {
198
+ return (independentOptions_[1] & 512) == 0;
199
+ }
200
+ inline void setDoSingletonColumn(bool doSingleton_) {
201
+ if (doSingleton_) independentOptions_[1] &= ~512;
202
+ else independentOptions_[1] |= 512;
203
+ }
204
+ /// Whether we want to kill small substitutions
205
+ inline bool doKillSmall() const {
206
+ return (independentOptions_[1] & 8192) == 0;
207
+ }
208
+ inline void setDoKillSmall(bool doKill) {
209
+ if (doKill) independentOptions_[1] &= ~8192;
210
+ else independentOptions_[1] |= 8192;
211
+ }
212
+ /// Set whole group
213
+ inline int presolveActions() const {
214
+ return independentOptions_[1] & 0xffff;
215
+ }
216
+ inline void setPresolveActions(int action) {
217
+ independentOptions_[1] = (independentOptions_[1] & 0xffff0000) | (action & 0xffff);
218
+ }
219
+ /// Largest column for substitution (normally 3)
220
+ inline int substitution() const {
221
+ return independentOptions_[2];
222
+ }
223
+ inline void setSubstitution(int value) {
224
+ independentOptions_[2] = value;
225
+ }
226
+ inline void setIndependentOption(int type,int value) {
227
+ independentOptions_[type] = value;
228
+ }
229
+ inline int independentOption(int type) const {
230
+ return independentOptions_[type];
231
+ }
232
+ //@}
233
+
234
+ ////////////////// data //////////////////
235
+ private:
236
+
237
+ /**@name data.
238
+ */
239
+ //@{
240
+ /// Solve type
241
+ SolveType method_;
242
+ /// Presolve type
243
+ PresolveType presolveType_;
244
+ /// Amount of presolve
245
+ int numberPasses_;
246
+ /// Options - last is switch for OsiClp
247
+ int options_[7];
248
+ /// Extra information
249
+ int extraInfo_[7];
250
+ /** Extra algorithm dependent options
251
+ 0 - if set return from clpsolve if infeasible
252
+ 1 - To be copied over to presolve options
253
+ 2 - max substitution level
254
+ If Dantzig Wolfe/benders 0 is number blocks, 2 is #passes (notional)
255
+ */
256
+ int independentOptions_[3];
257
+ //@}
258
+ };
259
+
260
+ /// For saving extra information to see if looping.
261
+ class ClpSimplexProgress {
262
+
263
+ public:
264
+
265
+
266
+ /**@name Constructors and destructor and copy */
267
+ //@{
268
+ /// Default constructor
269
+ ClpSimplexProgress ( );
270
+
271
+ /// Constructor from model
272
+ ClpSimplexProgress ( ClpSimplex * model );
273
+
274
+ /// Copy constructor.
275
+ ClpSimplexProgress(const ClpSimplexProgress &);
276
+
277
+ /// Assignment operator. This copies the data
278
+ ClpSimplexProgress & operator=(const ClpSimplexProgress & rhs);
279
+ /// Destructor
280
+ ~ClpSimplexProgress ( );
281
+ /// Resets as much as possible
282
+ void reset();
283
+ /// Fill from model
284
+ void fillFromModel ( ClpSimplex * model );
285
+
286
+ //@}
287
+
288
+ /**@name Check progress */
289
+ //@{
290
+ /** Returns -1 if okay, -n+1 (n number of times bad) if bad but action taken,
291
+ >=0 if give up and use as problem status
292
+ */
293
+ int looping ( );
294
+ /// Start check at beginning of whileIterating
295
+ void startCheck();
296
+ /// Returns cycle length in whileIterating
297
+ int cycle(int in, int out, int wayIn, int wayOut);
298
+
299
+ /// Returns previous objective (if -1) - current if (0)
300
+ double lastObjective(int back = 1) const;
301
+ /// Set real primal infeasibility and move back
302
+ void setInfeasibility(double value);
303
+ /// Returns real primal infeasibility (if -1) - current if (0)
304
+ double lastInfeasibility(int back = 1) const;
305
+ /// Returns number of primal infeasibilities (if -1) - current if (0)
306
+ int numberInfeasibilities(int back = 1) const;
307
+ /// Modify objective e.g. if dual infeasible in dual
308
+ void modifyObjective(double value);
309
+ /// Returns previous iteration number (if -1) - current if (0)
310
+ int lastIterationNumber(int back = 1) const;
311
+ /// clears all iteration numbers (to switch off panic)
312
+ void clearIterationNumbers();
313
+ /// Odd state
314
+ inline void newOddState() {
315
+ oddState_ = - oddState_ - 1;
316
+ }
317
+ inline void endOddState() {
318
+ oddState_ = abs(oddState_);
319
+ }
320
+ inline void clearOddState() {
321
+ oddState_ = 0;
322
+ }
323
+ inline int oddState() const {
324
+ return oddState_;
325
+ }
326
+ /// number of bad times
327
+ inline int badTimes() const {
328
+ return numberBadTimes_;
329
+ }
330
+ inline void clearBadTimes() {
331
+ numberBadTimes_ = 0;
332
+ }
333
+ /// number of really bad times
334
+ inline int reallyBadTimes() const {
335
+ return numberReallyBadTimes_;
336
+ }
337
+ inline void incrementReallyBadTimes() {
338
+ numberReallyBadTimes_++;
339
+ }
340
+ /// number of times flagged
341
+ inline int timesFlagged() const {
342
+ return numberTimesFlagged_;
343
+ }
344
+ inline void clearTimesFlagged() {
345
+ numberTimesFlagged_ = 0;
346
+ }
347
+ inline void incrementTimesFlagged() {
348
+ numberTimesFlagged_++;
349
+ }
350
+
351
+ //@}
352
+ /**@name Data */
353
+ #define CLP_PROGRESS 5
354
+ //#define CLP_PROGRESS_WEIGHT 10
355
+ //@{
356
+ /// Objective values
357
+ double objective_[CLP_PROGRESS];
358
+ /// Sum of infeasibilities for algorithm
359
+ double infeasibility_[CLP_PROGRESS];
360
+ /// Sum of real primal infeasibilities for primal
361
+ double realInfeasibility_[CLP_PROGRESS];
362
+ #ifdef CLP_PROGRESS_WEIGHT
363
+ /// Objective values for weights
364
+ double objectiveWeight_[CLP_PROGRESS_WEIGHT];
365
+ /// Sum of infeasibilities for algorithm for weights
366
+ double infeasibilityWeight_[CLP_PROGRESS_WEIGHT];
367
+ /// Sum of real primal infeasibilities for primal for weights
368
+ double realInfeasibilityWeight_[CLP_PROGRESS_WEIGHT];
369
+ /// Drop for weights
370
+ double drop_;
371
+ /// Best? for weights
372
+ double best_;
373
+ #endif
374
+ /// Initial weight for weights
375
+ double initialWeight_;
376
+ #define CLP_CYCLE 12
377
+ /// For cycle checking
378
+ //double obj_[CLP_CYCLE];
379
+ int in_[CLP_CYCLE];
380
+ int out_[CLP_CYCLE];
381
+ char way_[CLP_CYCLE];
382
+ /// Pointer back to model so we can get information
383
+ ClpSimplex * model_;
384
+ /// Number of infeasibilities
385
+ int numberInfeasibilities_[CLP_PROGRESS];
386
+ /// Iteration number at which occurred
387
+ int iterationNumber_[CLP_PROGRESS];
388
+ #ifdef CLP_PROGRESS_WEIGHT
389
+ /// Number of infeasibilities for weights
390
+ int numberInfeasibilitiesWeight_[CLP_PROGRESS_WEIGHT];
391
+ /// Iteration number at which occurred for weights
392
+ int iterationNumberWeight_[CLP_PROGRESS_WEIGHT];
393
+ #endif
394
+ /// Number of times checked (so won't stop too early)
395
+ int numberTimes_;
396
+ /// Number of times it looked like loop
397
+ int numberBadTimes_;
398
+ /// Number really bad times
399
+ int numberReallyBadTimes_;
400
+ /// Number of times no iterations as flagged
401
+ int numberTimesFlagged_;
402
+ /// If things are in an odd state
403
+ int oddState_;
404
+ //@}
405
+ };
406
+
407
+ #include "ClpConfig.h"
408
+ #if CLP_HAS_ABC
409
+ #include "AbcCommon.hpp"
410
+ /// For saving extra information to see if looping.
411
+ class AbcSimplexProgress : public ClpSimplexProgress {
412
+
413
+ public:
414
+
415
+
416
+ /**@name Constructors and destructor and copy */
417
+ //@{
418
+ /// Default constructor
419
+ AbcSimplexProgress ( );
420
+
421
+ /// Constructor from model
422
+ AbcSimplexProgress ( ClpSimplex * model );
423
+
424
+ /// Copy constructor.
425
+ AbcSimplexProgress(const AbcSimplexProgress &);
426
+
427
+ /// Assignment operator. This copies the data
428
+ AbcSimplexProgress & operator=(const AbcSimplexProgress & rhs);
429
+ /// Destructor
430
+ ~AbcSimplexProgress ( );
431
+
432
+ //@}
433
+
434
+ /**@name Check progress */
435
+ //@{
436
+ /** Returns -1 if okay, -n+1 (n number of times bad) if bad but action taken,
437
+ >=0 if give up and use as problem status
438
+ */
439
+ int looping ( );
440
+
441
+ //@}
442
+ /**@name Data */
443
+ //@}
444
+ };
445
+ #endif
446
+ #endif