00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "BonCbcLpStrategy.hpp"
00011
00012
00013
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
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
00106 void
00107 CbcOaStrategy::setupOther(CbcModel & model)
00108 {
00109 model.setNumberStrong(numberStrong_);
00110 model.setNumberBeforeTrust(minReliability_);
00111
00112 model.setIntegerTolerance(intTol_);
00113
00114
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 }