ruby-cbc 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,73 @@
|
|
|
1
|
+
/* $Id: CoinPresolveDoubleton.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 CoinPresolveDoubleton_H
|
|
7
|
+
#define CoinPresolveDoubleton_H
|
|
8
|
+
|
|
9
|
+
#define DOUBLETON 5
|
|
10
|
+
|
|
11
|
+
/*! \class doubleton_action
|
|
12
|
+
\brief Solve ax+by=c for y and substitute y out of the problem.
|
|
13
|
+
|
|
14
|
+
This moves the bounds information for y onto x, making y free and allowing
|
|
15
|
+
us to substitute it away.
|
|
16
|
+
\verbatim
|
|
17
|
+
a x + b y = c
|
|
18
|
+
l1 <= x <= u1
|
|
19
|
+
l2 <= y <= u2 ==>
|
|
20
|
+
|
|
21
|
+
l2 <= (c - a x) / b <= u2
|
|
22
|
+
b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a
|
|
23
|
+
b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a
|
|
24
|
+
\endverbatim
|
|
25
|
+
*/
|
|
26
|
+
class doubleton_action : public CoinPresolveAction {
|
|
27
|
+
public:
|
|
28
|
+
struct action {
|
|
29
|
+
|
|
30
|
+
double clox;
|
|
31
|
+
double cupx;
|
|
32
|
+
double costx;
|
|
33
|
+
|
|
34
|
+
double costy;
|
|
35
|
+
|
|
36
|
+
double rlo;
|
|
37
|
+
|
|
38
|
+
double coeffx;
|
|
39
|
+
double coeffy;
|
|
40
|
+
|
|
41
|
+
double *colel;
|
|
42
|
+
|
|
43
|
+
int icolx;
|
|
44
|
+
int icoly;
|
|
45
|
+
int row;
|
|
46
|
+
int ncolx;
|
|
47
|
+
int ncoly;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const int nactions_;
|
|
51
|
+
const action *const actions_;
|
|
52
|
+
|
|
53
|
+
private:
|
|
54
|
+
doubleton_action(int nactions,
|
|
55
|
+
const action *actions,
|
|
56
|
+
const CoinPresolveAction *next) :
|
|
57
|
+
CoinPresolveAction(next),
|
|
58
|
+
nactions_(nactions), actions_(actions)
|
|
59
|
+
{}
|
|
60
|
+
|
|
61
|
+
public:
|
|
62
|
+
const char *name() const { return ("doubleton_action"); }
|
|
63
|
+
|
|
64
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
|
|
65
|
+
const CoinPresolveAction *next);
|
|
66
|
+
|
|
67
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
68
|
+
|
|
69
|
+
virtual ~doubleton_action();
|
|
70
|
+
};
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* $Id: CoinPresolveDual.hpp 1510 2011-12-08 23:56:01Z lou $ */
|
|
2
|
+
|
|
3
|
+
// Copyright (C) 2002, International Business Machines
|
|
4
|
+
// Corporation and others. All Rights Reserved.
|
|
5
|
+
// This code is licensed under the terms of the Eclipse Public License (EPL).
|
|
6
|
+
|
|
7
|
+
#ifndef CoinPresolveDual_H
|
|
8
|
+
#define CoinPresolveDual_H
|
|
9
|
+
|
|
10
|
+
/*! \class remove_dual_action
|
|
11
|
+
\brief Attempt to fix variables by bounding reduced costs
|
|
12
|
+
|
|
13
|
+
The reduced cost of x_j is d_j = c_j - y*a_j (1). Assume minimization,
|
|
14
|
+
so that at optimality d_j >= 0 for x_j nonbasic at lower bound, and
|
|
15
|
+
d_j <= 0 for x_j nonbasic at upper bound.
|
|
16
|
+
|
|
17
|
+
For a slack variable s_i, c_(n+i) = 0 and a_(n+i) is a unit vector, hence
|
|
18
|
+
d_(n+i) = -y_i. If s_i has a finite lower bound and no upper bound, we
|
|
19
|
+
must have y_i <= 0 at optimality. Similarly, if s_i has no lower bound and a
|
|
20
|
+
finite upper bound, we must have y_i >= 0.
|
|
21
|
+
|
|
22
|
+
For a singleton variable x_j, d_j = c_j - y_i*a_ij. Given x_j with a
|
|
23
|
+
single finite bound, we can bound d_j greater or less than 0 at
|
|
24
|
+
optimality, and that allows us to calculate an upper or lower bound on y_i
|
|
25
|
+
(depending on the bound on d_j and the sign of a_ij).
|
|
26
|
+
|
|
27
|
+
Now we have bounds on some subset of the y_i, and we can use these to
|
|
28
|
+
calculate upper and lower bounds on the d_j, using bound propagation on
|
|
29
|
+
(1). If we can manage to bound some d_j as strictly positive or strictly
|
|
30
|
+
negative, then at optimality the corresponding variable must be nonbasic
|
|
31
|
+
at its lower or upper bound, respectively. If the required bound is lacking,
|
|
32
|
+
the problem is unbounded.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
class remove_dual_action : public CoinPresolveAction {
|
|
36
|
+
|
|
37
|
+
public:
|
|
38
|
+
|
|
39
|
+
/// Destructor
|
|
40
|
+
~remove_dual_action () ;
|
|
41
|
+
|
|
42
|
+
/// Name
|
|
43
|
+
inline const char *name () const { return ("remove_dual_action") ; }
|
|
44
|
+
|
|
45
|
+
/*! \brief Attempt to fix variables by bounding reduced costs
|
|
46
|
+
|
|
47
|
+
Always scans all variables. Propagates bounds on reduced costs until there's
|
|
48
|
+
no change or until some set of variables can be fixed.
|
|
49
|
+
*/
|
|
50
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
51
|
+
const CoinPresolveAction *next) ;
|
|
52
|
+
|
|
53
|
+
/*! \brief Postsolve
|
|
54
|
+
|
|
55
|
+
In addition to fixing variables (handled by make_fixed_action), we may
|
|
56
|
+
need use our own postsolve to restore constraint bounds.
|
|
57
|
+
*/
|
|
58
|
+
void postsolve (CoinPostsolveMatrix *prob) const ;
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
|
|
62
|
+
/// Postsolve (bound restore) instruction
|
|
63
|
+
struct action {
|
|
64
|
+
double rlo_ ; ///< restored row lower bound
|
|
65
|
+
double rup_ ; ///< restored row upper bound
|
|
66
|
+
int ndx_ ; ///< row index
|
|
67
|
+
} ;
|
|
68
|
+
|
|
69
|
+
/// Constructor with postsolve actions.
|
|
70
|
+
remove_dual_action(int nactions, const action *actions,
|
|
71
|
+
const CoinPresolveAction *next)
|
|
72
|
+
: CoinPresolveAction(next),
|
|
73
|
+
nactions_(nactions),
|
|
74
|
+
actions_(actions)
|
|
75
|
+
{}
|
|
76
|
+
|
|
77
|
+
/// Count of bound restore entries
|
|
78
|
+
const int nactions_ ;
|
|
79
|
+
/// Bound restore entries
|
|
80
|
+
const action *actions_ ;
|
|
81
|
+
|
|
82
|
+
} ;
|
|
83
|
+
#endif
|
|
84
|
+
|
|
85
|
+
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/* $Id: CoinPresolveDupcol.hpp 1817 2015-03-22 16:43:28Z forrest $ */
|
|
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 CoinPresolveDupcol_H
|
|
7
|
+
#define CoinPresolveDupcol_H
|
|
8
|
+
|
|
9
|
+
#include "CoinPresolveMatrix.hpp"
|
|
10
|
+
|
|
11
|
+
/*!
|
|
12
|
+
\file
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#define DUPCOL 10
|
|
16
|
+
|
|
17
|
+
/*! \class dupcol_action
|
|
18
|
+
\brief Detect and remove duplicate columns
|
|
19
|
+
|
|
20
|
+
The general technique is to sum the coefficients a_(*,j) of each column.
|
|
21
|
+
Columns with identical sums are duplicates. The obvious problem is that,
|
|
22
|
+
<i>e.g.</i>, [1 0 1 0] and [0 1 0 1] both add to 2. To minimize the
|
|
23
|
+
chances of false positives, the coefficients of each row are multipled by
|
|
24
|
+
a random number r_i, so that we sum r_i*a_ij.
|
|
25
|
+
|
|
26
|
+
Candidate columns are checked to confirm they are identical. Where the
|
|
27
|
+
columns have the same objective coefficient, the two are combined. If the
|
|
28
|
+
columns have different objective coefficients, complications ensue. In order
|
|
29
|
+
to remove the duplicate, it must be possible to fix the variable at a bound.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
class dupcol_action : public CoinPresolveAction {
|
|
33
|
+
dupcol_action();
|
|
34
|
+
dupcol_action(const dupcol_action& rhs);
|
|
35
|
+
dupcol_action& operator=(const dupcol_action& rhs);
|
|
36
|
+
|
|
37
|
+
struct action {
|
|
38
|
+
double thislo;
|
|
39
|
+
double thisup;
|
|
40
|
+
double lastlo;
|
|
41
|
+
double lastup;
|
|
42
|
+
int ithis;
|
|
43
|
+
int ilast;
|
|
44
|
+
|
|
45
|
+
double *colels;
|
|
46
|
+
int nincol;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const int nactions_;
|
|
50
|
+
// actions_ is owned by the class and must be deleted at destruction
|
|
51
|
+
const action *const actions_;
|
|
52
|
+
|
|
53
|
+
dupcol_action(int nactions, const action *actions,
|
|
54
|
+
const CoinPresolveAction *next) :
|
|
55
|
+
CoinPresolveAction(next),
|
|
56
|
+
nactions_(nactions),
|
|
57
|
+
actions_(actions) {}
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
const char *name() const;
|
|
61
|
+
|
|
62
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
63
|
+
const CoinPresolveAction *next);
|
|
64
|
+
|
|
65
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
66
|
+
|
|
67
|
+
virtual ~dupcol_action();
|
|
68
|
+
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
/*! \class duprow_action
|
|
73
|
+
\brief Detect and remove duplicate rows
|
|
74
|
+
|
|
75
|
+
The algorithm to detect duplicate rows is as outlined for dupcol_action.
|
|
76
|
+
|
|
77
|
+
If the feasible interval for one constraint is strictly contained in the
|
|
78
|
+
other, the tighter (contained) constraint is kept. If the feasible
|
|
79
|
+
intervals are disjoint, the problem is infeasible. If the feasible
|
|
80
|
+
intervals overlap, both constraints are kept.
|
|
81
|
+
|
|
82
|
+
duprow_action is definitely a work in progress; #postsolve is
|
|
83
|
+
unimplemented.
|
|
84
|
+
This doesn't matter as it uses useless_constraint.
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
class duprow_action : public CoinPresolveAction {
|
|
88
|
+
struct action {
|
|
89
|
+
int row;
|
|
90
|
+
double lbound;
|
|
91
|
+
double ubound;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const int nactions_;
|
|
95
|
+
const action *const actions_;
|
|
96
|
+
|
|
97
|
+
duprow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
|
|
98
|
+
duprow_action(int nactions,
|
|
99
|
+
const action *actions,
|
|
100
|
+
const CoinPresolveAction *next) :
|
|
101
|
+
CoinPresolveAction(next),
|
|
102
|
+
nactions_(nactions), actions_(actions) {}
|
|
103
|
+
|
|
104
|
+
public:
|
|
105
|
+
const char *name() const;
|
|
106
|
+
|
|
107
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
108
|
+
const CoinPresolveAction *next);
|
|
109
|
+
|
|
110
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
111
|
+
|
|
112
|
+
//~duprow_action() { delete[]actions_; }
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
class duprow3_action : public CoinPresolveAction {
|
|
116
|
+
struct action {
|
|
117
|
+
int row;
|
|
118
|
+
double lbound;
|
|
119
|
+
double ubound;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const int nactions_;
|
|
123
|
+
const action *const actions_;
|
|
124
|
+
|
|
125
|
+
duprow3_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
|
|
126
|
+
duprow3_action(int nactions,
|
|
127
|
+
const action *actions,
|
|
128
|
+
const CoinPresolveAction *next) :
|
|
129
|
+
CoinPresolveAction(next),
|
|
130
|
+
nactions_(nactions), actions_(actions) {}
|
|
131
|
+
|
|
132
|
+
public:
|
|
133
|
+
const char *name() const;
|
|
134
|
+
|
|
135
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
136
|
+
const CoinPresolveAction *next);
|
|
137
|
+
|
|
138
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
139
|
+
|
|
140
|
+
//~duprow_action() { delete[]actions_; }
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/*! \class gubrow_action
|
|
144
|
+
\brief Detect and remove entries whose sum is known
|
|
145
|
+
|
|
146
|
+
If we have an equality row where all entries same then
|
|
147
|
+
For other rows where all entries for that equality row are same
|
|
148
|
+
then we can delete entries and modify rhs
|
|
149
|
+
gubrow_action is definitely a work in progress; #postsolve is
|
|
150
|
+
unimplemented.
|
|
151
|
+
*/
|
|
152
|
+
|
|
153
|
+
class gubrow_action : public CoinPresolveAction {
|
|
154
|
+
struct action {
|
|
155
|
+
int row;
|
|
156
|
+
double lbound;
|
|
157
|
+
double ubound;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const int nactions_;
|
|
161
|
+
const action *const actions_;
|
|
162
|
+
|
|
163
|
+
gubrow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
|
|
164
|
+
gubrow_action(int nactions,
|
|
165
|
+
const action *actions,
|
|
166
|
+
const CoinPresolveAction *next) :
|
|
167
|
+
CoinPresolveAction(next),
|
|
168
|
+
nactions_(nactions), actions_(actions) {}
|
|
169
|
+
|
|
170
|
+
public:
|
|
171
|
+
const char *name() const;
|
|
172
|
+
|
|
173
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
174
|
+
const CoinPresolveAction *next);
|
|
175
|
+
|
|
176
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
177
|
+
|
|
178
|
+
//~gubrow_action() { delete[]actions_; }
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/*! \class twoxtwo_action
|
|
182
|
+
\brief Detect interesting 2 by 2 blocks
|
|
183
|
+
|
|
184
|
+
If a variable has two entries and for each row there are only
|
|
185
|
+
two entries with same other variable then we can get rid of
|
|
186
|
+
one constraint and modify costs.
|
|
187
|
+
|
|
188
|
+
This is a work in progress - I need more examples
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
class twoxtwo_action : public CoinPresolveAction {
|
|
192
|
+
struct action {
|
|
193
|
+
double lbound_row;
|
|
194
|
+
double ubound_row;
|
|
195
|
+
double lbound_col;
|
|
196
|
+
double ubound_col;
|
|
197
|
+
double cost_col;
|
|
198
|
+
double cost_othercol;
|
|
199
|
+
int row;
|
|
200
|
+
int col;
|
|
201
|
+
int othercol;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const int nactions_;
|
|
205
|
+
const action *const actions_;
|
|
206
|
+
|
|
207
|
+
twoxtwo_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {}
|
|
208
|
+
twoxtwo_action(int nactions,
|
|
209
|
+
const action *actions,
|
|
210
|
+
const CoinPresolveAction *next) :
|
|
211
|
+
CoinPresolveAction(next),
|
|
212
|
+
nactions_(nactions), actions_(actions) {}
|
|
213
|
+
|
|
214
|
+
public:
|
|
215
|
+
const char *name() const;
|
|
216
|
+
|
|
217
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
218
|
+
const CoinPresolveAction *next);
|
|
219
|
+
|
|
220
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
221
|
+
|
|
222
|
+
~twoxtwo_action() { delete [] actions_; }
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
#endif
|
|
226
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* $Id: CoinPresolveEmpty.hpp 1561 2012-11-24 00:32:16Z 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 CoinPresolveEmpty_H
|
|
7
|
+
#define CoinPresolveEmpty_H
|
|
8
|
+
|
|
9
|
+
/*! \file
|
|
10
|
+
|
|
11
|
+
Drop/reinsert empty rows/columns.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const int DROP_ROW = 3;
|
|
15
|
+
const int DROP_COL = 4;
|
|
16
|
+
|
|
17
|
+
/*! \class drop_empty_cols_action
|
|
18
|
+
\brief Physically removes empty columns in presolve, and reinserts
|
|
19
|
+
empty columns in postsolve.
|
|
20
|
+
|
|
21
|
+
Physical removal of rows and columns should be the last activities
|
|
22
|
+
performed during presolve. Do them exactly once. The row-major matrix
|
|
23
|
+
is <b>not</b> maintained by this transform.
|
|
24
|
+
|
|
25
|
+
To physically drop the columns, CoinPrePostsolveMatrix::mcstrt_ and
|
|
26
|
+
CoinPrePostsolveMatrix::hincol_ are compressed, along with column bounds,
|
|
27
|
+
objective, and (if present) the column portions of the solution. This
|
|
28
|
+
renumbers the columns. drop_empty_cols_action::presolve will reconstruct
|
|
29
|
+
CoinPresolveMatrix::clink_.
|
|
30
|
+
|
|
31
|
+
\todo Confirm correct behaviour with solution in presolve.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
class drop_empty_cols_action : public CoinPresolveAction {
|
|
35
|
+
private:
|
|
36
|
+
const int nactions_;
|
|
37
|
+
|
|
38
|
+
struct action {
|
|
39
|
+
double clo;
|
|
40
|
+
double cup;
|
|
41
|
+
double cost;
|
|
42
|
+
double sol;
|
|
43
|
+
int jcol;
|
|
44
|
+
};
|
|
45
|
+
const action *const actions_;
|
|
46
|
+
|
|
47
|
+
drop_empty_cols_action(int nactions,
|
|
48
|
+
const action *const actions,
|
|
49
|
+
const CoinPresolveAction *next) :
|
|
50
|
+
CoinPresolveAction(next),
|
|
51
|
+
nactions_(nactions),
|
|
52
|
+
actions_(actions)
|
|
53
|
+
{}
|
|
54
|
+
|
|
55
|
+
public:
|
|
56
|
+
const char *name() const { return ("drop_empty_cols_action"); }
|
|
57
|
+
|
|
58
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
|
|
59
|
+
const int *ecols,
|
|
60
|
+
int necols,
|
|
61
|
+
const CoinPresolveAction*);
|
|
62
|
+
|
|
63
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
64
|
+
const CoinPresolveAction *next);
|
|
65
|
+
|
|
66
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
67
|
+
|
|
68
|
+
virtual ~drop_empty_cols_action() { deleteAction(actions_,action*); }
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
/*! \class drop_empty_rows_action
|
|
73
|
+
\brief Physically removes empty rows in presolve, and reinserts
|
|
74
|
+
empty rows in postsolve.
|
|
75
|
+
|
|
76
|
+
Physical removal of rows and columns should be the last activities
|
|
77
|
+
performed during presolve. Do them exactly once. The row-major matrix
|
|
78
|
+
is <b>not</b> maintained by this transform.
|
|
79
|
+
|
|
80
|
+
To physically drop the rows, the rows are renumbered, excluding empty
|
|
81
|
+
rows. This involves rewriting CoinPrePostsolveMatrix::hrow_ and compressing
|
|
82
|
+
the row bounds and (if present) the row portions of the solution.
|
|
83
|
+
|
|
84
|
+
\todo Confirm behaviour when a solution is present in presolve.
|
|
85
|
+
*/
|
|
86
|
+
class drop_empty_rows_action : public CoinPresolveAction {
|
|
87
|
+
private:
|
|
88
|
+
struct action {
|
|
89
|
+
double rlo;
|
|
90
|
+
double rup;
|
|
91
|
+
int row;
|
|
92
|
+
int fill_row; // which row was moved into position row to fill it
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const int nactions_;
|
|
96
|
+
const action *const actions_;
|
|
97
|
+
|
|
98
|
+
drop_empty_rows_action(int nactions,
|
|
99
|
+
const action *actions,
|
|
100
|
+
const CoinPresolveAction *next) :
|
|
101
|
+
CoinPresolveAction(next),
|
|
102
|
+
nactions_(nactions), actions_(actions)
|
|
103
|
+
{}
|
|
104
|
+
|
|
105
|
+
public:
|
|
106
|
+
const char *name() const { return ("drop_empty_rows_action"); }
|
|
107
|
+
|
|
108
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
109
|
+
const CoinPresolveAction *next);
|
|
110
|
+
|
|
111
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
112
|
+
|
|
113
|
+
virtual ~drop_empty_rows_action() { deleteAction(actions_,action*); }
|
|
114
|
+
};
|
|
115
|
+
#endif
|
|
116
|
+
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* $Id: CoinPresolveFixed.hpp 1510 2011-12-08 23:56: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 CoinPresolveFixed_H
|
|
7
|
+
#define CoinPresolveFixed_H
|
|
8
|
+
#define FIXED_VARIABLE 1
|
|
9
|
+
|
|
10
|
+
/*! \class remove_fixed_action
|
|
11
|
+
\brief Excise fixed variables from the model.
|
|
12
|
+
|
|
13
|
+
Implements the action of virtually removing one or more fixed variables
|
|
14
|
+
x_j from the model by substituting the value sol_j in each constraint.
|
|
15
|
+
Specifically, for each constraint i where a_ij != 0, rlo_i and rup_i
|
|
16
|
+
are adjusted by -a_ij*sol_j and a_ij is set to 0.
|
|
17
|
+
|
|
18
|
+
There is an implicit assumption that the variable already has the correct
|
|
19
|
+
value. If this isn't true, corrections to row activity may be incorrect.
|
|
20
|
+
If you want to guard against this possibility, consider make_fixed_action.
|
|
21
|
+
|
|
22
|
+
Actual removal of the empty column from the matrix is handled by
|
|
23
|
+
drop_empty_cols_action. Correction of the objective function is done there.
|
|
24
|
+
*/
|
|
25
|
+
class remove_fixed_action : public CoinPresolveAction {
|
|
26
|
+
public:
|
|
27
|
+
/*! \brief Structure to hold information necessary to reintroduce a
|
|
28
|
+
column into the problem representation.
|
|
29
|
+
*/
|
|
30
|
+
struct action {
|
|
31
|
+
int col; ///< column index of variable
|
|
32
|
+
int start; ///< start of coefficients in #colels_ and #colrows_
|
|
33
|
+
double sol; ///< value of variable
|
|
34
|
+
};
|
|
35
|
+
/// Array of row indices for coefficients of excised columns
|
|
36
|
+
int *colrows_;
|
|
37
|
+
/// Array of coefficients of excised columns
|
|
38
|
+
double *colels_;
|
|
39
|
+
/// Number of entries in #actions_
|
|
40
|
+
int nactions_;
|
|
41
|
+
/// Vector specifying variable(s) affected by this object
|
|
42
|
+
action *actions_;
|
|
43
|
+
|
|
44
|
+
private:
|
|
45
|
+
/*! \brief Constructor */
|
|
46
|
+
remove_fixed_action(int nactions,
|
|
47
|
+
action *actions,
|
|
48
|
+
double * colels,
|
|
49
|
+
int * colrows,
|
|
50
|
+
const CoinPresolveAction *next);
|
|
51
|
+
|
|
52
|
+
public:
|
|
53
|
+
/// Returns string "remove_fixed_action".
|
|
54
|
+
const char *name() const;
|
|
55
|
+
|
|
56
|
+
/*! \brief Excise the specified columns.
|
|
57
|
+
|
|
58
|
+
Remove the specified columns (\p nfcols, \p fcols) from the problem
|
|
59
|
+
representation (\p prob), leaving the appropriate postsolve object
|
|
60
|
+
linked as the head of the list of postsolve objects (currently headed
|
|
61
|
+
by \p next).
|
|
62
|
+
*/
|
|
63
|
+
static const remove_fixed_action *presolve(CoinPresolveMatrix *prob,
|
|
64
|
+
int *fcols,
|
|
65
|
+
int nfcols,
|
|
66
|
+
const CoinPresolveAction *next);
|
|
67
|
+
|
|
68
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
69
|
+
|
|
70
|
+
/// Destructor
|
|
71
|
+
virtual ~remove_fixed_action();
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/*! \relates remove_fixed_action
|
|
76
|
+
\brief Scan the problem for fixed columns and remove them.
|
|
77
|
+
|
|
78
|
+
A front end to collect a list of columns with equal bounds and hand them to
|
|
79
|
+
remove_fixed_action::presolve() for processing.
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
const CoinPresolveAction *remove_fixed(CoinPresolveMatrix *prob,
|
|
83
|
+
const CoinPresolveAction *next);
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/*! \class make_fixed_action
|
|
87
|
+
\brief Fix a variable at a specified bound.
|
|
88
|
+
|
|
89
|
+
Implements the action of fixing a variable by forcing both bounds to the same
|
|
90
|
+
value and forcing the value of the variable to match.
|
|
91
|
+
|
|
92
|
+
If the bounds are already equal, and the value of the variable is already
|
|
93
|
+
correct, consider remove_fixed_action.
|
|
94
|
+
*/
|
|
95
|
+
class make_fixed_action : public CoinPresolveAction {
|
|
96
|
+
|
|
97
|
+
/// Structure to preserve the bound overwritten when fixing a variable
|
|
98
|
+
struct action {
|
|
99
|
+
double bound; ///< Value of bound overwritten to fix variable.
|
|
100
|
+
int col ; ///< column index of variable
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/// Number of preserved bounds
|
|
104
|
+
int nactions_;
|
|
105
|
+
/// Vector of preserved bounds, one for each variable fixed in this object
|
|
106
|
+
const action *actions_;
|
|
107
|
+
|
|
108
|
+
/*! \brief True to fix at lower bound, false to fix at upper bound.
|
|
109
|
+
|
|
110
|
+
Note that this applies to all variables fixed in this object.
|
|
111
|
+
*/
|
|
112
|
+
const bool fix_to_lower_;
|
|
113
|
+
|
|
114
|
+
/*! \brief The postsolve object with the information required to repopulate
|
|
115
|
+
the fixed columns.
|
|
116
|
+
*/
|
|
117
|
+
const remove_fixed_action *faction_;
|
|
118
|
+
|
|
119
|
+
/*! \brief Constructor */
|
|
120
|
+
make_fixed_action(int nactions, const action *actions, bool fix_to_lower,
|
|
121
|
+
const remove_fixed_action *faction,
|
|
122
|
+
const CoinPresolveAction *next)
|
|
123
|
+
: CoinPresolveAction(next),
|
|
124
|
+
nactions_(nactions), actions_(actions),
|
|
125
|
+
fix_to_lower_(fix_to_lower),
|
|
126
|
+
faction_(faction)
|
|
127
|
+
{}
|
|
128
|
+
|
|
129
|
+
public:
|
|
130
|
+
/// Returns string "make_fixed_action".
|
|
131
|
+
const char *name() const;
|
|
132
|
+
|
|
133
|
+
/*! \brief Perform actions to fix variables and return postsolve object
|
|
134
|
+
|
|
135
|
+
For each specified variable (\p nfcols, \p fcols), fix the variable to
|
|
136
|
+
the specified bound (\p fix_to_lower) by setting the variable's bounds
|
|
137
|
+
to be equal in \p prob. Create a postsolve object, link it at the head of
|
|
138
|
+
the list of postsolve objects (\p next), and return the object.
|
|
139
|
+
*/
|
|
140
|
+
static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
|
|
141
|
+
int *fcols,
|
|
142
|
+
int nfcols,
|
|
143
|
+
bool fix_to_lower,
|
|
144
|
+
const CoinPresolveAction *next);
|
|
145
|
+
|
|
146
|
+
/*! \brief Postsolve (unfix variables)
|
|
147
|
+
|
|
148
|
+
Back out the variables fixed by the presolve side of this object.
|
|
149
|
+
*/
|
|
150
|
+
void postsolve(CoinPostsolveMatrix *prob) const;
|
|
151
|
+
|
|
152
|
+
/// Destructor
|
|
153
|
+
virtual ~make_fixed_action() {
|
|
154
|
+
deleteAction(actions_,action*);
|
|
155
|
+
delete faction_;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/*! \relates make_fixed_action
|
|
160
|
+
\brief Scan variables and fix any with equal bounds
|
|
161
|
+
|
|
162
|
+
A front end to collect a list of columns with equal bounds and hand them to
|
|
163
|
+
make_fixed_action::presolve() for processing.
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
const CoinPresolveAction *make_fixed(CoinPresolveMatrix *prob,
|
|
167
|
+
const CoinPresolveAction *next) ;
|
|
168
|
+
|
|
169
|
+
/*! \brief Transfer costs from singleton variables
|
|
170
|
+
\relates make_fixed_action
|
|
171
|
+
|
|
172
|
+
Transfers costs from singleton variables in equalities onto the other
|
|
173
|
+
variables. Will also transfer costs from one integer variable to other
|
|
174
|
+
integer variables with zero cost if there's a net gain in integer variables
|
|
175
|
+
with non-zero cost.
|
|
176
|
+
|
|
177
|
+
The relation to make_fixed_action is tenuous, but this transform should be
|
|
178
|
+
attempted before the initial round of variable fixing.
|
|
179
|
+
*/
|
|
180
|
+
void transferCosts(CoinPresolveMatrix * prob);
|
|
181
|
+
#endif
|