00001 // (C) Copyright International Business Machines Corporation 2007 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // Authors : 00006 // Pierre Bonami, International Business Machines Corporation 00007 // 00008 // Date : 04/19/2007 00009 00010 #ifndef BonCbc_H 00011 #define BonCbc_H 00012 00013 //#include "BonBabSetupBase.hpp" 00014 #include "CbcModel.hpp" 00015 00016 namespace Bonmin 00017 { 00018 class BabSetupBase; 00019 class Bab 00020 { 00021 public: 00023 enum MipStatuses {FeasibleOptimal , 00024 ProvenInfeasible , 00025 Feasible , 00026 NoSolutionKnown}; 00028 Bab(); 00030 virtual ~Bab(); 00032 virtual void branchAndBound(BabSetupBase & s); 00033 00035 virtual void operator()(BabSetupBase & s); 00036 00038 virtual void operator()(BabSetupBase * s){ 00039 operator()(*s);} 00040 00043 const double * bestSolution() const 00044 { 00045 return bestSolution_; 00046 } 00048 double bestObj() const 00049 { 00050 return bestObj_; 00051 } 00052 00054 MipStatuses mipStatus() const 00055 { 00056 return mipStatus_; 00057 } 00059 double bestBound(); 00061 int numNodes() const 00062 { 00063 return numNodes_; 00064 } 00066 int iterationCount() 00067 { 00068 return mipIterationCount_; 00069 } 00071 double continuousRelaxation() 00072 { 00073 return continuousRelaxation_; 00074 } 00075 00078 virtual void replaceIntegers(OsiObject ** objects, int numberObjects) 00079 {} 00081 const CbcModel& model() const 00082 { 00083 return model_; 00084 } 00085 00088 CbcModel& model() 00089 { 00090 return model_; 00091 } 00093 void setUsingCouenne(bool v) 00094 { 00095 usingCouenne_ = v; 00096 } 00097 00099 bool getUsingCouenne() 00100 { 00101 return usingCouenne_; 00102 } 00103 protected: 00105 double * bestSolution_; 00106 00108 MipStatuses mipStatus_; 00110 double bestObj_; 00112 double bestBound_; 00114 double continuousRelaxation_; 00116 int numNodes_; 00118 int mipIterationCount_; 00120 CbcModel model_; 00122 CoinMessageHandler * modelHandler_; 00126 OsiObject** objects_; 00128 int nObjects_; 00129 00131 bool usingCouenne_; 00132 }; 00133 } 00134 #endif