ruby-cbc 0.1.9 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/Rakefile +0 -2
  4. data/lib/ruby-cbc.rb +1 -1
  5. data/lib/ruby-cbc/problem.rb +6 -8
  6. data/lib/ruby-cbc/version.rb +1 -1
  7. data/ruby-cbc.gemspec +3 -2
  8. metadata +17 -287
  9. data/ext/ruby-cbc/cbc.i +0 -15
  10. data/ext/ruby-cbc/cbc_wrap.c +0 -4618
  11. data/ext/ruby-cbc/extconf.rb +0 -60
  12. data/ext/ruby-cbc/install/bin/cbc +0 -0
  13. data/ext/ruby-cbc/install/bin/clp +0 -0
  14. data/ext/ruby-cbc/install/include/coin/CbcBranchActual.hpp +0 -24
  15. data/ext/ruby-cbc/install/include/coin/CbcBranchAllDifferent.hpp +0 -62
  16. data/ext/ruby-cbc/install/include/coin/CbcBranchBase.hpp +0 -78
  17. data/ext/ruby-cbc/install/include/coin/CbcBranchCut.hpp +0 -183
  18. data/ext/ruby-cbc/install/include/coin/CbcBranchDecision.hpp +0 -129
  19. data/ext/ruby-cbc/install/include/coin/CbcBranchDefaultDecision.hpp +0 -100
  20. data/ext/ruby-cbc/install/include/coin/CbcBranchDynamic.hpp +0 -206
  21. data/ext/ruby-cbc/install/include/coin/CbcBranchLotsize.hpp +0 -242
  22. data/ext/ruby-cbc/install/include/coin/CbcBranchToFixLots.hpp +0 -94
  23. data/ext/ruby-cbc/install/include/coin/CbcBranchingObject.hpp +0 -236
  24. data/ext/ruby-cbc/install/include/coin/CbcClique.hpp +0 -303
  25. data/ext/ruby-cbc/install/include/coin/CbcCompare.hpp +0 -39
  26. data/ext/ruby-cbc/install/include/coin/CbcCompareActual.hpp +0 -14
  27. data/ext/ruby-cbc/install/include/coin/CbcCompareBase.hpp +0 -142
  28. data/ext/ruby-cbc/install/include/coin/CbcCompareDefault.hpp +0 -120
  29. data/ext/ruby-cbc/install/include/coin/CbcCompareDepth.hpp +0 -47
  30. data/ext/ruby-cbc/install/include/coin/CbcCompareEstimate.hpp +0 -48
  31. data/ext/ruby-cbc/install/include/coin/CbcCompareObjective.hpp +0 -49
  32. data/ext/ruby-cbc/install/include/coin/CbcConfig.h +0 -14
  33. data/ext/ruby-cbc/install/include/coin/CbcConsequence.hpp +0 -49
  34. data/ext/ruby-cbc/install/include/coin/CbcCountRowCut.hpp +0 -168
  35. data/ext/ruby-cbc/install/include/coin/CbcCutGenerator.hpp +0 -482
  36. data/ext/ruby-cbc/install/include/coin/CbcCutModifier.hpp +0 -57
  37. data/ext/ruby-cbc/install/include/coin/CbcCutSubsetModifier.hpp +0 -66
  38. data/ext/ruby-cbc/install/include/coin/CbcDummyBranchingObject.hpp +0 -83
  39. data/ext/ruby-cbc/install/include/coin/CbcEventHandler.hpp +0 -245
  40. data/ext/ruby-cbc/install/include/coin/CbcFathom.hpp +0 -137
  41. data/ext/ruby-cbc/install/include/coin/CbcFathomDynamicProgramming.hpp +0 -169
  42. data/ext/ruby-cbc/install/include/coin/CbcFeasibilityBase.hpp +0 -56
  43. data/ext/ruby-cbc/install/include/coin/CbcFixVariable.hpp +0 -67
  44. data/ext/ruby-cbc/install/include/coin/CbcFollowOn.hpp +0 -207
  45. data/ext/ruby-cbc/install/include/coin/CbcFullNodeInfo.hpp +0 -161
  46. data/ext/ruby-cbc/install/include/coin/CbcGeneral.hpp +0 -60
  47. data/ext/ruby-cbc/install/include/coin/CbcGeneralDepth.hpp +0 -279
  48. data/ext/ruby-cbc/install/include/coin/CbcHeuristic.hpp +0 -682
  49. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDINS.hpp +0 -96
  50. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDW.hpp +0 -309
  51. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDive.hpp +0 -192
  52. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveCoefficient.hpp +0 -52
  53. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveFractional.hpp +0 -52
  54. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveGuided.hpp +0 -55
  55. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveLineSearch.hpp +0 -52
  56. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDivePseudoCost.hpp +0 -60
  57. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveVectorLength.hpp +0 -52
  58. data/ext/ruby-cbc/install/include/coin/CbcHeuristicFPump.hpp +0 -340
  59. data/ext/ruby-cbc/install/include/coin/CbcHeuristicGreedy.hpp +0 -280
  60. data/ext/ruby-cbc/install/include/coin/CbcHeuristicLocal.hpp +0 -271
  61. data/ext/ruby-cbc/install/include/coin/CbcHeuristicPivotAndFix.hpp +0 -58
  62. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRENS.hpp +0 -77
  63. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRINS.hpp +0 -102
  64. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRandRound.hpp +0 -58
  65. data/ext/ruby-cbc/install/include/coin/CbcHeuristicVND.hpp +0 -94
  66. data/ext/ruby-cbc/install/include/coin/CbcLinked.hpp +0 -1406
  67. data/ext/ruby-cbc/install/include/coin/CbcMessage.hpp +0 -94
  68. data/ext/ruby-cbc/install/include/coin/CbcMipStartIO.hpp +0 -26
  69. data/ext/ruby-cbc/install/include/coin/CbcModel.hpp +0 -2952
  70. data/ext/ruby-cbc/install/include/coin/CbcNWay.hpp +0 -166
  71. data/ext/ruby-cbc/install/include/coin/CbcNode.hpp +0 -351
  72. data/ext/ruby-cbc/install/include/coin/CbcNodeInfo.hpp +0 -349
  73. data/ext/ruby-cbc/install/include/coin/CbcObject.hpp +0 -272
  74. data/ext/ruby-cbc/install/include/coin/CbcObjectUpdateData.hpp +0 -64
  75. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.cpp +0 -4134
  76. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.hpp +0 -532
  77. data/ext/ruby-cbc/install/include/coin/CbcParam.hpp +0 -324
  78. data/ext/ruby-cbc/install/include/coin/CbcPartialNodeInfo.hpp +0 -110
  79. data/ext/ruby-cbc/install/include/coin/CbcSOS.hpp +0 -279
  80. data/ext/ruby-cbc/install/include/coin/CbcSimpleInteger.hpp +0 -286
  81. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +0 -564
  82. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerPseudoCost.hpp +0 -114
  83. data/ext/ruby-cbc/install/include/coin/CbcSolver.hpp +0 -447
  84. data/ext/ruby-cbc/install/include/coin/CbcStrategy.hpp +0 -258
  85. data/ext/ruby-cbc/install/include/coin/CbcSubProblem.hpp +0 -83
  86. data/ext/ruby-cbc/install/include/coin/CbcTree.hpp +0 -490
  87. data/ext/ruby-cbc/install/include/coin/CbcTreeLocal.hpp +0 -372
  88. data/ext/ruby-cbc/install/include/coin/Cbc_C_Interface.h +0 -381
  89. data/ext/ruby-cbc/install/include/coin/Cgl012cut.hpp +0 -464
  90. data/ext/ruby-cbc/install/include/coin/CglAllDifferent.hpp +0 -115
  91. data/ext/ruby-cbc/install/include/coin/CglClique.hpp +0 -308
  92. data/ext/ruby-cbc/install/include/coin/CglConfig.h +0 -19
  93. data/ext/ruby-cbc/install/include/coin/CglCutGenerator.hpp +0 -121
  94. data/ext/ruby-cbc/install/include/coin/CglDuplicateRow.hpp +0 -189
  95. data/ext/ruby-cbc/install/include/coin/CglFlowCover.hpp +0 -371
  96. data/ext/ruby-cbc/install/include/coin/CglGMI.hpp +0 -364
  97. data/ext/ruby-cbc/install/include/coin/CglGMIParam.hpp +0 -313
  98. data/ext/ruby-cbc/install/include/coin/CglGomory.hpp +0 -204
  99. data/ext/ruby-cbc/install/include/coin/CglKnapsackCover.hpp +0 -310
  100. data/ext/ruby-cbc/install/include/coin/CglLandP.hpp +0 -306
  101. data/ext/ruby-cbc/install/include/coin/CglLandPValidator.hpp +0 -130
  102. data/ext/ruby-cbc/install/include/coin/CglLiftAndProject.hpp +0 -104
  103. data/ext/ruby-cbc/install/include/coin/CglMessage.hpp +0 -50
  104. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding.hpp +0 -429
  105. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding2.hpp +0 -427
  106. data/ext/ruby-cbc/install/include/coin/CglOddHole.hpp +0 -160
  107. data/ext/ruby-cbc/install/include/coin/CglParam.hpp +0 -93
  108. data/ext/ruby-cbc/install/include/coin/CglPreProcess.hpp +0 -492
  109. data/ext/ruby-cbc/install/include/coin/CglProbing.hpp +0 -543
  110. data/ext/ruby-cbc/install/include/coin/CglRedSplit.hpp +0 -448
  111. data/ext/ruby-cbc/install/include/coin/CglRedSplit2.hpp +0 -494
  112. data/ext/ruby-cbc/install/include/coin/CglRedSplit2Param.hpp +0 -495
  113. data/ext/ruby-cbc/install/include/coin/CglRedSplitParam.hpp +0 -272
  114. data/ext/ruby-cbc/install/include/coin/CglResidualCapacity.hpp +0 -240
  115. data/ext/ruby-cbc/install/include/coin/CglSimpleRounding.hpp +0 -174
  116. data/ext/ruby-cbc/install/include/coin/CglStored.hpp +0 -125
  117. data/ext/ruby-cbc/install/include/coin/CglTreeInfo.hpp +0 -180
  118. data/ext/ruby-cbc/install/include/coin/CglTwomir.hpp +0 -565
  119. data/ext/ruby-cbc/install/include/coin/CglZeroHalf.hpp +0 -133
  120. data/ext/ruby-cbc/install/include/coin/ClpAmplObjective.hpp +0 -113
  121. data/ext/ruby-cbc/install/include/coin/ClpCholeskyBase.hpp +0 -294
  122. data/ext/ruby-cbc/install/include/coin/ClpCholeskyDense.hpp +0 -162
  123. data/ext/ruby-cbc/install/include/coin/ClpConfig.h +0 -17
  124. data/ext/ruby-cbc/install/include/coin/ClpConstraint.hpp +0 -125
  125. data/ext/ruby-cbc/install/include/coin/ClpConstraintAmpl.hpp +0 -108
  126. data/ext/ruby-cbc/install/include/coin/ClpConstraintLinear.hpp +0 -110
  127. data/ext/ruby-cbc/install/include/coin/ClpConstraintQuadratic.hpp +0 -119
  128. data/ext/ruby-cbc/install/include/coin/ClpDualRowDantzig.hpp +0 -71
  129. data/ext/ruby-cbc/install/include/coin/ClpDualRowPivot.hpp +0 -129
  130. data/ext/ruby-cbc/install/include/coin/ClpDualRowSteepest.hpp +0 -153
  131. data/ext/ruby-cbc/install/include/coin/ClpDummyMatrix.hpp +0 -183
  132. data/ext/ruby-cbc/install/include/coin/ClpDynamicExampleMatrix.hpp +0 -186
  133. data/ext/ruby-cbc/install/include/coin/ClpDynamicMatrix.hpp +0 -381
  134. data/ext/ruby-cbc/install/include/coin/ClpEventHandler.hpp +0 -187
  135. data/ext/ruby-cbc/install/include/coin/ClpFactorization.hpp +0 -432
  136. data/ext/ruby-cbc/install/include/coin/ClpGubDynamicMatrix.hpp +0 -247
  137. data/ext/ruby-cbc/install/include/coin/ClpGubMatrix.hpp +0 -358
  138. data/ext/ruby-cbc/install/include/coin/ClpInterior.hpp +0 -570
  139. data/ext/ruby-cbc/install/include/coin/ClpLinearObjective.hpp +0 -103
  140. data/ext/ruby-cbc/install/include/coin/ClpMatrixBase.hpp +0 -524
  141. data/ext/ruby-cbc/install/include/coin/ClpMessage.hpp +0 -131
  142. data/ext/ruby-cbc/install/include/coin/ClpModel.hpp +0 -1307
  143. data/ext/ruby-cbc/install/include/coin/ClpNetworkMatrix.hpp +0 -229
  144. data/ext/ruby-cbc/install/include/coin/ClpNode.hpp +0 -349
  145. data/ext/ruby-cbc/install/include/coin/ClpNonLinearCost.hpp +0 -401
  146. data/ext/ruby-cbc/install/include/coin/ClpObjective.hpp +0 -134
  147. data/ext/ruby-cbc/install/include/coin/ClpPackedMatrix.hpp +0 -638
  148. data/ext/ruby-cbc/install/include/coin/ClpParameters.hpp +0 -126
  149. data/ext/ruby-cbc/install/include/coin/ClpPdcoBase.hpp +0 -103
  150. data/ext/ruby-cbc/install/include/coin/ClpPlusMinusOneMatrix.hpp +0 -290
  151. data/ext/ruby-cbc/install/include/coin/ClpPresolve.hpp +0 -299
  152. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnDantzig.hpp +0 -72
  153. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnPivot.hpp +0 -155
  154. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnSteepest.hpp +0 -247
  155. data/ext/ruby-cbc/install/include/coin/ClpQuadraticObjective.hpp +0 -155
  156. data/ext/ruby-cbc/install/include/coin/ClpSimplex.hpp +0 -1797
  157. data/ext/ruby-cbc/install/include/coin/ClpSimplexDual.hpp +0 -300
  158. data/ext/ruby-cbc/install/include/coin/ClpSimplexNonlinear.hpp +0 -117
  159. data/ext/ruby-cbc/install/include/coin/ClpSimplexOther.hpp +0 -277
  160. data/ext/ruby-cbc/install/include/coin/ClpSimplexPrimal.hpp +0 -244
  161. data/ext/ruby-cbc/install/include/coin/ClpSolve.hpp +0 -446
  162. data/ext/ruby-cbc/install/include/coin/Clp_C_Interface.h +0 -525
  163. data/ext/ruby-cbc/install/include/coin/CoinAlloc.hpp +0 -176
  164. data/ext/ruby-cbc/install/include/coin/CoinBuild.hpp +0 -149
  165. data/ext/ruby-cbc/install/include/coin/CoinDenseFactorization.hpp +0 -419
  166. data/ext/ruby-cbc/install/include/coin/CoinDenseVector.hpp +0 -383
  167. data/ext/ruby-cbc/install/include/coin/CoinDistance.hpp +0 -48
  168. data/ext/ruby-cbc/install/include/coin/CoinError.hpp +0 -257
  169. data/ext/ruby-cbc/install/include/coin/CoinFactorization.hpp +0 -2044
  170. data/ext/ruby-cbc/install/include/coin/CoinFileIO.hpp +0 -166
  171. data/ext/ruby-cbc/install/include/coin/CoinFinite.hpp +0 -34
  172. data/ext/ruby-cbc/install/include/coin/CoinFloatEqual.hpp +0 -177
  173. data/ext/ruby-cbc/install/include/coin/CoinHelperFunctions.hpp +0 -1111
  174. data/ext/ruby-cbc/install/include/coin/CoinIndexedVector.hpp +0 -1164
  175. data/ext/ruby-cbc/install/include/coin/CoinLpIO.hpp +0 -805
  176. data/ext/ruby-cbc/install/include/coin/CoinMessage.hpp +0 -96
  177. data/ext/ruby-cbc/install/include/coin/CoinMessageHandler.hpp +0 -666
  178. data/ext/ruby-cbc/install/include/coin/CoinModel.hpp +0 -1054
  179. data/ext/ruby-cbc/install/include/coin/CoinModelUseful.hpp +0 -441
  180. data/ext/ruby-cbc/install/include/coin/CoinMpsIO.hpp +0 -1056
  181. data/ext/ruby-cbc/install/include/coin/CoinOslFactorization.hpp +0 -280
  182. data/ext/ruby-cbc/install/include/coin/CoinPackedMatrix.hpp +0 -947
  183. data/ext/ruby-cbc/install/include/coin/CoinPackedVector.hpp +0 -657
  184. data/ext/ruby-cbc/install/include/coin/CoinPackedVectorBase.hpp +0 -269
  185. data/ext/ruby-cbc/install/include/coin/CoinParam.hpp +0 -644
  186. data/ext/ruby-cbc/install/include/coin/CoinPragma.hpp +0 -26
  187. data/ext/ruby-cbc/install/include/coin/CoinPresolveDoubleton.hpp +0 -73
  188. data/ext/ruby-cbc/install/include/coin/CoinPresolveDual.hpp +0 -85
  189. data/ext/ruby-cbc/install/include/coin/CoinPresolveDupcol.hpp +0 -226
  190. data/ext/ruby-cbc/install/include/coin/CoinPresolveEmpty.hpp +0 -116
  191. data/ext/ruby-cbc/install/include/coin/CoinPresolveFixed.hpp +0 -181
  192. data/ext/ruby-cbc/install/include/coin/CoinPresolveForcing.hpp +0 -61
  193. data/ext/ruby-cbc/install/include/coin/CoinPresolveImpliedFree.hpp +0 -60
  194. data/ext/ruby-cbc/install/include/coin/CoinPresolveIsolated.hpp +0 -51
  195. data/ext/ruby-cbc/install/include/coin/CoinPresolveMatrix.hpp +0 -1842
  196. data/ext/ruby-cbc/install/include/coin/CoinPresolveMonitor.hpp +0 -105
  197. data/ext/ruby-cbc/install/include/coin/CoinPresolvePsdebug.hpp +0 -166
  198. data/ext/ruby-cbc/install/include/coin/CoinPresolveSingleton.hpp +0 -112
  199. data/ext/ruby-cbc/install/include/coin/CoinPresolveSubst.hpp +0 -101
  200. data/ext/ruby-cbc/install/include/coin/CoinPresolveTighten.hpp +0 -55
  201. data/ext/ruby-cbc/install/include/coin/CoinPresolveTripleton.hpp +0 -66
  202. data/ext/ruby-cbc/install/include/coin/CoinPresolveUseless.hpp +0 -63
  203. data/ext/ruby-cbc/install/include/coin/CoinPresolveZeros.hpp +0 -60
  204. data/ext/ruby-cbc/install/include/coin/CoinRational.hpp +0 -44
  205. data/ext/ruby-cbc/install/include/coin/CoinSearchTree.hpp +0 -465
  206. data/ext/ruby-cbc/install/include/coin/CoinShallowPackedVector.hpp +0 -148
  207. data/ext/ruby-cbc/install/include/coin/CoinSignal.hpp +0 -117
  208. data/ext/ruby-cbc/install/include/coin/CoinSimpFactorization.hpp +0 -431
  209. data/ext/ruby-cbc/install/include/coin/CoinSmartPtr.hpp +0 -528
  210. data/ext/ruby-cbc/install/include/coin/CoinSnapshot.hpp +0 -476
  211. data/ext/ruby-cbc/install/include/coin/CoinSort.hpp +0 -678
  212. data/ext/ruby-cbc/install/include/coin/CoinStructuredModel.hpp +0 -247
  213. data/ext/ruby-cbc/install/include/coin/CoinTime.hpp +0 -310
  214. data/ext/ruby-cbc/install/include/coin/CoinTypes.hpp +0 -64
  215. data/ext/ruby-cbc/install/include/coin/CoinUtility.hpp +0 -19
  216. data/ext/ruby-cbc/install/include/coin/CoinUtilsConfig.h +0 -34
  217. data/ext/ruby-cbc/install/include/coin/CoinWarmStart.hpp +0 -58
  218. data/ext/ruby-cbc/install/include/coin/CoinWarmStartBasis.hpp +0 -456
  219. data/ext/ruby-cbc/install/include/coin/CoinWarmStartDual.hpp +0 -166
  220. data/ext/ruby-cbc/install/include/coin/CoinWarmStartPrimalDual.hpp +0 -211
  221. data/ext/ruby-cbc/install/include/coin/CoinWarmStartVector.hpp +0 -488
  222. data/ext/ruby-cbc/install/include/coin/Coin_C_defines.h +0 -115
  223. data/ext/ruby-cbc/install/include/coin/Idiot.hpp +0 -298
  224. data/ext/ruby-cbc/install/include/coin/OsiAuxInfo.hpp +0 -206
  225. data/ext/ruby-cbc/install/include/coin/OsiBranchingObject.hpp +0 -1005
  226. data/ext/ruby-cbc/install/include/coin/OsiCbcSolverInterface.hpp +0 -764
  227. data/ext/ruby-cbc/install/include/coin/OsiChooseVariable.hpp +0 -534
  228. data/ext/ruby-cbc/install/include/coin/OsiClpSolverInterface.hpp +0 -1509
  229. data/ext/ruby-cbc/install/include/coin/OsiColCut.hpp +0 -324
  230. data/ext/ruby-cbc/install/include/coin/OsiCollections.hpp +0 -35
  231. data/ext/ruby-cbc/install/include/coin/OsiConfig.h +0 -19
  232. data/ext/ruby-cbc/install/include/coin/OsiCut.hpp +0 -245
  233. data/ext/ruby-cbc/install/include/coin/OsiCuts.hpp +0 -474
  234. data/ext/ruby-cbc/install/include/coin/OsiPresolve.hpp +0 -252
  235. data/ext/ruby-cbc/install/include/coin/OsiRowCut.hpp +0 -331
  236. data/ext/ruby-cbc/install/include/coin/OsiRowCutDebugger.hpp +0 -187
  237. data/ext/ruby-cbc/install/include/coin/OsiSolverBranch.hpp +0 -152
  238. data/ext/ruby-cbc/install/include/coin/OsiSolverInterface.hpp +0 -2143
  239. data/ext/ruby-cbc/install/include/coin/OsiSolverParameters.hpp +0 -142
  240. data/ext/ruby-cbc/install/include/coin/OsiUnitTests.hpp +0 -374
  241. data/ext/ruby-cbc/install/lib/libCbc.la +0 -35
  242. data/ext/ruby-cbc/install/lib/libCbc.so +0 -0
  243. data/ext/ruby-cbc/install/lib/libCbc.so.3 +0 -0
  244. data/ext/ruby-cbc/install/lib/libCbc.so.3.9.7 +0 -0
  245. data/ext/ruby-cbc/install/lib/libCbcSolver.la +0 -35
  246. data/ext/ruby-cbc/install/lib/libCbcSolver.so +0 -0
  247. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3 +0 -0
  248. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3.9.7 +0 -0
  249. data/ext/ruby-cbc/install/lib/libCgl.la +0 -35
  250. data/ext/ruby-cbc/install/lib/libCgl.so +0 -0
  251. data/ext/ruby-cbc/install/lib/libCgl.so.1 +0 -0
  252. data/ext/ruby-cbc/install/lib/libCgl.so.1.9.7 +0 -0
  253. data/ext/ruby-cbc/install/lib/libClp.la +0 -35
  254. data/ext/ruby-cbc/install/lib/libClp.so +0 -0
  255. data/ext/ruby-cbc/install/lib/libClp.so.1 +0 -0
  256. data/ext/ruby-cbc/install/lib/libClp.so.1.13.9 +0 -0
  257. data/ext/ruby-cbc/install/lib/libClpSolver.la +0 -35
  258. data/ext/ruby-cbc/install/lib/libClpSolver.so +0 -0
  259. data/ext/ruby-cbc/install/lib/libClpSolver.so.1 +0 -0
  260. data/ext/ruby-cbc/install/lib/libClpSolver.so.1.13.9 +0 -0
  261. data/ext/ruby-cbc/install/lib/libCoinUtils.la +0 -35
  262. data/ext/ruby-cbc/install/lib/libCoinUtils.so +0 -0
  263. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3 +0 -0
  264. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3.10.11 +0 -0
  265. data/ext/ruby-cbc/install/lib/libOsi.la +0 -35
  266. data/ext/ruby-cbc/install/lib/libOsi.so +0 -0
  267. data/ext/ruby-cbc/install/lib/libOsi.so.1 +0 -0
  268. data/ext/ruby-cbc/install/lib/libOsi.so.1.12.6 +0 -0
  269. data/ext/ruby-cbc/install/lib/libOsiCbc.la +0 -35
  270. data/ext/ruby-cbc/install/lib/libOsiCbc.so +0 -0
  271. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3 +0 -0
  272. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3.9.7 +0 -0
  273. data/ext/ruby-cbc/install/lib/libOsiClp.la +0 -35
  274. data/ext/ruby-cbc/install/lib/libOsiClp.so +0 -0
  275. data/ext/ruby-cbc/install/lib/libOsiClp.so.1 +0 -0
  276. data/ext/ruby-cbc/install/lib/libOsiClp.so.1.13.9 +0 -0
  277. data/ext/ruby-cbc/install/lib/libOsiCommonTests.la +0 -35
  278. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so +0 -0
  279. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1 +0 -0
  280. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1.12.6 +0 -0
  281. data/ext/ruby-cbc/install/lib/pkgconfig/cbc.pc +0 -12
  282. data/ext/ruby-cbc/install/lib/pkgconfig/cgl.pc +0 -12
  283. data/ext/ruby-cbc/install/lib/pkgconfig/clp.pc +0 -12
  284. data/ext/ruby-cbc/install/lib/pkgconfig/coindatamiplib3.pc +0 -9
  285. data/ext/ruby-cbc/install/lib/pkgconfig/coindatasample.pc +0 -9
  286. data/ext/ruby-cbc/install/lib/pkgconfig/coinutils.pc +0 -12
  287. data/ext/ruby-cbc/install/lib/pkgconfig/osi-cbc.pc +0 -12
  288. data/ext/ruby-cbc/install/lib/pkgconfig/osi-clp.pc +0 -12
  289. data/ext/ruby-cbc/install/lib/pkgconfig/osi-unittests.pc +0 -12
  290. data/ext/ruby-cbc/install/lib/pkgconfig/osi.pc +0 -12
