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