/home/coin/SVN-release/OS-1.1.1/Bonmin/src/Algorithms/OaGenerators/BonCbcLpStrategy.cpp

Go to the documentation of this file.
00001 // (C) Copyright Carnegie Mellon University 2006
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // Authors :
00006 // Pierre Bonami, Carnegie Mellon University,
00007 //
00008 // Date : 03/15/2006
00009 
00010 #include "BonCbcLpStrategy.hpp"
00011 
00012 
00013 // Cut generators
00014 #include "CglGomory.hpp"
00015 #include "CglProbing.hpp"
00016 #include "CglKnapsackCover.hpp"
00017 #include "CglOddHole.hpp"
00018 #include "CglClique.hpp"
00019 #include "CglFlowCover.hpp"
00020 #include "CglMixedIntegerRounding.hpp"
00021 #include "CglTwomir.hpp"
00022 #include "CglPreProcess.hpp"
00023 
00024 
00025 // Node selection
00026 #include "CbcCompareActual.hpp"
00027 
00028 #include "CbcBranchActual.hpp"
00029 
00030 
00031 namespace Bonmin
00032 {
00033   CbcOaStrategy::CbcOaStrategy(int migFreq,
00034       int probFreq,
00035       int mirFreq,
00036       int coverFreq,
00037       int minReliability,
00038       int numberStrong,
00039       int nodeSelection,
00040       double intTol,
00041       int logLevel
00042                               ):
00043       CbcStrategy(),
00044       migFreq_(migFreq),
00045       probFreq_(probFreq),
00046       mirFreq_(mirFreq),
00047       coverFreq_(coverFreq),
00048       minReliability_(minReliability),
00049       numberStrong_(numberStrong),
00050       nodeSelection_(nodeSelection),
00051       intTol_(intTol),
00052       logLevel_(logLevel)
00053   {
00054     setPreProcessState(0);
00055   }
00056 
00057   CbcStrategy *
00058   CbcOaStrategy::clone () const
00059   {
00060     return new CbcOaStrategy(migFreq_, probFreq_,  mirFreq_, coverFreq_, minReliability_,
00061         numberStrong_, nodeSelection_, intTol_,
00062         logLevel_);
00063   }
00064 
00065   void
00066   CbcOaStrategy::setupCutGenerators(CbcModel & model)
00067   {
00068 
00069     CglGomory miGGen;
00070 
00071     CglProbing probGen;
00072     probGen.setUsingObjective(true);
00073     probGen.setMaxPass(3);
00074     probGen.setMaxProbe(100);
00075     probGen.setMaxLook(50);
00076 
00077     CglKnapsackCover knapsackGen;
00078     CglMixedIntegerRounding mixedGen;
00079 
00080     if (migFreq_ != 0)
00081       model.addCutGenerator(&miGGen,migFreq_,"GMI");
00082     if (probFreq_ != 0)
00083       model.addCutGenerator(&probGen,probFreq_,"Probing");
00084     if (coverFreq_ != 0)
00085       model.addCutGenerator(&knapsackGen,coverFreq_,"covers");
00086     if (mirFreq_ != 0)
00087       model.addCutGenerator(&mixedGen,mirFreq_,"MIR");
00088 
00089   }
00090 
00092   void
00093   CbcOaStrategy::setupHeuristics(CbcModel & model)
00094 {}
00095 
00097   void
00098   CbcOaStrategy::setupPrinting(CbcModel & model,int modelLogLevel)
00099   {
00100     model.messageHandler()->setLogLevel(logLevel_);
00101     model.solver()->messageHandler()->setLogLevel(0);
00102     model.setPrintFrequency(100);
00103   }
00104 
00105 // Other stuff e.g. strong branching
00106   void
00107   CbcOaStrategy::setupOther(CbcModel & model)
00108   {
00109     model.setNumberStrong(numberStrong_);
00110     model.setNumberBeforeTrust(minReliability_);
00111 
00112     model.setIntegerTolerance(intTol_);
00113 
00114     // Definition of node selection strategy
00115     CbcCompareObjective compare0;
00116     CbcCompareDepth compare1;
00117     CbcCompareDefault compare2;
00118     if (nodeSelection_==0) {
00119       model.setNodeComparison(compare0);
00120     }
00121     else if (nodeSelection_==1) {
00122       model.setNodeComparison(compare1);
00123     }
00124     else if (nodeSelection_==2) {
00125       compare2.setWeight(0.0);
00126       model.setNodeComparison(compare2);
00127     }
00128     else if (nodeSelection_==3) {
00129       model.setNodeComparison(compare2);
00130     }
00131 
00132   }
00133 
00134 }

Generated on Tue Sep 30 03:01:23 2008 by  doxygen 1.4.7