ruby-cbc 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/README.md +203 -0
- data/Rakefile +40 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/ext/ruby-cbc/cbc.i +15 -0
- data/ext/ruby-cbc/cbc_wrap.c +4618 -0
- data/ext/ruby-cbc/extconf.rb +60 -0
- data/ext/ruby-cbc/install/bin/cbc +0 -0
- data/ext/ruby-cbc/install/bin/clp +0 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchActual.hpp +24 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchAllDifferent.hpp +62 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchBase.hpp +78 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchCut.hpp +183 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchDecision.hpp +129 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchDefaultDecision.hpp +100 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchDynamic.hpp +206 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchLotsize.hpp +242 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchToFixLots.hpp +94 -0
- data/ext/ruby-cbc/install/include/coin/CbcBranchingObject.hpp +236 -0
- data/ext/ruby-cbc/install/include/coin/CbcClique.hpp +303 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompare.hpp +39 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareActual.hpp +14 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareBase.hpp +142 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareDefault.hpp +120 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareDepth.hpp +47 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareEstimate.hpp +48 -0
- data/ext/ruby-cbc/install/include/coin/CbcCompareObjective.hpp +49 -0
- data/ext/ruby-cbc/install/include/coin/CbcConfig.h +14 -0
- data/ext/ruby-cbc/install/include/coin/CbcConsequence.hpp +49 -0
- data/ext/ruby-cbc/install/include/coin/CbcCountRowCut.hpp +168 -0
- data/ext/ruby-cbc/install/include/coin/CbcCutGenerator.hpp +482 -0
- data/ext/ruby-cbc/install/include/coin/CbcCutModifier.hpp +57 -0
- data/ext/ruby-cbc/install/include/coin/CbcCutSubsetModifier.hpp +66 -0
- data/ext/ruby-cbc/install/include/coin/CbcDummyBranchingObject.hpp +83 -0
- data/ext/ruby-cbc/install/include/coin/CbcEventHandler.hpp +245 -0
- data/ext/ruby-cbc/install/include/coin/CbcFathom.hpp +137 -0
- data/ext/ruby-cbc/install/include/coin/CbcFathomDynamicProgramming.hpp +169 -0
- data/ext/ruby-cbc/install/include/coin/CbcFeasibilityBase.hpp +56 -0
- data/ext/ruby-cbc/install/include/coin/CbcFixVariable.hpp +67 -0
- data/ext/ruby-cbc/install/include/coin/CbcFollowOn.hpp +207 -0
- data/ext/ruby-cbc/install/include/coin/CbcFullNodeInfo.hpp +161 -0
- data/ext/ruby-cbc/install/include/coin/CbcGeneral.hpp +60 -0
- data/ext/ruby-cbc/install/include/coin/CbcGeneralDepth.hpp +279 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristic.hpp +682 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDINS.hpp +96 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDW.hpp +309 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDive.hpp +192 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveCoefficient.hpp +52 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveFractional.hpp +52 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveGuided.hpp +55 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveLineSearch.hpp +52 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDivePseudoCost.hpp +60 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveVectorLength.hpp +52 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicFPump.hpp +340 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicGreedy.hpp +280 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicLocal.hpp +271 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicPivotAndFix.hpp +58 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicRENS.hpp +77 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicRINS.hpp +102 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicRandRound.hpp +58 -0
- data/ext/ruby-cbc/install/include/coin/CbcHeuristicVND.hpp +94 -0
- data/ext/ruby-cbc/install/include/coin/CbcLinked.hpp +1406 -0
- data/ext/ruby-cbc/install/include/coin/CbcMessage.hpp +94 -0
- data/ext/ruby-cbc/install/include/coin/CbcMipStartIO.hpp +26 -0
- data/ext/ruby-cbc/install/include/coin/CbcModel.hpp +2952 -0
- data/ext/ruby-cbc/install/include/coin/CbcNWay.hpp +166 -0
- data/ext/ruby-cbc/install/include/coin/CbcNode.hpp +351 -0
- data/ext/ruby-cbc/install/include/coin/CbcNodeInfo.hpp +349 -0
- data/ext/ruby-cbc/install/include/coin/CbcObject.hpp +272 -0
- data/ext/ruby-cbc/install/include/coin/CbcObjectUpdateData.hpp +64 -0
- data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.cpp +4134 -0
- data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.hpp +532 -0
- data/ext/ruby-cbc/install/include/coin/CbcParam.hpp +324 -0
- data/ext/ruby-cbc/install/include/coin/CbcPartialNodeInfo.hpp +110 -0
- data/ext/ruby-cbc/install/include/coin/CbcSOS.hpp +279 -0
- data/ext/ruby-cbc/install/include/coin/CbcSimpleInteger.hpp +286 -0
- data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +564 -0
- data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerPseudoCost.hpp +114 -0
- data/ext/ruby-cbc/install/include/coin/CbcSolver.hpp +447 -0
- data/ext/ruby-cbc/install/include/coin/CbcStrategy.hpp +258 -0
- data/ext/ruby-cbc/install/include/coin/CbcSubProblem.hpp +83 -0
- data/ext/ruby-cbc/install/include/coin/CbcTree.hpp +490 -0
- data/ext/ruby-cbc/install/include/coin/CbcTreeLocal.hpp +372 -0
- data/ext/ruby-cbc/install/include/coin/Cbc_C_Interface.h +381 -0
- data/ext/ruby-cbc/install/include/coin/Cgl012cut.hpp +464 -0
- data/ext/ruby-cbc/install/include/coin/CglAllDifferent.hpp +115 -0
- data/ext/ruby-cbc/install/include/coin/CglClique.hpp +308 -0
- data/ext/ruby-cbc/install/include/coin/CglConfig.h +19 -0
- data/ext/ruby-cbc/install/include/coin/CglCutGenerator.hpp +121 -0
- data/ext/ruby-cbc/install/include/coin/CglDuplicateRow.hpp +189 -0
- data/ext/ruby-cbc/install/include/coin/CglFlowCover.hpp +371 -0
- data/ext/ruby-cbc/install/include/coin/CglGMI.hpp +364 -0
- data/ext/ruby-cbc/install/include/coin/CglGMIParam.hpp +313 -0
- data/ext/ruby-cbc/install/include/coin/CglGomory.hpp +204 -0
- data/ext/ruby-cbc/install/include/coin/CglKnapsackCover.hpp +310 -0
- data/ext/ruby-cbc/install/include/coin/CglLandP.hpp +306 -0
- data/ext/ruby-cbc/install/include/coin/CglLandPValidator.hpp +130 -0
- data/ext/ruby-cbc/install/include/coin/CglLiftAndProject.hpp +104 -0
- data/ext/ruby-cbc/install/include/coin/CglMessage.hpp +50 -0
- data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding.hpp +429 -0
- data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding2.hpp +427 -0
- data/ext/ruby-cbc/install/include/coin/CglOddHole.hpp +160 -0
- data/ext/ruby-cbc/install/include/coin/CglParam.hpp +93 -0
- data/ext/ruby-cbc/install/include/coin/CglPreProcess.hpp +492 -0
- data/ext/ruby-cbc/install/include/coin/CglProbing.hpp +543 -0
- data/ext/ruby-cbc/install/include/coin/CglRedSplit.hpp +448 -0
- data/ext/ruby-cbc/install/include/coin/CglRedSplit2.hpp +494 -0
- data/ext/ruby-cbc/install/include/coin/CglRedSplit2Param.hpp +495 -0
- data/ext/ruby-cbc/install/include/coin/CglRedSplitParam.hpp +272 -0
- data/ext/ruby-cbc/install/include/coin/CglResidualCapacity.hpp +240 -0
- data/ext/ruby-cbc/install/include/coin/CglSimpleRounding.hpp +174 -0
- data/ext/ruby-cbc/install/include/coin/CglStored.hpp +125 -0
- data/ext/ruby-cbc/install/include/coin/CglTreeInfo.hpp +180 -0
- data/ext/ruby-cbc/install/include/coin/CglTwomir.hpp +565 -0
- data/ext/ruby-cbc/install/include/coin/CglZeroHalf.hpp +133 -0
- data/ext/ruby-cbc/install/include/coin/ClpAmplObjective.hpp +113 -0
- data/ext/ruby-cbc/install/include/coin/ClpCholeskyBase.hpp +294 -0
- data/ext/ruby-cbc/install/include/coin/ClpCholeskyDense.hpp +162 -0
- data/ext/ruby-cbc/install/include/coin/ClpConfig.h +17 -0
- data/ext/ruby-cbc/install/include/coin/ClpConstraint.hpp +125 -0
- data/ext/ruby-cbc/install/include/coin/ClpConstraintAmpl.hpp +108 -0
- data/ext/ruby-cbc/install/include/coin/ClpConstraintLinear.hpp +110 -0
- data/ext/ruby-cbc/install/include/coin/ClpConstraintQuadratic.hpp +119 -0
- data/ext/ruby-cbc/install/include/coin/ClpDualRowDantzig.hpp +71 -0
- data/ext/ruby-cbc/install/include/coin/ClpDualRowPivot.hpp +129 -0
- data/ext/ruby-cbc/install/include/coin/ClpDualRowSteepest.hpp +153 -0
- data/ext/ruby-cbc/install/include/coin/ClpDummyMatrix.hpp +183 -0
- data/ext/ruby-cbc/install/include/coin/ClpDynamicExampleMatrix.hpp +186 -0
- data/ext/ruby-cbc/install/include/coin/ClpDynamicMatrix.hpp +381 -0
- data/ext/ruby-cbc/install/include/coin/ClpEventHandler.hpp +187 -0
- data/ext/ruby-cbc/install/include/coin/ClpFactorization.hpp +432 -0
- data/ext/ruby-cbc/install/include/coin/ClpGubDynamicMatrix.hpp +247 -0
- data/ext/ruby-cbc/install/include/coin/ClpGubMatrix.hpp +358 -0
- data/ext/ruby-cbc/install/include/coin/ClpInterior.hpp +570 -0
- data/ext/ruby-cbc/install/include/coin/ClpLinearObjective.hpp +103 -0
- data/ext/ruby-cbc/install/include/coin/ClpMatrixBase.hpp +524 -0
- data/ext/ruby-cbc/install/include/coin/ClpMessage.hpp +131 -0
- data/ext/ruby-cbc/install/include/coin/ClpModel.hpp +1307 -0
- data/ext/ruby-cbc/install/include/coin/ClpNetworkMatrix.hpp +229 -0
- data/ext/ruby-cbc/install/include/coin/ClpNode.hpp +349 -0
- data/ext/ruby-cbc/install/include/coin/ClpNonLinearCost.hpp +401 -0
- data/ext/ruby-cbc/install/include/coin/ClpObjective.hpp +134 -0
- data/ext/ruby-cbc/install/include/coin/ClpPackedMatrix.hpp +638 -0
- data/ext/ruby-cbc/install/include/coin/ClpParameters.hpp +126 -0
- data/ext/ruby-cbc/install/include/coin/ClpPdcoBase.hpp +103 -0
- data/ext/ruby-cbc/install/include/coin/ClpPlusMinusOneMatrix.hpp +290 -0
- data/ext/ruby-cbc/install/include/coin/ClpPresolve.hpp +299 -0
- data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnDantzig.hpp +72 -0
- data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnPivot.hpp +155 -0
- data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnSteepest.hpp +247 -0
- data/ext/ruby-cbc/install/include/coin/ClpQuadraticObjective.hpp +155 -0
- data/ext/ruby-cbc/install/include/coin/ClpSimplex.hpp +1797 -0
- data/ext/ruby-cbc/install/include/coin/ClpSimplexDual.hpp +300 -0
- data/ext/ruby-cbc/install/include/coin/ClpSimplexNonlinear.hpp +117 -0
- data/ext/ruby-cbc/install/include/coin/ClpSimplexOther.hpp +277 -0
- data/ext/ruby-cbc/install/include/coin/ClpSimplexPrimal.hpp +244 -0
- data/ext/ruby-cbc/install/include/coin/ClpSolve.hpp +446 -0
- data/ext/ruby-cbc/install/include/coin/Clp_C_Interface.h +525 -0
- data/ext/ruby-cbc/install/include/coin/CoinAlloc.hpp +176 -0
- data/ext/ruby-cbc/install/include/coin/CoinBuild.hpp +149 -0
- data/ext/ruby-cbc/install/include/coin/CoinDenseFactorization.hpp +419 -0
- data/ext/ruby-cbc/install/include/coin/CoinDenseVector.hpp +383 -0
- data/ext/ruby-cbc/install/include/coin/CoinDistance.hpp +48 -0
- data/ext/ruby-cbc/install/include/coin/CoinError.hpp +257 -0
- data/ext/ruby-cbc/install/include/coin/CoinFactorization.hpp +2044 -0
- data/ext/ruby-cbc/install/include/coin/CoinFileIO.hpp +166 -0
- data/ext/ruby-cbc/install/include/coin/CoinFinite.hpp +34 -0
- data/ext/ruby-cbc/install/include/coin/CoinFloatEqual.hpp +177 -0
- data/ext/ruby-cbc/install/include/coin/CoinHelperFunctions.hpp +1111 -0
- data/ext/ruby-cbc/install/include/coin/CoinIndexedVector.hpp +1164 -0
- data/ext/ruby-cbc/install/include/coin/CoinLpIO.hpp +805 -0
- data/ext/ruby-cbc/install/include/coin/CoinMessage.hpp +96 -0
- data/ext/ruby-cbc/install/include/coin/CoinMessageHandler.hpp +666 -0
- data/ext/ruby-cbc/install/include/coin/CoinModel.hpp +1054 -0
- data/ext/ruby-cbc/install/include/coin/CoinModelUseful.hpp +441 -0
- data/ext/ruby-cbc/install/include/coin/CoinMpsIO.hpp +1056 -0
- data/ext/ruby-cbc/install/include/coin/CoinOslFactorization.hpp +280 -0
- data/ext/ruby-cbc/install/include/coin/CoinPackedMatrix.hpp +947 -0
- data/ext/ruby-cbc/install/include/coin/CoinPackedVector.hpp +657 -0
- data/ext/ruby-cbc/install/include/coin/CoinPackedVectorBase.hpp +269 -0
- data/ext/ruby-cbc/install/include/coin/CoinParam.hpp +644 -0
- data/ext/ruby-cbc/install/include/coin/CoinPragma.hpp +26 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveDoubleton.hpp +73 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveDual.hpp +85 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveDupcol.hpp +226 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveEmpty.hpp +116 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveFixed.hpp +181 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveForcing.hpp +61 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveImpliedFree.hpp +60 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveIsolated.hpp +51 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveMatrix.hpp +1842 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveMonitor.hpp +105 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolvePsdebug.hpp +166 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveSingleton.hpp +112 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveSubst.hpp +101 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveTighten.hpp +55 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveTripleton.hpp +66 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveUseless.hpp +63 -0
- data/ext/ruby-cbc/install/include/coin/CoinPresolveZeros.hpp +60 -0
- data/ext/ruby-cbc/install/include/coin/CoinRational.hpp +44 -0
- data/ext/ruby-cbc/install/include/coin/CoinSearchTree.hpp +465 -0
- data/ext/ruby-cbc/install/include/coin/CoinShallowPackedVector.hpp +148 -0
- data/ext/ruby-cbc/install/include/coin/CoinSignal.hpp +117 -0
- data/ext/ruby-cbc/install/include/coin/CoinSimpFactorization.hpp +431 -0
- data/ext/ruby-cbc/install/include/coin/CoinSmartPtr.hpp +528 -0
- data/ext/ruby-cbc/install/include/coin/CoinSnapshot.hpp +476 -0
- data/ext/ruby-cbc/install/include/coin/CoinSort.hpp +678 -0
- data/ext/ruby-cbc/install/include/coin/CoinStructuredModel.hpp +247 -0
- data/ext/ruby-cbc/install/include/coin/CoinTime.hpp +310 -0
- data/ext/ruby-cbc/install/include/coin/CoinTypes.hpp +64 -0
- data/ext/ruby-cbc/install/include/coin/CoinUtility.hpp +19 -0
- data/ext/ruby-cbc/install/include/coin/CoinUtilsConfig.h +34 -0
- data/ext/ruby-cbc/install/include/coin/CoinWarmStart.hpp +58 -0
- data/ext/ruby-cbc/install/include/coin/CoinWarmStartBasis.hpp +456 -0
- data/ext/ruby-cbc/install/include/coin/CoinWarmStartDual.hpp +166 -0
- data/ext/ruby-cbc/install/include/coin/CoinWarmStartPrimalDual.hpp +211 -0
- data/ext/ruby-cbc/install/include/coin/CoinWarmStartVector.hpp +488 -0
- data/ext/ruby-cbc/install/include/coin/Coin_C_defines.h +115 -0
- data/ext/ruby-cbc/install/include/coin/Idiot.hpp +298 -0
- data/ext/ruby-cbc/install/include/coin/OsiAuxInfo.hpp +206 -0
- data/ext/ruby-cbc/install/include/coin/OsiBranchingObject.hpp +1005 -0
- data/ext/ruby-cbc/install/include/coin/OsiCbcSolverInterface.hpp +764 -0
- data/ext/ruby-cbc/install/include/coin/OsiChooseVariable.hpp +534 -0
- data/ext/ruby-cbc/install/include/coin/OsiClpSolverInterface.hpp +1509 -0
- data/ext/ruby-cbc/install/include/coin/OsiColCut.hpp +324 -0
- data/ext/ruby-cbc/install/include/coin/OsiCollections.hpp +35 -0
- data/ext/ruby-cbc/install/include/coin/OsiConfig.h +19 -0
- data/ext/ruby-cbc/install/include/coin/OsiCut.hpp +245 -0
- data/ext/ruby-cbc/install/include/coin/OsiCuts.hpp +474 -0
- data/ext/ruby-cbc/install/include/coin/OsiPresolve.hpp +252 -0
- data/ext/ruby-cbc/install/include/coin/OsiRowCut.hpp +331 -0
- data/ext/ruby-cbc/install/include/coin/OsiRowCutDebugger.hpp +187 -0
- data/ext/ruby-cbc/install/include/coin/OsiSolverBranch.hpp +152 -0
- data/ext/ruby-cbc/install/include/coin/OsiSolverInterface.hpp +2143 -0
- data/ext/ruby-cbc/install/include/coin/OsiSolverParameters.hpp +142 -0
- data/ext/ruby-cbc/install/include/coin/OsiUnitTests.hpp +374 -0
- data/ext/ruby-cbc/install/lib/libCbc.la +35 -0
- data/ext/ruby-cbc/install/lib/libCbc.so +0 -0
- data/ext/ruby-cbc/install/lib/libCbc.so.3 +0 -0
- data/ext/ruby-cbc/install/lib/libCbc.so.3.9.7 +0 -0
- data/ext/ruby-cbc/install/lib/libCbcSolver.la +35 -0
- data/ext/ruby-cbc/install/lib/libCbcSolver.so +0 -0
- data/ext/ruby-cbc/install/lib/libCbcSolver.so.3 +0 -0
- data/ext/ruby-cbc/install/lib/libCbcSolver.so.3.9.7 +0 -0
- data/ext/ruby-cbc/install/lib/libCgl.la +35 -0
- data/ext/ruby-cbc/install/lib/libCgl.so +0 -0
- data/ext/ruby-cbc/install/lib/libCgl.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libCgl.so.1.9.7 +0 -0
- data/ext/ruby-cbc/install/lib/libClp.la +35 -0
- data/ext/ruby-cbc/install/lib/libClp.so +0 -0
- data/ext/ruby-cbc/install/lib/libClp.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libClp.so.1.13.9 +0 -0
- data/ext/ruby-cbc/install/lib/libClpSolver.la +35 -0
- data/ext/ruby-cbc/install/lib/libClpSolver.so +0 -0
- data/ext/ruby-cbc/install/lib/libClpSolver.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libClpSolver.so.1.13.9 +0 -0
- data/ext/ruby-cbc/install/lib/libCoinUtils.la +35 -0
- data/ext/ruby-cbc/install/lib/libCoinUtils.so +0 -0
- data/ext/ruby-cbc/install/lib/libCoinUtils.so.3 +0 -0
- data/ext/ruby-cbc/install/lib/libCoinUtils.so.3.10.11 +0 -0
- data/ext/ruby-cbc/install/lib/libOsi.la +35 -0
- data/ext/ruby-cbc/install/lib/libOsi.so +0 -0
- data/ext/ruby-cbc/install/lib/libOsi.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libOsi.so.1.12.6 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCbc.la +35 -0
- data/ext/ruby-cbc/install/lib/libOsiCbc.so +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCbc.so.3 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCbc.so.3.9.7 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiClp.la +35 -0
- data/ext/ruby-cbc/install/lib/libOsiClp.so +0 -0
- data/ext/ruby-cbc/install/lib/libOsiClp.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiClp.so.1.13.9 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCommonTests.la +35 -0
- data/ext/ruby-cbc/install/lib/libOsiCommonTests.so +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1 +0 -0
- data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1.12.6 +0 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/cbc.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/cgl.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/clp.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/coindatamiplib3.pc +9 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/coindatasample.pc +9 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/coinutils.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/osi-cbc.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/osi-clp.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/osi-unittests.pc +12 -0
- data/ext/ruby-cbc/install/lib/pkgconfig/osi.pc +12 -0
- data/lib/ruby-cbc/ilp/constant.rb +44 -0
- data/lib/ruby-cbc/ilp/constraint.rb +32 -0
- data/lib/ruby-cbc/ilp/objective.rb +26 -0
- data/lib/ruby-cbc/ilp/term.rb +47 -0
- data/lib/ruby-cbc/ilp/term_array.rb +80 -0
- data/lib/ruby-cbc/ilp/var.rb +62 -0
- data/lib/ruby-cbc/model.rb +125 -0
- data/lib/ruby-cbc/problem.rb +170 -0
- data/lib/ruby-cbc/version.rb +3 -0
- data/lib/ruby-cbc.rb +21 -0
- data/ruby-cbc.gemspec +36 -0
- metadata +431 -0
@@ -0,0 +1,245 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (C) 2006, International Business Machines Corporation and others.
|
3
|
+
All Rights Reserved.
|
4
|
+
|
5
|
+
This code is licensed under the terms of the Eclipse Public License (EPL).
|
6
|
+
|
7
|
+
$Id: CbcEventHandler.hpp 1987 2013-11-29 17:27:29Z forrest $
|
8
|
+
*/
|
9
|
+
|
10
|
+
#ifndef CbcEventHandler_H
|
11
|
+
#define CbcEventHandler_H
|
12
|
+
|
13
|
+
/*! \file CbcEventHandler.hpp
|
14
|
+
\brief Event handling for cbc
|
15
|
+
|
16
|
+
This file contains the declaration of CbcEventHandler, used for event
|
17
|
+
handling in cbc.
|
18
|
+
|
19
|
+
The central method is CbcEventHandler::event(). The default semantics of
|
20
|
+
this call are `ask for the action to take in reponse to this event'. The
|
21
|
+
call is made at the point in the code where the event occurs (<i>e.g.</i>,
|
22
|
+
when a solution is found, or when a node is added to or removed from the
|
23
|
+
search tree). The return value specifies the action to perform in response
|
24
|
+
to the event (<i>e.g.</i>, continue, or stop).
|
25
|
+
|
26
|
+
This is a lazy class. Initially, it knows nothing about specific events,
|
27
|
+
and returns dfltAction_ for any event. This makes for a trivial constructor
|
28
|
+
and fast startup. The only place where the list of known events or actions
|
29
|
+
is hardwired is in the enum definitions for CbcEvent and CbcAction,
|
30
|
+
respectively.
|
31
|
+
|
32
|
+
At the first call to setAction, a map is created to hold (Event,Action)
|
33
|
+
pairs, and this map will be consulted ever after. Events not in the map
|
34
|
+
will still return the default value.
|
35
|
+
|
36
|
+
For serious extensions, derive a subclass and replace event() with a
|
37
|
+
function that suits you better. The function has access to the CbcModel
|
38
|
+
via a pointer held in the CbcEventHandler object, and can do as much
|
39
|
+
thinking as it likes before returning an answer. You can also print as
|
40
|
+
much information as you want. The model is held as a const, however, so
|
41
|
+
you can't alter reality.
|
42
|
+
|
43
|
+
The design of the class deliberately matches ClpEventHandler, so that other
|
44
|
+
solvers can participate in cbc without breaking the patterns set by
|
45
|
+
clp-specific code.
|
46
|
+
|
47
|
+
*/
|
48
|
+
|
49
|
+
#include <cstddef>
|
50
|
+
#include <map>
|
51
|
+
|
52
|
+
/* May well already be declared, but can't hurt. */
|
53
|
+
|
54
|
+
class CbcModel ;
|
55
|
+
|
56
|
+
/*
|
57
|
+
cvs/svn: $Id: CbcEventHandler.hpp 1987 2013-11-29 17:27:29Z forrest $
|
58
|
+
*/
|
59
|
+
|
60
|
+
/*! \class CbcEventHandler
|
61
|
+
\brief Base class for Cbc event handling.
|
62
|
+
|
63
|
+
Up front: We're not talking about unanticipated events here. We're talking
|
64
|
+
about anticipated events, in the sense that the code is going to make a call
|
65
|
+
to event() and is prepared to obey the return value that it receives.
|
66
|
+
|
67
|
+
The general pattern for usage is as follows:
|
68
|
+
<ol>
|
69
|
+
<li> Create a CbcEventHandler object. This will be initialised with a set
|
70
|
+
of default actions for every recognised event.
|
71
|
+
|
72
|
+
<li> Attach the event handler to the CbcModel object.
|
73
|
+
|
74
|
+
<li> When execution reaches the point where an event occurs, call the
|
75
|
+
event handler as CbcEventHandler::event(the event). The return value
|
76
|
+
will specify what the code should do in response to the event.
|
77
|
+
</ol>
|
78
|
+
|
79
|
+
The return value associated with an event can be changed at any time.
|
80
|
+
*/
|
81
|
+
|
82
|
+
class CbcEventHandler {
|
83
|
+
|
84
|
+
public:
|
85
|
+
|
86
|
+
/*! \brief Events known to cbc */
|
87
|
+
|
88
|
+
enum CbcEvent { /*! Processing of the current node is complete. */
|
89
|
+
node = 200,
|
90
|
+
/*! A tree status interval has arrived. */
|
91
|
+
treeStatus,
|
92
|
+
/*! A solution has been found. */
|
93
|
+
solution,
|
94
|
+
/*! A heuristic solution has been found. */
|
95
|
+
heuristicSolution,
|
96
|
+
/*! A solution will be found unless user takes action (first check). */
|
97
|
+
beforeSolution1,
|
98
|
+
/*! A solution will be found unless user takes action (thorough check). */
|
99
|
+
beforeSolution2,
|
100
|
+
/*! After failed heuristic. */
|
101
|
+
afterHeuristic,
|
102
|
+
/*! On entry to small branch and bound. */
|
103
|
+
smallBranchAndBound,
|
104
|
+
/*! After a pass of heuristic. */
|
105
|
+
heuristicPass,
|
106
|
+
/*! When converting constraints to cuts. */
|
107
|
+
convertToCuts,
|
108
|
+
/*! End of search. */
|
109
|
+
endSearch
|
110
|
+
} ;
|
111
|
+
|
112
|
+
/*! \brief Action codes returned by the event handler.
|
113
|
+
|
114
|
+
Specific values are chosen to match ClpEventHandler return codes.
|
115
|
+
*/
|
116
|
+
|
117
|
+
enum CbcAction { /*! Continue --- no action required. */
|
118
|
+
noAction = -1,
|
119
|
+
/*! Stop --- abort the current run at the next opportunity. */
|
120
|
+
stop = 0,
|
121
|
+
/*! Restart --- restart branch-and-cut search; do not undo root node
|
122
|
+
processing.
|
123
|
+
*/
|
124
|
+
restart,
|
125
|
+
/*! RestartRoot --- undo root node and start branch-and-cut afresh. */
|
126
|
+
restartRoot,
|
127
|
+
/*! Add special cuts. */
|
128
|
+
addCuts,
|
129
|
+
/*! Pretend solution never happened. */
|
130
|
+
killSolution,
|
131
|
+
/*! Take action on modified data. */
|
132
|
+
takeAction
|
133
|
+
|
134
|
+
} ;
|
135
|
+
|
136
|
+
/*! \brief Data type for event/action pairs */
|
137
|
+
|
138
|
+
typedef std::map<CbcEvent, CbcAction> eaMapPair ;
|
139
|
+
|
140
|
+
|
141
|
+
/*! \name Event Processing */
|
142
|
+
//@{
|
143
|
+
|
144
|
+
/*! \brief Return the action to be taken for an event.
|
145
|
+
|
146
|
+
Return the action that should be taken in response to the event passed as
|
147
|
+
the parameter. The default implementation simply reads a return code
|
148
|
+
from a map.
|
149
|
+
*/
|
150
|
+
virtual CbcAction event(CbcEvent whichEvent) ;
|
151
|
+
|
152
|
+
/*! \brief Return the action to be taken for an event - and modify data.
|
153
|
+
|
154
|
+
Return the action that should be taken in response to the event passed as
|
155
|
+
the parameter. The default implementation simply reads a return code
|
156
|
+
from a map.
|
157
|
+
*/
|
158
|
+
virtual CbcAction event(CbcEvent whichEvent, void * data) ;
|
159
|
+
|
160
|
+
//@}
|
161
|
+
|
162
|
+
|
163
|
+
/*! \name Constructors and destructors */
|
164
|
+
//@{
|
165
|
+
|
166
|
+
/*! \brief Default constructor. */
|
167
|
+
|
168
|
+
CbcEventHandler(CbcModel *model = 0 /* was NULL but 4.6 complains */) ;
|
169
|
+
|
170
|
+
/*! \brief Copy constructor. */
|
171
|
+
|
172
|
+
CbcEventHandler(const CbcEventHandler &orig) ;
|
173
|
+
|
174
|
+
/*! \brief Assignment. */
|
175
|
+
|
176
|
+
CbcEventHandler& operator=(const CbcEventHandler &rhs) ;
|
177
|
+
|
178
|
+
/*! \brief Clone (virtual) constructor. */
|
179
|
+
|
180
|
+
virtual CbcEventHandler* clone() const ;
|
181
|
+
|
182
|
+
/*! \brief Destructor. */
|
183
|
+
|
184
|
+
virtual ~CbcEventHandler() ;
|
185
|
+
|
186
|
+
//@}
|
187
|
+
|
188
|
+
/*! \name Set/Get methods */
|
189
|
+
//@{
|
190
|
+
|
191
|
+
/*! \brief Set model. */
|
192
|
+
|
193
|
+
inline void setModel(CbcModel *model) {
|
194
|
+
model_ = model ;
|
195
|
+
}
|
196
|
+
|
197
|
+
/*! \brief Get model. */
|
198
|
+
|
199
|
+
inline const CbcModel* getModel() const {
|
200
|
+
return model_ ;
|
201
|
+
}
|
202
|
+
|
203
|
+
/*! \brief Set the default action */
|
204
|
+
|
205
|
+
inline void setDfltAction(CbcAction action) {
|
206
|
+
dfltAction_ = action ;
|
207
|
+
}
|
208
|
+
|
209
|
+
/*! \brief Set the action code associated with an event */
|
210
|
+
|
211
|
+
inline void setAction(CbcEvent event, CbcAction action) {
|
212
|
+
if (eaMap_ == 0) {
|
213
|
+
eaMap_ = new eaMapPair ;
|
214
|
+
}
|
215
|
+
(*eaMap_)[event] = action ;
|
216
|
+
}
|
217
|
+
|
218
|
+
//@}
|
219
|
+
|
220
|
+
|
221
|
+
protected:
|
222
|
+
|
223
|
+
/*! \name Data members
|
224
|
+
|
225
|
+
Protected (as opposed to private) to allow access by derived classes.
|
226
|
+
*/
|
227
|
+
//@{
|
228
|
+
|
229
|
+
/*! \brief Pointer to associated CbcModel */
|
230
|
+
|
231
|
+
CbcModel *model_ ;
|
232
|
+
|
233
|
+
/*! \brief Default action */
|
234
|
+
|
235
|
+
CbcAction dfltAction_ ;
|
236
|
+
|
237
|
+
/*! \brief Pointer to a map that holds non-default event/action pairs */
|
238
|
+
|
239
|
+
eaMapPair *eaMap_ ;
|
240
|
+
|
241
|
+
//@}
|
242
|
+
} ;
|
243
|
+
|
244
|
+
#endif
|
245
|
+
|
@@ -0,0 +1,137 @@
|
|
1
|
+
/* $Id: CbcFathom.hpp 1889 2013-04-07 13:46:46Z stefan $ */
|
2
|
+
// Copyright (C) 2004, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CbcFathom_H
|
7
|
+
#define CbcFathom_H
|
8
|
+
#include "CbcConfig.h"
|
9
|
+
|
10
|
+
/*
|
11
|
+
This file contains two classes, CbcFathom and CbcOsiSolver. It's unclear why
|
12
|
+
they're in the same file. CbcOsiSolver is a base class for CbcLinked.
|
13
|
+
|
14
|
+
--lh, 071031 --
|
15
|
+
*/
|
16
|
+
|
17
|
+
|
18
|
+
class CbcModel;
|
19
|
+
|
20
|
+
//#############################################################################
|
21
|
+
/** Fathom base class.
|
22
|
+
|
23
|
+
The idea is that after some branching the problem will be effectively smaller than
|
24
|
+
the original problem and maybe there will be a more specialized technique which can completely
|
25
|
+
fathom this branch quickly.
|
26
|
+
|
27
|
+
One method is to presolve the problem to give a much smaller new problem and then do branch
|
28
|
+
and cut on that. Another might be dynamic programming.
|
29
|
+
|
30
|
+
*/
|
31
|
+
|
32
|
+
class CbcFathom {
|
33
|
+
public:
|
34
|
+
// Default Constructor
|
35
|
+
CbcFathom ();
|
36
|
+
|
37
|
+
// Constructor with model - assumed before cuts
|
38
|
+
CbcFathom (CbcModel & model);
|
39
|
+
|
40
|
+
virtual ~CbcFathom();
|
41
|
+
|
42
|
+
/// update model (This is needed if cliques update matrix etc)
|
43
|
+
virtual void setModel(CbcModel * model);
|
44
|
+
|
45
|
+
/// Clone
|
46
|
+
virtual CbcFathom * clone() const = 0;
|
47
|
+
|
48
|
+
/// Resets stuff if model changes
|
49
|
+
virtual void resetModel(CbcModel * model) = 0;
|
50
|
+
|
51
|
+
/** returns 0 if no fathoming attempted, 1 fully fathomed,
|
52
|
+
2 incomplete search, 3 incomplete search but treat as complete.
|
53
|
+
If solution then newSolution will not be NULL and
|
54
|
+
will be freed by CbcModel. It is expected that the solution is better
|
55
|
+
than best so far but CbcModel will double check.
|
56
|
+
|
57
|
+
If returns 3 then of course there is no guarantee of global optimum
|
58
|
+
*/
|
59
|
+
virtual int fathom(double *& newSolution) = 0;
|
60
|
+
|
61
|
+
// Is this method possible
|
62
|
+
inline bool possible() const {
|
63
|
+
return possible_;
|
64
|
+
}
|
65
|
+
|
66
|
+
protected:
|
67
|
+
|
68
|
+
/// Model
|
69
|
+
CbcModel * model_;
|
70
|
+
/// Possible - if this method of fathoming can be used
|
71
|
+
bool possible_;
|
72
|
+
private:
|
73
|
+
|
74
|
+
/// Illegal Assignment operator
|
75
|
+
CbcFathom & operator=(const CbcFathom& rhs);
|
76
|
+
|
77
|
+
};
|
78
|
+
|
79
|
+
#include "OsiClpSolverInterface.hpp"
|
80
|
+
|
81
|
+
//#############################################################################
|
82
|
+
|
83
|
+
/**
|
84
|
+
|
85
|
+
This is for codes where solver needs to know about CbcModel
|
86
|
+
Seems to provide only one value-added feature, a CbcModel object.
|
87
|
+
|
88
|
+
*/
|
89
|
+
|
90
|
+
class CbcOsiSolver : public OsiClpSolverInterface {
|
91
|
+
|
92
|
+
public:
|
93
|
+
|
94
|
+
/**@name Constructors and destructors */
|
95
|
+
//@{
|
96
|
+
/// Default Constructor
|
97
|
+
CbcOsiSolver ();
|
98
|
+
|
99
|
+
/// Clone
|
100
|
+
virtual OsiSolverInterface * clone(bool copyData = true) const;
|
101
|
+
|
102
|
+
/// Copy constructor
|
103
|
+
CbcOsiSolver (const CbcOsiSolver &);
|
104
|
+
|
105
|
+
/// Assignment operator
|
106
|
+
CbcOsiSolver & operator=(const CbcOsiSolver& rhs);
|
107
|
+
|
108
|
+
/// Destructor
|
109
|
+
virtual ~CbcOsiSolver ();
|
110
|
+
|
111
|
+
//@}
|
112
|
+
|
113
|
+
|
114
|
+
/**@name Sets and Gets */
|
115
|
+
//@{
|
116
|
+
/// Set Cbc Model
|
117
|
+
inline void setCbcModel(CbcModel * model) {
|
118
|
+
cbcModel_ = model;
|
119
|
+
}
|
120
|
+
/// Return Cbc Model
|
121
|
+
inline CbcModel * cbcModel() const {
|
122
|
+
return cbcModel_;
|
123
|
+
}
|
124
|
+
//@}
|
125
|
+
|
126
|
+
//---------------------------------------------------------------------------
|
127
|
+
|
128
|
+
protected:
|
129
|
+
|
130
|
+
|
131
|
+
/**@name Private member data */
|
132
|
+
//@{
|
133
|
+
/// Pointer back to CbcModel
|
134
|
+
CbcModel * cbcModel_;
|
135
|
+
//@}
|
136
|
+
};
|
137
|
+
#endif
|
@@ -0,0 +1,169 @@
|
|
1
|
+
/* $Id: CbcFathomDynamicProgramming.hpp 1573 2011-01-05 01:12:36Z lou $ */
|
2
|
+
// Copyright (C) 2004, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CbcFathomDynamicProgramming_H
|
7
|
+
#define CbcFathomDynamicProgramming_H
|
8
|
+
|
9
|
+
#include "CbcFathom.hpp"
|
10
|
+
|
11
|
+
//#############################################################################
|
12
|
+
/** FathomDynamicProgramming class.
|
13
|
+
|
14
|
+
The idea is that after some branching the problem will be effectively smaller than
|
15
|
+
the original problem and maybe there will be a more specialized technique which can completely
|
16
|
+
fathom this branch quickly.
|
17
|
+
|
18
|
+
This is a dynamic programming implementation which is very fast for some
|
19
|
+
specialized problems. It expects small integral rhs, an all integer problem
|
20
|
+
and positive integral coefficients. At present it can not do general set covering
|
21
|
+
problems just set partitioning. It can find multiple optima for various rhs
|
22
|
+
combinations.
|
23
|
+
|
24
|
+
The main limiting factor is size of state space. Each 1 rhs doubles the size of the problem.
|
25
|
+
2 or 3 rhs quadruples, 4,5,6,7 by 8 etc.
|
26
|
+
*/
|
27
|
+
|
28
|
+
class CbcFathomDynamicProgramming : public CbcFathom {
|
29
|
+
public:
|
30
|
+
// Default Constructor
|
31
|
+
CbcFathomDynamicProgramming ();
|
32
|
+
|
33
|
+
// Constructor with model - assumed before cuts
|
34
|
+
CbcFathomDynamicProgramming (CbcModel & model);
|
35
|
+
// Copy constructor
|
36
|
+
CbcFathomDynamicProgramming(const CbcFathomDynamicProgramming & rhs);
|
37
|
+
|
38
|
+
virtual ~CbcFathomDynamicProgramming();
|
39
|
+
|
40
|
+
/// update model (This is needed if cliques update matrix etc)
|
41
|
+
virtual void setModel(CbcModel * model);
|
42
|
+
|
43
|
+
/// Clone
|
44
|
+
virtual CbcFathom * clone() const;
|
45
|
+
|
46
|
+
/// Resets stuff if model changes
|
47
|
+
virtual void resetModel(CbcModel * model);
|
48
|
+
|
49
|
+
/** returns 0 if no fathoming attempted, 1 fully fathomed ,
|
50
|
+
2 incomplete search, 3 incomplete search but treat as complete.
|
51
|
+
If solution then newSolution will not be NULL and
|
52
|
+
will be freed by CbcModel. It is expected that the solution is better
|
53
|
+
than best so far but CbcModel will double check.
|
54
|
+
|
55
|
+
If returns 3 then of course there is no guarantee of global optimum
|
56
|
+
*/
|
57
|
+
virtual int fathom(double *& newSolution);
|
58
|
+
|
59
|
+
/// Maximum size allowed
|
60
|
+
inline int maximumSize() const {
|
61
|
+
return maximumSizeAllowed_;
|
62
|
+
}
|
63
|
+
inline void setMaximumSize(int value) {
|
64
|
+
maximumSizeAllowed_ = value;
|
65
|
+
}
|
66
|
+
/// Returns type of algorithm and sets up arrays
|
67
|
+
int checkPossible(int allowableSize = 0);
|
68
|
+
// set algorithm
|
69
|
+
inline void setAlgorithm(int value) {
|
70
|
+
algorithm_ = value;
|
71
|
+
}
|
72
|
+
/** Tries a column
|
73
|
+
returns true if was used in making any changes.
|
74
|
+
*/
|
75
|
+
bool tryColumn(int numberElements, const int * rows,
|
76
|
+
const double * coefficients, double cost,
|
77
|
+
int upper = COIN_INT_MAX);
|
78
|
+
/// Returns cost array
|
79
|
+
inline const double * cost() const {
|
80
|
+
return cost_;
|
81
|
+
}
|
82
|
+
/// Returns back array
|
83
|
+
inline const int * back() const {
|
84
|
+
return back_;
|
85
|
+
}
|
86
|
+
/// Gets bit pattern for target result
|
87
|
+
inline int target() const {
|
88
|
+
return target_;
|
89
|
+
}
|
90
|
+
/// Sets bit pattern for target result
|
91
|
+
inline void setTarget(int value) {
|
92
|
+
target_ = value;
|
93
|
+
}
|
94
|
+
private:
|
95
|
+
/// Does deleteions
|
96
|
+
void gutsOfDelete();
|
97
|
+
|
98
|
+
/** Adds one attempt of one column of type 0,
|
99
|
+
returns true if was used in making any changes
|
100
|
+
*/
|
101
|
+
bool addOneColumn0(int numberElements, const int * rows,
|
102
|
+
double cost);
|
103
|
+
/** Adds one attempt of one column of type 1,
|
104
|
+
returns true if was used in making any changes.
|
105
|
+
At present the user has to call it once for each possible value
|
106
|
+
*/
|
107
|
+
bool addOneColumn1(int numberElements, const int * rows,
|
108
|
+
const int * coefficients, double cost);
|
109
|
+
/** Adds one attempt of one column of type 1,
|
110
|
+
returns true if was used in making any changes.
|
111
|
+
At present the user has to call it once for each possible value.
|
112
|
+
This version is when there are enough 1 rhs to do faster
|
113
|
+
*/
|
114
|
+
bool addOneColumn1A(int numberElements, const int * rows,
|
115
|
+
const int * coefficients, double cost);
|
116
|
+
/// Gets bit pattern from original column
|
117
|
+
int bitPattern(int numberElements, const int * rows,
|
118
|
+
const int * coefficients);
|
119
|
+
/// Gets bit pattern from original column
|
120
|
+
int bitPattern(int numberElements, const int * rows,
|
121
|
+
const double * coefficients);
|
122
|
+
/// Fills in original column (dense) from bit pattern - returning number nonzero
|
123
|
+
int decodeBitPattern(int bitPattern, int * values, int numberRows);
|
124
|
+
|
125
|
+
protected:
|
126
|
+
|
127
|
+
/// Size of states (power of 2 unless just one constraint)
|
128
|
+
int size_;
|
129
|
+
/** Type - 0 coefficients and rhs all 1,
|
130
|
+
1 - coefficients > 1 or rhs > 1
|
131
|
+
*/
|
132
|
+
int type_;
|
133
|
+
/// Space for states
|
134
|
+
double * cost_;
|
135
|
+
/// Which state produced this cheapest one
|
136
|
+
int * back_;
|
137
|
+
/// Some rows may be satisified so we need a lookup
|
138
|
+
int * lookup_;
|
139
|
+
/// Space for sorted indices
|
140
|
+
int * indices_;
|
141
|
+
/// Number of active rows
|
142
|
+
int numberActive_;
|
143
|
+
/// Maximum size allowed
|
144
|
+
int maximumSizeAllowed_;
|
145
|
+
/// Start bit for each active row
|
146
|
+
int * startBit_;
|
147
|
+
/// Number bits for each active row
|
148
|
+
int * numberBits_;
|
149
|
+
/// Effective rhs
|
150
|
+
int * rhs_;
|
151
|
+
/// Space for sorted coefficients
|
152
|
+
int * coefficients_;
|
153
|
+
/// Target pattern
|
154
|
+
int target_;
|
155
|
+
/// Number of Non 1 rhs
|
156
|
+
int numberNonOne_;
|
157
|
+
/// Current bit pattern
|
158
|
+
int bitPattern_;
|
159
|
+
/// Current algorithm
|
160
|
+
int algorithm_;
|
161
|
+
private:
|
162
|
+
|
163
|
+
/// Illegal Assignment operator
|
164
|
+
CbcFathomDynamicProgramming & operator=(const CbcFathomDynamicProgramming& rhs);
|
165
|
+
|
166
|
+
};
|
167
|
+
|
168
|
+
#endif
|
169
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
/* $Id: CbcFeasibilityBase.hpp 1573 2011-01-05 01:12:36Z lou $ */
|
2
|
+
// Copyright (C) 2005, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CbcFeasibilityBase_H
|
7
|
+
#define CbcFeasibilityBase_H
|
8
|
+
|
9
|
+
|
10
|
+
//#############################################################################
|
11
|
+
/* There are cases where the user wants to control how CBC sees the problems feasibility.
|
12
|
+
The user may want to examine the problem and say :
|
13
|
+
a) The default looks OK
|
14
|
+
b) Pretend this problem is Integer feasible
|
15
|
+
c) Pretend this problem is infeasible even though it looks feasible
|
16
|
+
|
17
|
+
This simple class allows user to do that.
|
18
|
+
|
19
|
+
*/
|
20
|
+
|
21
|
+
class CbcModel;
|
22
|
+
class CbcFeasibilityBase {
|
23
|
+
public:
|
24
|
+
// Default Constructor
|
25
|
+
CbcFeasibilityBase () {}
|
26
|
+
|
27
|
+
/**
|
28
|
+
On input mode:
|
29
|
+
0 - called after a solve but before any cuts
|
30
|
+
-1 - called after strong branching
|
31
|
+
Returns :
|
32
|
+
0 - no opinion
|
33
|
+
-1 pretend infeasible
|
34
|
+
1 pretend integer solution
|
35
|
+
*/
|
36
|
+
virtual int feasible(CbcModel * , int ) {
|
37
|
+
return 0;
|
38
|
+
}
|
39
|
+
|
40
|
+
virtual ~CbcFeasibilityBase() {}
|
41
|
+
|
42
|
+
// Copy constructor
|
43
|
+
CbcFeasibilityBase ( const CbcFeasibilityBase & ) {}
|
44
|
+
|
45
|
+
// Assignment operator
|
46
|
+
CbcFeasibilityBase & operator=( const CbcFeasibilityBase& ) {
|
47
|
+
return *this;
|
48
|
+
}
|
49
|
+
|
50
|
+
/// Clone
|
51
|
+
virtual CbcFeasibilityBase * clone() const {
|
52
|
+
return new CbcFeasibilityBase(*this);
|
53
|
+
}
|
54
|
+
};
|
55
|
+
#endif
|
56
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
// $Id: CbcFixVariable.hpp 1899 2013-04-09 18:12:08Z stefan $
|
2
|
+
// Copyright (C) 2002, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
// Edwin 11/10/2009-- carved out of CbcBranchActual
|
7
|
+
|
8
|
+
#ifndef CbcFixVariable_H
|
9
|
+
#define CbcFixVariable_H
|
10
|
+
|
11
|
+
#include "CbcBranchBase.hpp"
|
12
|
+
/** Class for consequent bounds.
|
13
|
+
When a variable is branched on it normally interacts with other variables by
|
14
|
+
means of equations. There are cases where we want to step outside LP and do something
|
15
|
+
more directly e.g. fix bounds. This class is for that.
|
16
|
+
|
17
|
+
A state of -9999 means at LB, +9999 means at UB,
|
18
|
+
others mean if fixed to that value.
|
19
|
+
|
20
|
+
*/
|
21
|
+
|
22
|
+
class CbcFixVariable : public CbcConsequence {
|
23
|
+
|
24
|
+
public:
|
25
|
+
|
26
|
+
// Default Constructor
|
27
|
+
CbcFixVariable ();
|
28
|
+
|
29
|
+
// One useful Constructor
|
30
|
+
CbcFixVariable (int numberStates, const int * states, const int * numberNewLower, const int ** newLowerValue,
|
31
|
+
const int ** lowerColumn,
|
32
|
+
const int * numberNewUpper, const int ** newUpperValue,
|
33
|
+
const int ** upperColumn);
|
34
|
+
|
35
|
+
// Copy constructor
|
36
|
+
CbcFixVariable ( const CbcFixVariable & rhs);
|
37
|
+
|
38
|
+
// Assignment operator
|
39
|
+
CbcFixVariable & operator=( const CbcFixVariable & rhs);
|
40
|
+
|
41
|
+
/// Clone
|
42
|
+
virtual CbcConsequence * clone() const;
|
43
|
+
|
44
|
+
/// Destructor
|
45
|
+
virtual ~CbcFixVariable ();
|
46
|
+
|
47
|
+
/** Apply to an LP solver. Action depends on state
|
48
|
+
*/
|
49
|
+
virtual void applyToSolver(OsiSolverInterface * solver, int state) const;
|
50
|
+
|
51
|
+
protected:
|
52
|
+
/// Number of states
|
53
|
+
int numberStates_;
|
54
|
+
/// Values of integers for various states
|
55
|
+
int * states_;
|
56
|
+
/// Start of information for each state (setting new lower)
|
57
|
+
int * startLower_;
|
58
|
+
/// Start of information for each state (setting new upper)
|
59
|
+
int * startUpper_;
|
60
|
+
/// For each variable new bounds
|
61
|
+
double * newBound_;
|
62
|
+
/// Variable
|
63
|
+
int * variable_;
|
64
|
+
};
|
65
|
+
|
66
|
+
#endif
|
67
|
+
|