@@ -1,448 +0,0 @@
1
- // Last edit: 4/20/07
2
- //
3
- // Name: CglRedSplit.hpp
4
- // Author: Francois Margot
5
- // Tepper School of Business
6
- // Carnegie Mellon University, Pittsburgh, PA 15213
7
- // email: fmargot@andrew.cmu.edu
8
- // Date: 2/6/05
9
- //
10
- // $Id: CglRedSplit.hpp 1119 2013-04-06 20:24:18Z stefan $
11
- //-----------------------------------------------------------------------------
12
- // Copyright (C) 2005, Francois Margot and others. All Rights Reserved.
13
- // This code is licensed under the terms of the Eclipse Public License (EPL).
14
-
15
- #ifndef CglRedSplit_H
16
- #define CglRedSplit_H
17
-
18
- #include "CglCutGenerator.hpp"
19
- #include "CglRedSplitParam.hpp"
20
-
21
- /** Gomory Reduce-and-Split Cut Generator Class; See method generateCuts().
22
- Based on the paper by K. Anderson, G. Cornuejols, Yanjun Li,
23
- "Reduce-and-Split Cuts: Improving the Performance of Mixed Integer
24
- Gomory Cuts", Management Science 51 (2005). */
25
-
26
- class CglRedSplit : public CglCutGenerator {
27
-
28
- friend void CglRedSplitUnitTest(const OsiSolverInterface * siP,
29
- const std::string mpdDir);
30
- public:
31
- /**@name generateCuts */
32
- //@{
33
- /** Generate Reduce-and-Split Mixed Integer Gomory cuts
34
- for the model of the solver interface si.
35
-
36
- Insert the generated cuts into OsiCuts cs.
37
-
38
- Warning: This generator currently works only with the Lp solvers Clp or
39
- Cplex9.0 or higher. It requires access to the optimal tableau and
40
- optimal basis inverse and makes assumptions on the way slack variables
41
- are added by the solver. The Osi implementations for Clp and Cplex
42
- verify these assumptions.
43
-
44
- When calling the generator, the solver interface si
45
- must contain an optimized
46
- problem and information related to the optimal basis must be available
47
- through the OsiSolverInterface methods (si->optimalBasisIsAvailable()
48
- must return 'true'). It is also essential that the integrality of
49
- structural variable i can be obtained using si->isInteger(i).
50
-
51
- Reduce-and-Split cuts are variants of Gomory cuts: Starting from
52
- the current optimal tableau, linear combinations of the rows of
53
- the current optimal simplex tableau are used for generating Gomory
54
- cuts. The choice of the linear combinations is driven by the objective
55
- of reducing the coefficients of the non basic continuous variables
56
- in the resulting row.
57
- Note that this generator might not be able to generate cuts for some
58
- solutions violating integrality constraints.
59
-
60
- */
61
- virtual void generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
62
- const CglTreeInfo info = CglTreeInfo());
63
-
64
- /// Return true if needs optimal basis to do cuts (will return true)
65
- virtual bool needsOptimalBasis() const;
66
- //@}
67
-
68
-
69
- /**@name Public Methods */
70
- //@{
71
-
72
- // Set the parameters to the values of the given CglRedSplitParam object.
73
- void setParam(const CglRedSplitParam &source);
74
- // Return the CglRedSplitParam object of the generator.
75
- inline CglRedSplitParam getParam() const {return param;}
76
-
77
- // Compute entries of low_is_lub and up_is_lub.
78
- void compute_is_lub();
79
-
80
- // Compute entries of is_integer.
81
- void compute_is_integer();
82
-
83
- /// Set given_optsol to the given optimal solution given_sol.
84
- /// If given_optsol is set using this method,
85
- /// the code will stop as soon as
86
- /// a generated cut is violated by the given solution; exclusively
87
- /// for debugging purposes.
88
- void set_given_optsol(const double *given_sol, const int card_sol);
89
-
90
- /// Print some of the data members
91
- void print() const;
92
-
93
- /// Print the current simplex tableau
94
- void printOptTab(OsiSolverInterface *solver) const;
95
-
96
- //@}
97
-
98
- /**@name Public Methods (soon to be obsolete)*/
99
- //@{
100
- //************************************************************
101
- // TO BE REMOVED
102
- /** Set limit, the maximum number of non zero coefficients in generated cut;
103
- Default: 50 */
104
- void setLimit(int limit);
105
- /** Get value of limit */
106
- int getLimit() const;
107
-
108
- /** Set away, the minimum distance from being integer used for selecting
109
- rows for cut generation; all rows whose pivot variable should be
110
- integer but is more than away from integrality will be selected;
111
- Default: 0.05 */
112
- void setAway(double value);
113
- /// Get value of away
114
- double getAway() const;
115
- /** Set the value of LUB, value considered large for the absolute value of
116
- a lower or upper bound on a variable;
117
- Default: 1000 */
118
- void setLUB(double value);
119
- /** Get the value of LUB */
120
- double getLUB() const;
121
-
122
- /** Set the value of EPS, epsilon for double computations;
123
- Default: 1e-7 */
124
- void setEPS(double value);
125
- /** Get the value of EPS */
126
- double getEPS() const;
127
-
128
- /** Set the value of EPS_COEFF, epsilon for values of coefficients;
129
- Default: 1e-8 */
130
- void setEPS_COEFF(double value);
131
- /** Get the value of EPS_COEFF */
132
- double getEPS_COEFF() const;
133
-
134
- /** Set the value of EPS_COEFF_LUB, epsilon for values of coefficients for
135
- variables with absolute value of lower or upper bound larger than LUB;
136
- Default: 1e-13 */
137
- void setEPS_COEFF_LUB(double value);
138
- /** Get the value of EPS_COEFF_LUB */
139
- double getEPS_COEFF_LUB() const;
140
-
141
- /** Set the value of EPS_RELAX, value used for relaxing the right hand side
142
- of each generated cut;
143
- Default: 1e-8 */
144
- void setEPS_RELAX(double value);
145
- /** Get the value of EPS_RELAX */
146
- double getEPS_RELAX() const;
147
-
148
- /** Set the value of normIsZero, the threshold for considering a norm to be
149
- 0; Default: 1e-5 */
150
- void setNormIsZero(double value);
151
- /** Get the value of normIsZero */
152
- double getNormIsZero() const;
153
-
154
- /** Set the value of minReduc, threshold for relative norm improvement for
155
- performing a reduction; Default: 0.05 */
156
- void setMinReduc(double value);
157
- /// Get the value of minReduc
158
- double getMinReduc() const;
159
-
160
- /** Set the maximum allowed value for (mTab * mTab * CoinMax(mTab, nTab)) where
161
- mTab is the number of rows used in the combinations and nTab is the
162
- number of continuous non basic variables. The work of the generator is
163
- proportional to (mTab * mTab * CoinMax(mTab, nTab)). Reducing the value of
164
- maxTab makes the generator faster, but weaker. Default: 1e7. */
165
- void setMaxTab(double value);
166
- /// Get the value of maxTab
167
- double getMaxTab() const;
168
- // END TO BE REMOVED
169
- //************************************************************
170
-
171
- //@}
172
-
173
- /**@name Constructors and destructors */
174
- //@{
175
- /// Default constructor
176
- CglRedSplit();
177
-
178
- /// Constructor with specified parameters
179
- CglRedSplit(const CglRedSplitParam &RS_param);
180
-
181
- /// Copy constructor
182
- CglRedSplit (const CglRedSplit &);
183
-
184
- /// Clone
185
- virtual CglCutGenerator * clone() const;
186
-
187
- /// Assignment operator
188
- CglRedSplit &
189
- operator=(
190
- const CglRedSplit& rhs);
191
-
192
- /// Destructor
193
- virtual
194
- ~CglRedSplit ();
195
- /// Create C++ lines to get to current state
196
- virtual std::string generateCpp( FILE * fp);
197
- //@}
198
-
199
- private:
200
-
201
- // Private member methods
202
-
203
- /**@name Private member methods */
204
-
205
- //@{
206
-
207
- // Method generating the cuts after all CglRedSplit members are properly set.
208
- void generateCuts(OsiCuts & cs);
209
-
210
- /// Compute the fractional part of value, allowing for small error.
211
- inline double rs_above_integer(double value);
212
-
213
- /// Perform row r1 of pi := row r1 of pi - step * row r2 of pi.
214
- void update_pi_mat(int r1, int r2, int step);
215
-
216
- /// Perform row r1 of tab := row r1 of tab - step * row r2 of tab.
217
- void update_redTab(int r1, int r2, int step);
218
-
219
- /// Find optimal integer step for changing row r1 by adding to it a
220
- /// multiple of another row r2.
221
- void find_step(int r1, int r2, int *step,
222
- double *reduc, double *norm);
223
-
224
- /// Test if an ordered pair of rows yields a reduction. Perform the
225
- /// reduction if it is acceptable.
226
- int test_pair(int r1, int r2, double *norm);
227
-
228
- /// Reduce rows of contNonBasicTab.
229
- void reduce_contNonBasicTab();
230
-
231
- /// Generate a row of the current LP tableau.
232
- void generate_row(int index_row, double *row);
233
-
234
- /// Generate a mixed integer Chvatal-Gomory cut, when all non basic
235
- /// variables are non negative and at their lower bound.
236
- int generate_cgcut(double *row, double *rhs);
237
-
238
- /// Generate a mixed integer Chvatal-Gomory cut, when all non basic
239
- /// variables are non negative and at their lower bound (different formula)
240
- int generate_cgcut_2(int basic_ind, double *row, double *rhs);
241
-
242
- /// Use multiples of the initial inequalities to cancel out the coefficients
243
- /// of the slack variables.
244
- void eliminate_slacks(double *row,
245
- const double *elements,
246
- const int *start,
247
- const int *indices,
248
- const int *rowLength,
249
- const double *rhs, double *rowrhs);
250
-
251
- /// Change the sign of the coefficients of the continuous non basic
252
- /// variables at their upper bound.
253
- void flip(double *row);
254
-
255
- /// Change the sign of the coefficients of the continuous non basic
256
- /// variables at their upper bound and do the translations restoring
257
- /// the original bounds. Modify the right hand side
258
- /// accordingly.
259
- void unflip(double *row, double *rowrhs, double *slack_val);
260
-
261
- /// Return the scale factor for the row.
262
- /// Compute max_coeff: maximum absolute value of the coefficients.
263
- /// Compute min_coeff: minimum absolute value of the coefficients
264
- /// larger than EPS_COEFF.
265
- /// Return -1 if max_coeff < EPS_COEFF or if max_coeff/min_coeff > MAXDYN
266
- /// or MAXDYN_LUB (depending if the row has a non zero coeff. for a variable
267
- /// with large lower/upper bound) */.
268
- double row_scale_factor(double *row);
269
-
270
- /// Generate the packed cut from the row representation.
271
- int generate_packed_row(const double *xlp, double *row,
272
- int *rowind, double *rowelem,
273
- int *card_row, double & rhs);
274
-
275
- /// Check that the generated cuts do not cut a given optimal solution.
276
- void check_optsol(const int calling_place,
277
- const double *xlp, const double *slack_val,
278
- const int do_flip);
279
-
280
- /// Check that the generated cuts do not cut a given optimal solution.
281
- void check_optsol(const int calling_place,
282
- const double *xlp, const double *slack_val,
283
- const double *ck_row, const double ck_rhs,
284
- const int cut_number, const int do_flip);
285
-
286
- // Check that two vectors are different.
287
- bool rs_are_different_vectors(const int *vect1,
288
- const int *vect2,
289
- const int dim);
290
-
291
- // Check that two vectors are different.
292
- bool rs_are_different_vectors(const double *vect1,
293
- const double *vect2,
294
- const int dim);
295
-
296
- // Check that two matrices are different.
297
- bool rs_are_different_matrices(const CoinPackedMatrix *mat1,
298
- const CoinPackedMatrix *mat2,
299
- const int nmaj,
300
- const int nmin);
301
- //@}
302
-
303
-
304
- // Private member data
305
-
306
- /**@name Private member data */
307
-
308
- //@{
309
-
310
- /// Object with CglRedSplitParam members.
311
- CglRedSplitParam param;
312
-
313
- /// Number of rows ( = number of slack variables) in the current LP.
314
- int nrow;
315
-
316
- /// Number of structural variables in the current LP.
317
- int ncol;
318
-
319
- /// Lower bounds for structural variables
320
- const double *colLower;
321
-
322
- /// Upper bounds for structural variables
323
- const double *colUpper;
324
-
325
- /// Lower bounds for constraints
326
- const double *rowLower;
327
-
328
- /// Upper bounds for constraints
329
- const double *rowUpper;
330
-
331
- /// Righ hand side for constraints (upper bound for ranged constraints).
332
- const double *rowRhs;
333
-
334
- /// Number of integer basic structural variables that are fractional in the
335
- /// current lp solution (at least param.away_ from being integer).
336
- int card_intBasicVar_frac;
337
-
338
- /// Number of integer non basic structural variables in the
339
- /// current lp solution.
340
- int card_intNonBasicVar;
341
-
342
- /// Number of continuous non basic variables (structural or slack) in the
343
- /// current lp solution.
344
- int card_contNonBasicVar;
345
-
346
- /// Number of non basic variables (structural or slack) at their
347
- /// upper bound in the current lp solution.
348
- int card_nonBasicAtUpper;
349
-
350
- /// Number of non basic variables (structural or slack) at their
351
- /// lower bound in the current lp solution.
352
- int card_nonBasicAtLower;
353
-
354
- /// Characteristic vector for integer basic structural variables
355
- /// with non integer value in the current lp solution.
356
- int *cv_intBasicVar_frac;
357
-
358
- /// List of integer structural basic variables
359
- /// (in order of pivot in selected rows for cut generation).
360
- int *intBasicVar_frac;
361
-
362
- /// List of integer structural non basic variables.
363
- int *intNonBasicVar;
364
-
365
- /// List of continuous non basic variables (structural or slack).
366
- // slacks are considered continuous (no harm if this is not the case).
367
- int *contNonBasicVar;
368
-
369
- /// List of non basic variables (structural or slack) at their
370
- /// upper bound.
371
- int *nonBasicAtUpper;
372
-
373
- /// List of non basic variables (structural or slack) at their lower
374
- /// bound.
375
- int *nonBasicAtLower;
376
-
377
- /// Number of rows in the reduced tableau (= card_intBasicVar_frac).
378
- int mTab;
379
-
380
- /// Number of columns in the reduced tableau (= card_contNonBasicVar)
381
- int nTab;
382
-
383
- /// Tableau of multipliers used to alter the rows used in generation.
384
- /// Dimensions: mTab by mTab. Initially, pi_mat is the identity matrix.
385
- int **pi_mat;
386
-
387
- /// Current tableau for continuous non basic variables (structural or slack).
388
- /// Only rows used for generation.
389
- /// Dimensions: mTab by nTab.
390
- double **contNonBasicTab;
391
-
392
- /// Current tableau for integer non basic structural variables.
393
- /// Only rows used for generation.
394
- // Dimensions: mTab by card_intNonBasicVar.
395
- double **intNonBasicTab;
396
-
397
- /// Right hand side of the tableau.
398
- /// Only rows used for generation.
399
- double *rhsTab ;
400
-
401
- /// Given optimal solution that should not be cut; only for debug.
402
- const double *given_optsol;
403
-
404
- /// Number of entries in given_optsol.
405
- int card_given_optsol;
406
-
407
- /// Characteristic vectors of structural integer variables or continuous
408
- /// variables currently fixed to integer values.
409
- int *is_integer;
410
-
411
- /// Characteristic vector of the structural variables whose lower bound
412
- /// in absolute value is larger than LUB.
413
- int *low_is_lub;
414
-
415
- /// Characteristic vector of the structural variables whose upper bound
416
- /// in absolute value is larger than LUB.
417
- int *up_is_lub;
418
-
419
- /// Pointer on solver. Reset by each call to generateCuts().
420
- OsiSolverInterface *solver;
421
-
422
- /// Pointer on point to separate. Reset by each call to generateCuts().
423
- const double *xlp;
424
-
425
- /// Pointer on row activity. Reset by each call to generateCuts().
426
- const double *rowActivity;
427
-
428
- /// Pointer on column type. Reset by each call to generateCuts().
429
- const char *colType;
430
-
431
- /// Pointer on matrix of coefficient ordered by rows.
432
- /// Reset by each call to generateCuts().
433
- const CoinPackedMatrix *byRow;
434
-
435
- //@}
436
- };
437
-
438
- //#############################################################################
439
- /** A function that tests the methods in the CglRedSplit class. The
440
- only reason for it not to be a member method is that this way it doesn't
441
- have to be compiled into the library. And that's a gain, because the
442
- library should be compiled with optimization on, but this method should be
443
- compiled with debugging. */
444
- void CglRedSplitUnitTest(const OsiSolverInterface * siP,
445
- const std::string mpdDir );
446
-
447
-
448
- #endif
@@ -1,494 +0,0 @@
1
- // Last edit: 04/03/10
2
- //
3
- // Name: CglRedSplit2.hpp
4
- // Author: Giacomo Nannicini
5
- // Singapore University of Technology and Design
6
- // Singapore
7
- // email: nannicini@sutd.edu.sg
8
- // based on CglRedSplit by Francois Margot
9
- // Date: 03/09/09
10
- //-----------------------------------------------------------------------------
11
- // Copyright (C) 2010, Giacomo Nannicini and others. All Rights Reserved.
12
-
13
- #ifndef CglRedSplit2_H
14
- #define CglRedSplit2_H
15
-
16
- #include "CglCutGenerator.hpp"
17
- #include "CglRedSplit2Param.hpp"
18
- #include "CoinWarmStartBasis.hpp"
19
- #include "CoinHelperFunctions.hpp"
20
- #include "CoinTime.hpp"
21
-
22
- /** Reduce-and-Split Cut Generator Class; See method generateCuts().
23
- Based on the papers "Practical strategies for generating rank-1
24
- split cuts in mixed-integer linear programming" by G. Cornuejols
25
- and G. Nannicini, published on Mathematical Programming
26
- Computation, and "Combining Lift-and-Project and Reduce-and-Split"
27
- by E. Balas, G. Cornuejols, T. Kis and G. Nannicini, published on
28
- INFORMS Journal on Computing. Part of this code is based on
29
- CglRedSplit by F. Margot. */
30
-
31
- class CglRedSplit2 : public CglCutGenerator {
32
-
33
- friend void CglRedSplit2UnitTest(const OsiSolverInterface * siP,
34
- const std::string mpdDir);
35
- public:
36
- /**@name generateCuts */
37
- //@{
38
- /** Generate Reduce-and-Split Mixed Integer Gomory cuts
39
- for the model of the solver interface si.
40
-
41
- Insert the generated cuts into OsiCuts cs.
42
-
43
- This generator currently works only with the Lp solvers Clp or
44
- Cplex9.0 or higher. It requires access to the optimal tableau
45
- and optimal basis inverse and makes assumptions on the way slack
46
- variables are added by the solver. The Osi implementations for
47
- Clp and Cplex verify these assumptions.
48
-
49
- When calling the generator, the solver interface si must contain
50
- an optimized problem and information related to the optimal
51
- basis must be available through the OsiSolverInterface methods
52
- (si->optimalBasisIsAvailable() must return 'true'). It is also
53
- essential that the integrality of structural variable i can be
54
- obtained using si->isInteger(i).
55
-
56
- Reduce-and-Split cuts are a class of split cuts. We compute
57
- linear combinations of the rows of the simplex tableau, trying
58
- to reduce some of the coefficients on the nonbasic continuous
59
- columns. We have a large number of heuristics to choose which
60
- coefficients should be reduced, and by using which rows. The
61
- paper explains everything in detail.
62
-
63
- Note that this generator can potentially generate a huge number
64
- of cuts, depending on how it is parametered. Default parameters
65
- should be good for most situations; if you want to go heavy on
66
- split cuts, use more row selection strategies or a different
67
- number of rows in the linear combinations. Again, look at the
68
- paper for details. If you want to generate a small number of
69
- cuts, default parameters are not the best choice.
70
-
71
- A combination of Reduce-and-Split with Lift & Project is
72
- described in the paper "Combining Lift-and-Project and
73
- Reduce-and-Split". The Reduce-and-Split code for the
74
- implementation used in that paper is included here.
75
-
76
- This generator does not generate the same cuts as CglRedSplit,
77
- therefore both generators can be used in conjunction.
78
-
79
- */
80
-
81
- virtual void generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
82
- const CglTreeInfo info = CglTreeInfo());
83
-
84
- /// Return true if needs optimal basis to do cuts (will return true)
85
- virtual bool needsOptimalBasis() const;
86
-
87
- // Generate the row multipliers computed by Reduce-and-Split from the
88
- // given OsiSolverInterface. The multipliers are written in lambda;
89
- // lambda should be of size nrow*maxNumMultipliers. We generate at most
90
- // maxNumMultipliers m-vectors of row multipliers, and return the number
91
- // of m-vectors that were generated.
92
- // If the caller wants to know which variables are basic in each row
93
- // (same order as lambda), basicVariables should be non-NULL (size nrow).
94
- // This method can also generate the cuts corresponding to the multipliers
95
- // returned; it suffices to pass non-NULL OsiCuts.
96
- // This method is not needed by the typical user; however, it is useful
97
- // in the context of generating Lift & Project cuts.
98
- int generateMultipliers(const OsiSolverInterface& si, int* lambda,
99
- int maxNumMultipliers, int* basicVariables = NULL,
100
- OsiCuts* cs = NULL);
101
-
102
- // Try to improve a Lift & Project cut, by employing the
103
- // Reduce-and-Split procedure. We start from a row of a L&P tableau,
104
- // and generate a cut trying to reduce the coefficients on the
105
- // nonbasic variables. Note that this L&P tableau will in general
106
- // have nonbasic variables which are nonzero in the point that we
107
- // want to cut off, so we should be careful. Arguments:
108
- // OsiSolverInterface which contains the simplex tableau, initial
109
- // row from which the cut is derived, row rhs, row number of the
110
- // source row (if it is in the simplex tableau; otherwise, a
111
- // negative number; needed to avoid using duplicate rows), point
112
- // that we want to cut off (note: this is NOT a basic solution for
113
- // the OsiSolverInterace!), list of variables which are basic in
114
- // xbar but are nonbasic in the OsiSolverInterface. The computed cut
115
- // is written in OsiRowCut* cs. Finally, if a starting disjunction
116
- // is provided in the vector lambda (of size ncols, i.e. a
117
- // disjunction on the structural variables), the disjunction is
118
- // modified according to the cut which is produced.
119
- int tiltLandPcut(const OsiSolverInterface* si, double* row,
120
- double rowRhs, int rownumber, const double* xbar,
121
- const int* newnonbasics, OsiRowCut* cs, int* lambda = NULL);
122
-
123
- //@}
124
-
125
-
126
- /**@name Public Methods */
127
- //@{
128
-
129
- // Set the parameters to the values of the given CglRedSplit2Param object.
130
- void setParam(const CglRedSplit2Param &source);
131
- // Return the CglRedSplit2Param object of the generator.
132
- inline CglRedSplit2Param& getParam() {return param;}
133
-
134
- /// Print some of the data members; used for debugging
135
- void print() const;
136
-
137
- /// Print the current simplex tableau
138
- void printOptTab(OsiSolverInterface *solver) const;
139
-
140
- //@}
141
-
142
- /**@name Constructors and destructors */
143
- //@{
144
- /// Default constructor
145
- CglRedSplit2();
146
-
147
- /// Constructor with specified parameters
148
- CglRedSplit2(const CglRedSplit2Param &RS_param);
149
-
150
- /// Copy constructor
151
- CglRedSplit2(const CglRedSplit2 &);
152
-
153
- /// Clone
154
- virtual CglCutGenerator * clone() const;
155
-
156
- /// Assignment operator
157
- CglRedSplit2 & operator=(const CglRedSplit2& rhs);
158
-
159
- /// Destructor
160
- virtual ~CglRedSplit2 ();
161
-
162
- //@}
163
-
164
- private:
165
-
166
- // Private member methods
167
-
168
- /**@name Private member methods */
169
-
170
- //@{
171
-
172
- // Method generating the cuts after all CglRedSplit2 members are
173
- // properly set. This does the actual work. Returns the number of
174
- // generated cuts (or multipliers).
175
- // Will generate cuts if cs != NULL, and will generate multipliers
176
- // if lambda != NULL.
177
- int generateCuts(OsiCuts* cs, int maxNumCuts, int* lambda = NULL);
178
-
179
- /// Compute the fractional part of value, allowing for small error.
180
- inline double rs_above_integer(const double value) const;
181
-
182
- /// Fill workNonBasicTab, depending on the column selection strategy.
183
- /// Accepts a list of variables indices that should be ignored; by
184
- /// default, this list is empty (it is only used by Lift & Project).
185
- /// The list ignore_list contains -1 as the last element.
186
- /// Note that the implementation of the ignore_list is not very efficient
187
- /// if the list is long, so it should be used only if its short.
188
- void fill_workNonBasicTab(CglRedSplit2Param::ColumnSelectionStrategy
189
- strategy, const int* ignore_list = NULL);
190
-
191
- /// Fill workNonBasicTab, alternate version for Lift & Project: also
192
- /// reduces columns which are now nonbasic but are basic in xbar.
193
- /// This function should be called only when CglRedSplit2 is used in
194
- /// conjunction with CglLandP to generate L&P+RS cuts.
195
- void fill_workNonBasicTab(const int* newnonbasics, const double* xbar,
196
- CglRedSplit2Param::ColumnScalingStrategy scaling);
197
-
198
- /// Reduce rows of workNonBasicTab, i.e. compute integral linear
199
- /// combinations of the rows in order to reduce row coefficients on
200
- /// workNonBasicTab
201
- void reduce_workNonBasicTab(int numRows,
202
- CglRedSplit2Param::RowSelectionStrategy
203
- rowSelectionStrategy,
204
- int maxIterations);
205
-
206
- /// Generate a linear combination of the rows of the current LP
207
- /// tableau, using the row multipliers stored in the matrix pi_mat
208
- /// on the row of index index_row
209
- void generate_row(int index_row, double *row);
210
-
211
- /// Generate a mixed integer Gomory cut, when all non basic
212
- /// variables are non negative and at their lower bound.
213
- int generate_cgcut(double *row, double *rhs);
214
-
215
- /// Use multiples of the initial inequalities to cancel out the coefficients
216
- /// of the slack variables.
217
- void eliminate_slacks(double *row,
218
- const double *elements,
219
- const int *start,
220
- const int *indices,
221
- const int *rowLength,
222
- const double *rhs, double *rowrhs);
223
-
224
- /// Change the sign of the coefficients of the continuous non basic
225
- /// variables at their upper bound.
226
- void flip(double *row);
227
-
228
- /// Change the sign of the coefficients of the continuous non basic
229
- /// variables at their upper bound and do the translations restoring
230
- /// the original bounds. Modify the right hand side
231
- /// accordingly.
232
- void unflip(double *row, double *rowrhs);
233
-
234
- /// Returns 1 if the row has acceptable max/min coeff ratio.
235
- /// Compute max_coeff: maximum absolute value of the coefficients.
236
- /// Compute min_coeff: minimum absolute value of the coefficients
237
- /// larger than EPS_COEFF.
238
- /// Return 0 if max_coeff/min_coeff > MAXDYN.
239
- int check_dynamism(double *row);
240
-
241
- /// Generate the packed cut from the row representation.
242
- int generate_packed_row(const double *xlp, double *row,
243
- int *rowind, double *rowelem,
244
- int *card_row, double & rhs);
245
-
246
- // Compute entries of is_integer.
247
- void compute_is_integer();
248
-
249
- // Check that two vectors are different.
250
- bool rs_are_different_vectors(const int *vect1,
251
- const int *vect2,
252
- const int dim);
253
-
254
- // allocate matrix of integers
255
- void rs_allocmatINT(int ***v, int m, int n);
256
- // deallocate matrix of integers
257
- void rs_deallocmatINT(int ***v, int m);
258
- // allocate matrix of doubles
259
- void rs_allocmatDBL(double ***v, int m, int n);
260
- // deallocate matrix of doubles
261
- void rs_deallocmatDBL(double ***v, int m);
262
- // print a vector of integers
263
- void rs_printvecINT(const char *vecstr, const int *x, int n) const;
264
- // print a vector of doubles
265
- void rs_printvecDBL(const char *vecstr, const double *x, int n) const;
266
- // print a matrix of integers
267
- void rs_printmatINT(const char *vecstr, const int * const *x, int m, int n) const;
268
- // print a matrix of doubles
269
- void rs_printmatDBL(const char *vecstr, const double * const *x, int m, int n) const;
270
- // dot product
271
- double rs_dotProd(const double *u, const double *v, int dim) const;
272
- double rs_dotProd(const int *u, const double *v, int dim) const;
273
- // From Numerical Recipes in C: LU decomposition
274
- int ludcmp(double **a, int n, int *indx, double *d, double* vv) const;
275
- // from Numerical Recipes in C: backward substitution
276
- void lubksb(double **a, int n, int *indx, double *b) const;
277
-
278
- // Check if the linear combination given by listOfRows with given multipliers
279
- // improves the norm of row #rowindex; note: multipliers are rounded!
280
- // Returns the difference with respect to the old norm (if negative there is
281
- // an improvement, if positive norm increases)
282
- double compute_norm_change(double oldnorm, const int* listOfRows,
283
- int numElemList, const double* multipliers) const;
284
-
285
- // Compute the list of rows that should be used to reduce row #rowIndex
286
- int get_list_rows_reduction(int rowIndex, int numRowsReduction,
287
- int* list, const double* norm,
288
- CglRedSplit2Param::RowSelectionStrategy
289
- rowSelectionStrategy) const;
290
-
291
- // Sorts the rows by increasing number of nonzeroes with respect to a given
292
- // row (rowIndex), on the nonbasic variables (whichTab == 0 means only
293
- // integer, whichTab == 1 means only workTab, whichTab == 2 means both).
294
- // The array for sorting must be allocated (and deleted) by caller.
295
- // Corresponds to BRS1 in the paper.
296
- int sort_rows_by_nonzeroes(struct sortElement* array, int rowIndex,
297
- int maxRows, int whichTab) const;
298
-
299
- // Greedy variant of the previous function; slower but typically
300
- // more effective. Corresponds to BRS2 in the paper.
301
- int sort_rows_by_nonzeroes_greedy(struct sortElement* array, int rowIndex,
302
- int maxRows, int whichTab) const;
303
-
304
- // Sorts the rows by decreasing absolute value of the cosine of the
305
- // angle with respect to a given row (rowIndex), on the nonbasic
306
- // variables (whichTab == 0 means only integer, whichTab == 1 means
307
- // only workTab, whichTab == 2 means both). The array for sorting
308
- // must be allocated (and deleted) by caller. Very effective
309
- // strategy in practice. Corresponds to BRS3 in the paper.
310
- int sort_rows_by_cosine(struct sortElement* array, int rowIndex,
311
- int maxRows, int whichTab) const;
312
-
313
- // Did we hit the time limit?
314
- inline bool checkTime() const{
315
- if ((CoinCpuTime() - startTime) < param.getTimeLimit()){
316
- return true;
317
- }
318
- return false;
319
- }
320
-
321
- //@}
322
-
323
-
324
- // Private member data
325
-
326
- /**@name Private member data */
327
-
328
- //@{
329
-
330
- /// Object with CglRedSplit2Param members.
331
- CglRedSplit2Param param;
332
-
333
- /// Number of rows ( = number of slack variables) in the current LP.
334
- int nrow;
335
-
336
- /// Number of structural variables in the current LP.
337
- int ncol;
338
-
339
- /// Number of rows which have been reduced
340
- int numRedRows;
341
-
342
- /// Lower bounds for structural variables
343
- const double *colLower;
344
-
345
- /// Upper bounds for structural variables
346
- const double *colUpper;
347
-
348
- /// Lower bounds for constraints
349
- const double *rowLower;
350
-
351
- /// Upper bounds for constraints
352
- const double *rowUpper;
353
-
354
- /// Righ hand side for constraints (upper bound for ranged constraints).
355
- const double *rowRhs;
356
-
357
- /// Reduced costs for columns
358
- const double *reducedCost;
359
-
360
- /// Row price
361
- const double *rowPrice;
362
-
363
- /// Objective coefficients
364
- const double* objective;
365
-
366
- /// Number of integer basic structural variables
367
- int card_intBasicVar;
368
-
369
- /// Number of integer basic structural variables that are fractional in the
370
- /// current lp solution (at least param.away_ from being integer).
371
- int card_intBasicVar_frac;
372
-
373
- /// Number of integer non basic structural variables in the
374
- /// current lp solution.
375
- int card_intNonBasicVar;
376
-
377
- /// Number of continuous non basic variables (structural or slack) in the
378
- /// current lp solution.
379
- int card_contNonBasicVar;
380
-
381
- /// Number of continuous non basic variables (structural or slack) in the
382
- /// current working set for coefficient reduction
383
- int card_workNonBasicVar;
384
-
385
- /// Number of non basic variables (structural or slack) at their
386
- /// upper bound in the current lp solution.
387
- int card_nonBasicAtUpper;
388
-
389
- /// Number of non basic variables (structural or slack) at their
390
- /// lower bound in the current lp solution.
391
- int card_nonBasicAtLower;
392
-
393
- /// Characteristic vector for integer basic structural variables
394
- int *cv_intBasicVar;
395
-
396
- /// Characteristic vector for integer basic structural variables
397
- /// with non integer value in the current lp solution.
398
- int *cv_intBasicVar_frac;
399
-
400
- /// Characteristic vector for rows of the tableau selected for reduction
401
- /// with non integer value in the current lp solution
402
- int *cv_fracRowsTab;
403
-
404
- /// List of integer structural basic variables
405
- /// (in order of pivot in selected rows for cut generation).
406
- int *intBasicVar;
407
-
408
- /// List of integer structural basic variables with fractional value
409
- /// (in order of pivot in selected rows for cut generation).
410
- int *intBasicVar_frac;
411
-
412
- /// List of integer structural non basic variables.
413
- int *intNonBasicVar;
414
-
415
- /// List of continuous non basic variables (structural or slack).
416
- // slacks are considered continuous (no harm if this is not the case).
417
- int *contNonBasicVar;
418
-
419
- /// List of non basic variables (structural or slack) at their
420
- /// upper bound.
421
- int *nonBasicAtUpper;
422
-
423
- /// List of non basic variables (structural or slack) at their lower
424
- /// bound.
425
- int *nonBasicAtLower;
426
-
427
- /// Number of rows in the reduced tableau (= card_intBasicVar).
428
- int mTab;
429
-
430
- /// Number of columns in the reduced tableau (= card_contNonBasicVar)
431
- int nTab;
432
-
433
- /// Tableau of multipliers used to alter the rows used in generation.
434
- /// Dimensions: mTab by mTab. Initially, pi_mat is the identity matrix.
435
- int **pi_mat;
436
-
437
- /// Simplex tableau for continuous non basic variables (structural or slack).
438
- /// Only rows used for generation.
439
- /// Dimensions: mTab by card_contNonBasicVar.
440
- double **contNonBasicTab;
441
-
442
- /// Current tableau for continuous non basic variables (structural or slack).
443
- /// Only columns used for coefficient reduction.
444
- /// Dimensions: mTab by card_workNonBasicVar.
445
- double **workNonBasicTab;
446
-
447
- /// Simplex tableau for integer non basic structural variables.
448
- /// Only rows used for generation.
449
- // Dimensions: mTab by card_intNonBasicVar.
450
- double **intNonBasicTab;
451
-
452
- /// Right hand side of the tableau.
453
- /// Only rows used for generation.
454
- double *rhsTab;
455
-
456
- /// Norm of rows in workNonBasicTab; needed for faster computations
457
- double *norm;
458
-
459
- /// Characteristic vectors of structural integer variables or continuous
460
- /// variables currently fixed to integer values.
461
- int *is_integer;
462
-
463
- /// Pointer on solver. Reset by each call to generateCuts().
464
- OsiSolverInterface *solver;
465
-
466
- /// Pointer on point to separate. Reset by each call to generateCuts().
467
- const double *xlp;
468
-
469
- /// Pointer on row activity. Reset by each call to generateCuts().
470
- const double *rowActivity;
471
-
472
- /// Pointer on matrix of coefficient ordered by rows.
473
- /// Reset by each call to generateCuts().
474
- const CoinPackedMatrix *byRow;
475
-
476
- /// Time at which cut computations began.
477
- /// Reset by each call to generateCuts().
478
- double startTime;
479
-
480
- //@}
481
- };
482
-
483
- //#############################################################################
484
- /** A function that tests some of the methods in the CglRedSplit2
485
- class. The only reason for it not to be a member method is that
486
- this way it doesn't have to be compiled into the library. And
487
- that's a gain, because the library should be compiled with
488
- optimization on, but this method should be compiled with
489
- debugging. */
490
- void CglRedSplit2UnitTest(const OsiSolverInterface * siP,
491
- const std::string mpdDir );
492
-
493
-
494
- #endif