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,105 @@
|
|
1
|
+
|
2
|
+
#ifndef CoinPresolveMonitor_H
|
3
|
+
#define CoinPresolveMonitor_H
|
4
|
+
|
5
|
+
/*!
|
6
|
+
\brief Monitor a row or column for modification
|
7
|
+
|
8
|
+
The purpose of this class is to monitor a row or column for modifications
|
9
|
+
during presolve and postsolve. Each object can monitor one row or
|
10
|
+
column. The initial copy of the row or column is loaded by the constructor.
|
11
|
+
Each subsequent call to checkAndTell() compares the current state of the row
|
12
|
+
or column with the stored state and reports any modifications.
|
13
|
+
|
14
|
+
Internally the row or column is held as a CoinPackedVector so that it's
|
15
|
+
possible to follow a row or column through presolve (CoinPresolveMatrix)
|
16
|
+
and postsolve (CoinPostsolveMatrix).
|
17
|
+
|
18
|
+
Do not underestimate the amount of work required here. Extracting a row from
|
19
|
+
the CoinPostsolve matrix requires a scan of every element in the matrix.
|
20
|
+
That's one scan by the constructor and one scan with every call to modify.
|
21
|
+
But that's precisely why it's virtually impossible to debug presolve without
|
22
|
+
aids.
|
23
|
+
|
24
|
+
Parameter overloads for CoinPresolveMatrix and CoinPostsolveMatrix are a
|
25
|
+
little clumsy, but not a problem in use. The alternative is to add methods
|
26
|
+
to the CoinPresolveMatrix and CoinPostsolveMatrix classes that will only be
|
27
|
+
used for debugging. That's not too attractive either.
|
28
|
+
*/
|
29
|
+
class CoinPresolveMonitor
|
30
|
+
{
|
31
|
+
public:
|
32
|
+
|
33
|
+
/*! \brief Default constructor
|
34
|
+
|
35
|
+
Creates an empty monitor.
|
36
|
+
*/
|
37
|
+
CoinPresolveMonitor() ;
|
38
|
+
|
39
|
+
/*! \brief Initialise from a CoinPresolveMatrix
|
40
|
+
|
41
|
+
Load the initial row or column from a CoinPresolveMatrix. Set \p isRow
|
42
|
+
true for a row, false for a column.
|
43
|
+
*/
|
44
|
+
CoinPresolveMonitor(const CoinPresolveMatrix *mtx, bool isRow, int k) ;
|
45
|
+
|
46
|
+
/*! \brief Initialise from a CoinPostsolveMatrix
|
47
|
+
|
48
|
+
Load the initial row or column from a CoinPostsolveMatrix. Set \p isRow
|
49
|
+
true for a row, false for a column.
|
50
|
+
*/
|
51
|
+
CoinPresolveMonitor(const CoinPostsolveMatrix *mtx, bool isRow, int k) ;
|
52
|
+
|
53
|
+
/*! \brief Compare the present row or column against the stored copy and
|
54
|
+
report differences.
|
55
|
+
|
56
|
+
Load the current row or column from a CoinPresolveMatrix and compare.
|
57
|
+
Differences are printed to std::cout.
|
58
|
+
*/
|
59
|
+
void checkAndTell(const CoinPresolveMatrix *mtx) ;
|
60
|
+
|
61
|
+
/*! \brief Compare the present row or column against the stored copy and
|
62
|
+
report differences.
|
63
|
+
|
64
|
+
Load the current row or column from a CoinPostsolveMatrix and compare.
|
65
|
+
Differences are printed to std::cout.
|
66
|
+
*/
|
67
|
+
void checkAndTell(const CoinPostsolveMatrix *mtx) ;
|
68
|
+
|
69
|
+
private:
|
70
|
+
|
71
|
+
/// Extract a row from a CoinPresolveMatrix
|
72
|
+
CoinPackedVector *extractRow(int i, const CoinPresolveMatrix *mtx) const ;
|
73
|
+
|
74
|
+
/// Extract a column from a CoinPresolveMatrix
|
75
|
+
CoinPackedVector *extractCol(int j, const CoinPresolveMatrix *mtx) const ;
|
76
|
+
|
77
|
+
/// Extract a row from a CoinPostsolveMatrix
|
78
|
+
CoinPackedVector *extractRow(int i, const CoinPostsolveMatrix *mtx) const ;
|
79
|
+
|
80
|
+
/// Extract a column from a CoinPostsolveMatrix
|
81
|
+
CoinPackedVector *extractCol(int j, const CoinPostsolveMatrix *mtx) const ;
|
82
|
+
|
83
|
+
/// Worker method underlying the public checkAndTell methods.
|
84
|
+
void checkAndTell(CoinPackedVector *curVec, double lb, double ub) ;
|
85
|
+
|
86
|
+
/// True to monitor a row, false to monitor a column
|
87
|
+
bool isRow_ ;
|
88
|
+
|
89
|
+
/// Row or column index
|
90
|
+
int ndx_ ;
|
91
|
+
|
92
|
+
/*! The original row or column
|
93
|
+
|
94
|
+
Sorted in increasing order of indices.
|
95
|
+
*/
|
96
|
+
CoinPackedVector *origVec_ ;
|
97
|
+
|
98
|
+
/// Original row or column lower bound
|
99
|
+
double lb_ ;
|
100
|
+
|
101
|
+
/// Original row or column upper bound
|
102
|
+
double ub_ ;
|
103
|
+
} ;
|
104
|
+
|
105
|
+
#endif
|
@@ -0,0 +1,166 @@
|
|
1
|
+
/* $Id: CoinPresolvePsdebug.hpp 1560 2012-11-24 00:29:01Z lou $ */
|
2
|
+
// Copyright (C) 2002, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CoinPresolvePsdebug_H
|
7
|
+
#define CoinPresolvePsdebug_H
|
8
|
+
|
9
|
+
/*
|
10
|
+
The current idea of the relation between PRESOLVE_DEBUG and
|
11
|
+
PRESOLVE_CONSISTENCY is that PRESOLVE_CONSISTENCY triggers the consistency
|
12
|
+
checks and PRESOLVE_DEBUG triggers consistency checks and output.
|
13
|
+
This isn't always true in the code, but that's the goal. Really,
|
14
|
+
the whole compile-time scheme should be replaced with something more
|
15
|
+
user-friendly (control variables that can be changed during the run).
|
16
|
+
|
17
|
+
Also floating about are PRESOLVE_SUMMARY and COIN_PRESOLVE_TUNING.
|
18
|
+
-- lh, 111208 --
|
19
|
+
*/
|
20
|
+
/*! \defgroup PresolveDebugFunctions Presolve Debug Functions
|
21
|
+
|
22
|
+
These functions implement consistency checks on data structures involved
|
23
|
+
in presolve and postsolve and on the components of the lp solution.
|
24
|
+
|
25
|
+
To use these functions, include CoinPresolvePsdebug.hpp in your file and
|
26
|
+
define the compile-time constants PRESOLVE_SUMMARY, PRESOLVE_DEBUG, and
|
27
|
+
PRESOLVE_CONSISTENCY. A value is needed (<i>i.e.</i>, PRESOLVE_DEBUG=1).
|
28
|
+
In a few places, higher values will get you a bit more output.
|
29
|
+
|
30
|
+
********
|
31
|
+
|
32
|
+
Define the symbols PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure
|
33
|
+
command line (use ADD_CXXFLAGS), in a Makefile, or similar and do a full
|
34
|
+
rebuild (including any presolve driver code). If the symbols are not
|
35
|
+
consistently nonzero across *all* presolve code, you'll get something
|
36
|
+
between garbage and a core dump! Debugging adds messages to CoinMessage
|
37
|
+
and allocates and maintains arrays that hold debug information.
|
38
|
+
|
39
|
+
That said, given that you've configured and built with PRESOLVE_DEBUG and
|
40
|
+
PRESOLVE_CONSISTENCY nonzero everywhere, it's safe to adjust PRESOLVE_DEBUG
|
41
|
+
to values in the range 1..n in individual files to increase or decrease the
|
42
|
+
amount of output.
|
43
|
+
|
44
|
+
The suggested approach for PRESOLVE_DEBUG is to define it to 1 in the build
|
45
|
+
and then increase it in individual presolve code files to get more detail.
|
46
|
+
|
47
|
+
********
|
48
|
+
*/
|
49
|
+
//@{
|
50
|
+
|
51
|
+
/*! \relates CoinPresolveMatrix
|
52
|
+
\brief Check column-major and/or row-major matrices for duplicate
|
53
|
+
entries in the major vectors.
|
54
|
+
|
55
|
+
By default, scans both the column- and row-major matrices. Set doCol (doRow)
|
56
|
+
to false to suppress the column (row) scan.
|
57
|
+
*/
|
58
|
+
void presolve_no_dups(const CoinPresolveMatrix *preObj,
|
59
|
+
bool doCol = true, bool doRow = true) ;
|
60
|
+
|
61
|
+
/*! \relates CoinPresolveMatrix
|
62
|
+
\brief Check the links which track storage order for major vectors in
|
63
|
+
the bulk storage area.
|
64
|
+
|
65
|
+
By default, scans both the column- and row-major matrix. Set doCol = false to
|
66
|
+
suppress the column-major scan. Set doRow = false to suppres the row-major
|
67
|
+
scan.
|
68
|
+
*/
|
69
|
+
void presolve_links_ok(const CoinPresolveMatrix *preObj,
|
70
|
+
bool doCol = true, bool doRow = true) ;
|
71
|
+
|
72
|
+
/*! \relates CoinPresolveMatrix
|
73
|
+
\brief Check for explicit zeros in the column- and/or row-major matrices.
|
74
|
+
|
75
|
+
By default, scans both the column- and row-major matrices. Set doCol (doRow)
|
76
|
+
to false to suppress the column (row) scan.
|
77
|
+
*/
|
78
|
+
void presolve_no_zeros(const CoinPresolveMatrix *preObj,
|
79
|
+
bool doCol = true, bool doRow = true) ;
|
80
|
+
|
81
|
+
/*! \relates CoinPresolveMatrix
|
82
|
+
\brief Checks for equivalence of the column- and row-major matrices.
|
83
|
+
|
84
|
+
Normally the routine will test for coefficient presence and value. Set
|
85
|
+
\p chkvals to false to suppress the check for equal value.
|
86
|
+
*/
|
87
|
+
void presolve_consistent(const CoinPresolveMatrix *preObj,
|
88
|
+
bool chkvals = true) ;
|
89
|
+
|
90
|
+
/*! \relates CoinPostsolveMatrix
|
91
|
+
\brief Checks that column threads agree with column lengths
|
92
|
+
*/
|
93
|
+
void presolve_check_threads(const CoinPostsolveMatrix *obj) ;
|
94
|
+
|
95
|
+
/*! \relates CoinPostsolveMatrix
|
96
|
+
\brief Checks the free list
|
97
|
+
|
98
|
+
Scans the thread of free locations in the bulk store and checks that all
|
99
|
+
entries are reasonable (0 <= index < bulk0_). If chkElemCnt is true, it
|
100
|
+
also checks that the total number of entries in the matrix plus the
|
101
|
+
locations on the free list total to the size of the bulk store. Postsolve
|
102
|
+
routines do not maintain an accurate element count, but this is useful
|
103
|
+
for checking a newly constructed postsolve matrix.
|
104
|
+
*/
|
105
|
+
void presolve_check_free_list(const CoinPostsolveMatrix *obj,
|
106
|
+
bool chkElemCnt = false) ;
|
107
|
+
|
108
|
+
/*! \relates CoinPostsolveMatrix
|
109
|
+
\brief Check stored reduced costs for accuracy and consistency with
|
110
|
+
variable status.
|
111
|
+
|
112
|
+
The routine will check the value of the reduced costs for architectural
|
113
|
+
variables (CoinPrePostsolveMatrix::rcosts_). It performs an accuracy check
|
114
|
+
by recalculating the reduced cost from scratch. It will also check the
|
115
|
+
value for consistency with the status information in
|
116
|
+
CoinPrePostsolveMatrix::colstat_.
|
117
|
+
*/
|
118
|
+
void presolve_check_reduced_costs(const CoinPostsolveMatrix *obj) ;
|
119
|
+
|
120
|
+
/*! \relates CoinPostsolveMatrix
|
121
|
+
\brief Check the dual variables for consistency with row activity.
|
122
|
+
|
123
|
+
The routine checks that the value of the dual variable is consistent
|
124
|
+
with the state of the constraint (loose, tight at lower bound, or tight at
|
125
|
+
upper bound).
|
126
|
+
*/
|
127
|
+
void presolve_check_duals(const CoinPostsolveMatrix *postObj) ;
|
128
|
+
|
129
|
+
/*! \relates CoinPresolveMatrix
|
130
|
+
\brief Check primal solution and architectural variable status.
|
131
|
+
|
132
|
+
The architectural variables can be checked for bogus values, feasibility,
|
133
|
+
and valid status. The row activity is checked for bogus values, accuracy,
|
134
|
+
and feasibility. By default, row activity is not checked (presolve is
|
135
|
+
sloppy about maintaining it). See the definitions in
|
136
|
+
CoinPresolvePsdebug.cpp for more information.
|
137
|
+
*/
|
138
|
+
void presolve_check_sol(const CoinPresolveMatrix *preObj,
|
139
|
+
int chkColSol = 2, int chkRowAct = 1,
|
140
|
+
int chkStatus = 1) ;
|
141
|
+
|
142
|
+
/*! \relates CoinPostsolveMatrix
|
143
|
+
\brief Check primal solution and architectural variable status.
|
144
|
+
|
145
|
+
The architectural variables can be checked for bogus values, feasibility,
|
146
|
+
and valid status. The row activity is checked for bogus values, accuracy,
|
147
|
+
and feasibility. See the definitions in CoinPresolvePsdebug.cpp for more
|
148
|
+
information.
|
149
|
+
*/
|
150
|
+
void presolve_check_sol(const CoinPostsolveMatrix *postObj,
|
151
|
+
int chkColSol = 2, int chkRowAct = 2,
|
152
|
+
int chkStatus = 1) ;
|
153
|
+
|
154
|
+
/*! \relates CoinPresolveMatrix
|
155
|
+
\brief Check for the proper number of basic variables.
|
156
|
+
*/
|
157
|
+
void presolve_check_nbasic(const CoinPresolveMatrix *preObj) ;
|
158
|
+
|
159
|
+
/*! \relates CoinPostsolveMatrix
|
160
|
+
\brief Check for the proper number of basic variables.
|
161
|
+
*/
|
162
|
+
void presolve_check_nbasic(const CoinPostsolveMatrix *postObj) ;
|
163
|
+
|
164
|
+
//@}
|
165
|
+
|
166
|
+
#endif
|
@@ -0,0 +1,112 @@
|
|
1
|
+
/* $Id: CoinPresolveSingleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */
|
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
|
+
#ifndef CoinPresolveSingleton_H
|
7
|
+
#define CoinPresolveSingleton_H
|
8
|
+
#define SLACK_DOUBLETON 2
|
9
|
+
#define SLACK_SINGLETON 8
|
10
|
+
|
11
|
+
/*!
|
12
|
+
\file
|
13
|
+
*/
|
14
|
+
|
15
|
+
//const int MAX_SLACK_DOUBLETONS = 1000;
|
16
|
+
|
17
|
+
/*! \class slack_doubleton_action
|
18
|
+
\brief Convert an explicit bound constraint to a column bound
|
19
|
+
|
20
|
+
This transform looks for explicit bound constraints for a variable and
|
21
|
+
transfers the bound to the appropriate column bound array.
|
22
|
+
The constraint is removed from the constraint system.
|
23
|
+
*/
|
24
|
+
class slack_doubleton_action : public CoinPresolveAction {
|
25
|
+
struct action {
|
26
|
+
double clo;
|
27
|
+
double cup;
|
28
|
+
|
29
|
+
double rlo;
|
30
|
+
double rup;
|
31
|
+
|
32
|
+
double coeff;
|
33
|
+
|
34
|
+
int col;
|
35
|
+
int row;
|
36
|
+
};
|
37
|
+
|
38
|
+
const int nactions_;
|
39
|
+
const action *const actions_;
|
40
|
+
|
41
|
+
slack_doubleton_action(int nactions,
|
42
|
+
const action *actions,
|
43
|
+
const CoinPresolveAction *next) :
|
44
|
+
CoinPresolveAction(next),
|
45
|
+
nactions_(nactions),
|
46
|
+
actions_(actions)
|
47
|
+
{}
|
48
|
+
|
49
|
+
public:
|
50
|
+
const char *name() const { return ("slack_doubleton_action"); }
|
51
|
+
|
52
|
+
/*! \brief Convert explicit bound constraints to column bounds.
|
53
|
+
|
54
|
+
Not now There is a hard limit (#MAX_SLACK_DOUBLETONS) on the number of
|
55
|
+
constraints processed in a given call. \p notFinished is set to true
|
56
|
+
if candidates remain.
|
57
|
+
*/
|
58
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
59
|
+
const CoinPresolveAction *next,
|
60
|
+
bool ¬Finished);
|
61
|
+
|
62
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
63
|
+
|
64
|
+
|
65
|
+
virtual ~slack_doubleton_action() { deleteAction(actions_,action*); }
|
66
|
+
};
|
67
|
+
/*! \class slack_singleton_action
|
68
|
+
\brief For variables with one entry
|
69
|
+
|
70
|
+
If we have a variable with one entry and no cost then we can
|
71
|
+
transform the row from E to G etc.
|
72
|
+
If there is a row objective region then we may be able to do
|
73
|
+
this even with a cost.
|
74
|
+
*/
|
75
|
+
class slack_singleton_action : public CoinPresolveAction {
|
76
|
+
struct action {
|
77
|
+
double clo;
|
78
|
+
double cup;
|
79
|
+
|
80
|
+
double rlo;
|
81
|
+
double rup;
|
82
|
+
|
83
|
+
double coeff;
|
84
|
+
|
85
|
+
int col;
|
86
|
+
int row;
|
87
|
+
};
|
88
|
+
|
89
|
+
const int nactions_;
|
90
|
+
const action *const actions_;
|
91
|
+
|
92
|
+
slack_singleton_action(int nactions,
|
93
|
+
const action *actions,
|
94
|
+
const CoinPresolveAction *next) :
|
95
|
+
CoinPresolveAction(next),
|
96
|
+
nactions_(nactions),
|
97
|
+
actions_(actions)
|
98
|
+
{}
|
99
|
+
|
100
|
+
public:
|
101
|
+
const char *name() const { return ("slack_singleton_action"); }
|
102
|
+
|
103
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
104
|
+
const CoinPresolveAction *next,
|
105
|
+
double * rowObjective);
|
106
|
+
|
107
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
108
|
+
|
109
|
+
|
110
|
+
virtual ~slack_singleton_action() { deleteAction(actions_,action*); }
|
111
|
+
};
|
112
|
+
#endif
|
@@ -0,0 +1,101 @@
|
|
1
|
+
/* $Id: CoinPresolveSubst.hpp 1562 2012-11-24 00:36:15Z lou $ */
|
2
|
+
// Copyright (C) 2002, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CoinPresolveSubst_H
|
7
|
+
#define CoinPresolveSubst_H
|
8
|
+
|
9
|
+
/*!
|
10
|
+
\file
|
11
|
+
*/
|
12
|
+
|
13
|
+
#define SUBST_ROW 21
|
14
|
+
|
15
|
+
#include "CoinPresolveMatrix.hpp"
|
16
|
+
|
17
|
+
/*! \class subst_constraint_action
|
18
|
+
\brief Detect and process implied free variables
|
19
|
+
|
20
|
+
Consider a variable x. Suppose that we can find an equality such that the
|
21
|
+
bound on the equality, combined with
|
22
|
+
the bounds on the other variables involved in the equality, are such that
|
23
|
+
even the worst case values of the other variables still imply bounds for x
|
24
|
+
which are tighter than the variable's original bounds. Since x can never
|
25
|
+
reach its upper or lower bounds, it is an implied free variable. By solving
|
26
|
+
the equality for x and substituting for x in every other constraint
|
27
|
+
entangled with x, we can make x into a column singleton. Now x is an implied
|
28
|
+
free column singleton and both x and the equality can be removed.
|
29
|
+
|
30
|
+
A similar transform for the case where the variable is a natural column
|
31
|
+
singleton is handled by #implied_free_action. In the current presolve
|
32
|
+
architecture, #implied_free_action is responsible for detecting implied free
|
33
|
+
variables that are natural column singletons or can be reduced to column
|
34
|
+
singletons. #implied_free_action calls subst_constraint_action to process
|
35
|
+
variables that must be reduced to column singletons.
|
36
|
+
*/
|
37
|
+
class subst_constraint_action : public CoinPresolveAction {
|
38
|
+
private:
|
39
|
+
subst_constraint_action();
|
40
|
+
subst_constraint_action(const subst_constraint_action& rhs);
|
41
|
+
subst_constraint_action& operator=(const subst_constraint_action& rhs);
|
42
|
+
|
43
|
+
struct action {
|
44
|
+
double *rlos;
|
45
|
+
double *rups;
|
46
|
+
|
47
|
+
double *coeffxs;
|
48
|
+
int *rows;
|
49
|
+
|
50
|
+
int *ninrowxs;
|
51
|
+
int *rowcolsxs;
|
52
|
+
double *rowelsxs;
|
53
|
+
|
54
|
+
const double *costsx;
|
55
|
+
int col;
|
56
|
+
int rowy;
|
57
|
+
|
58
|
+
int nincol;
|
59
|
+
};
|
60
|
+
|
61
|
+
const int nactions_;
|
62
|
+
// actions_ is owned by the class and must be deleted at destruction
|
63
|
+
const action *const actions_;
|
64
|
+
|
65
|
+
subst_constraint_action(int nactions,
|
66
|
+
action *actions,
|
67
|
+
const CoinPresolveAction *next) :
|
68
|
+
CoinPresolveAction(next),
|
69
|
+
nactions_(nactions), actions_(actions) {}
|
70
|
+
|
71
|
+
public:
|
72
|
+
const char *name() const;
|
73
|
+
|
74
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob,
|
75
|
+
const int *implied_free,
|
76
|
+
const int * which,
|
77
|
+
int numberFree,
|
78
|
+
const CoinPresolveAction *next,
|
79
|
+
int fill_level);
|
80
|
+
static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob,
|
81
|
+
const CoinPresolveAction *next,
|
82
|
+
int fillLevel);
|
83
|
+
|
84
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
85
|
+
|
86
|
+
virtual ~subst_constraint_action();
|
87
|
+
};
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
/*static*/ void implied_bounds(const double *els,
|
94
|
+
const double *clo, const double *cup,
|
95
|
+
const int *hcol,
|
96
|
+
CoinBigIndex krs, CoinBigIndex kre,
|
97
|
+
double *maxupp, double *maxdownp,
|
98
|
+
int jcol,
|
99
|
+
double rlo, double rup,
|
100
|
+
double *iclb, double *icub);
|
101
|
+
#endif
|
@@ -0,0 +1,55 @@
|
|
1
|
+
/* $Id: CoinPresolveTighten.hpp 1498 2011-11-02 15:25:35Z mjs $ */
|
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
|
+
#ifndef CoinPresolveTighten_H
|
7
|
+
#define CoinPresolveTighten_H
|
8
|
+
|
9
|
+
#include "CoinPresolveMatrix.hpp"
|
10
|
+
|
11
|
+
// This action has no separate class;
|
12
|
+
// instead, it decides which columns can be made fixed
|
13
|
+
// and calls make_fixed_action::presolve.
|
14
|
+
const CoinPresolveAction *tighten_zero_cost(CoinPresolveMatrix *prob,
|
15
|
+
const CoinPresolveAction *next);
|
16
|
+
|
17
|
+
#define DO_TIGHTEN 30
|
18
|
+
|
19
|
+
class do_tighten_action : public CoinPresolveAction {
|
20
|
+
do_tighten_action();
|
21
|
+
do_tighten_action(const do_tighten_action& rhs);
|
22
|
+
do_tighten_action& operator=(const do_tighten_action& rhs);
|
23
|
+
|
24
|
+
struct action {
|
25
|
+
int *rows;
|
26
|
+
double *lbound;
|
27
|
+
double *ubound;
|
28
|
+
int col;
|
29
|
+
int nrows;
|
30
|
+
int direction; // just for assertions
|
31
|
+
};
|
32
|
+
|
33
|
+
const int nactions_;
|
34
|
+
const action *const actions_;
|
35
|
+
|
36
|
+
do_tighten_action(int nactions,
|
37
|
+
const action *actions,
|
38
|
+
const CoinPresolveAction *next) :
|
39
|
+
CoinPresolveAction(next),
|
40
|
+
nactions_(nactions), actions_(actions) {}
|
41
|
+
|
42
|
+
public:
|
43
|
+
const char *name() const;
|
44
|
+
|
45
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
46
|
+
const CoinPresolveAction *next);
|
47
|
+
|
48
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
49
|
+
|
50
|
+
virtual ~do_tighten_action();
|
51
|
+
|
52
|
+
};
|
53
|
+
#endif
|
54
|
+
|
55
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
/* $Id: CoinPresolveTripleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */
|
2
|
+
// Copyright (C) 2003, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CoinPresolveTripleton_H
|
7
|
+
#define CoinPresolveTripleton_H
|
8
|
+
#define TRIPLETON 11
|
9
|
+
/** We are only going to do this if it does not increase number of elements?.
|
10
|
+
It could be generalized to more than three but it seems unlikely it would
|
11
|
+
help.
|
12
|
+
|
13
|
+
As it is adapted from doubleton icoly is one dropped.
|
14
|
+
*/
|
15
|
+
class tripleton_action : public CoinPresolveAction {
|
16
|
+
public:
|
17
|
+
struct action {
|
18
|
+
int icolx;
|
19
|
+
int icolz;
|
20
|
+
int row;
|
21
|
+
|
22
|
+
int icoly;
|
23
|
+
double cloy;
|
24
|
+
double cupy;
|
25
|
+
double costy;
|
26
|
+
double clox;
|
27
|
+
double cupx;
|
28
|
+
double costx;
|
29
|
+
|
30
|
+
double rlo;
|
31
|
+
double rup;
|
32
|
+
|
33
|
+
double coeffx;
|
34
|
+
double coeffy;
|
35
|
+
double coeffz;
|
36
|
+
|
37
|
+
double *colel;
|
38
|
+
|
39
|
+
int ncolx;
|
40
|
+
int ncoly;
|
41
|
+
};
|
42
|
+
|
43
|
+
const int nactions_;
|
44
|
+
const action *const actions_;
|
45
|
+
|
46
|
+
private:
|
47
|
+
tripleton_action(int nactions,
|
48
|
+
const action *actions,
|
49
|
+
const CoinPresolveAction *next) :
|
50
|
+
CoinPresolveAction(next),
|
51
|
+
nactions_(nactions), actions_(actions)
|
52
|
+
{}
|
53
|
+
|
54
|
+
public:
|
55
|
+
const char *name() const { return ("tripleton_action"); }
|
56
|
+
|
57
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
|
58
|
+
const CoinPresolveAction *next);
|
59
|
+
|
60
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
61
|
+
|
62
|
+
virtual ~tripleton_action();
|
63
|
+
};
|
64
|
+
#endif
|
65
|
+
|
66
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
/* $Id: CoinPresolveUseless.hpp 1566 2012-11-29 19:33:56Z lou $ */
|
2
|
+
// Copyright (C) 2002, International Business Machines
|
3
|
+
// Corporation and others. All Rights Reserved.
|
4
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
5
|
+
|
6
|
+
#ifndef CoinPresolveUseless_H
|
7
|
+
#define CoinPresolveUseless_H
|
8
|
+
#define USELESS 20
|
9
|
+
|
10
|
+
class useless_constraint_action : public CoinPresolveAction {
|
11
|
+
struct action {
|
12
|
+
double rlo;
|
13
|
+
double rup;
|
14
|
+
const int *rowcols;
|
15
|
+
const double *rowels;
|
16
|
+
int row;
|
17
|
+
int ninrow;
|
18
|
+
};
|
19
|
+
|
20
|
+
const int nactions_;
|
21
|
+
const action *const actions_;
|
22
|
+
|
23
|
+
useless_constraint_action(int nactions,
|
24
|
+
const action *actions,
|
25
|
+
const CoinPresolveAction *next);
|
26
|
+
|
27
|
+
public:
|
28
|
+
const char *name() const;
|
29
|
+
|
30
|
+
// These rows are asserted to be useless,
|
31
|
+
// that is, given a solution the row activity
|
32
|
+
// must be in range.
|
33
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob,
|
34
|
+
const int *useless_rows,
|
35
|
+
int nuseless_rows,
|
36
|
+
const CoinPresolveAction *next);
|
37
|
+
|
38
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
39
|
+
|
40
|
+
virtual ~useless_constraint_action();
|
41
|
+
|
42
|
+
};
|
43
|
+
|
44
|
+
/*! \relates useless_constraint_action
|
45
|
+
\brief Scan constraints looking for useless constraints
|
46
|
+
|
47
|
+
A front end to identify useless constraints and hand them to
|
48
|
+
useless_constraint_action::presolve() for processing.
|
49
|
+
|
50
|
+
In a bit more detail, the routine implements a greedy algorithm that
|
51
|
+
identifies a set of necessary constraints. A constraint is necessary if it
|
52
|
+
implies a tighter bound on a variable than the original column bound. These
|
53
|
+
tighter column bounds are then used to calculate row activity and identify
|
54
|
+
constraints that are useless given the presence of the necessary
|
55
|
+
constraints.
|
56
|
+
*/
|
57
|
+
|
58
|
+
const CoinPresolveAction *testRedundant(CoinPresolveMatrix *prob,
|
59
|
+
const CoinPresolveAction *next) ;
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
#endif
|