00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef COUENNEBRANCHINGOBJECT_HPP
00013 #define COUENNEBRANCHINGOBJECT_HPP
00014
00015 #include "CoinFinite.hpp"
00016 #include "exprAux.hpp"
00017 #include "CouenneJournalist.hpp"
00018 #include "OsiBranchingObject.hpp"
00019
00020 #define COUENNE_CROP 1
00021 #define COUENNE_LCROP (1e2*COUENNE_CROP)
00022
00023 #define COUENNE_LARGE_INTERVAL 1e4
00024 #define COUENNE_NEAR_BOUND 1e-2
00025
00026
00032 class CouenneBranchingObject: public OsiTwoWayBranchingObject {
00033
00034 public:
00035
00037 CouenneBranchingObject (OsiSolverInterface *solver,
00038 const OsiObject *originalObject,
00039 JnlstPtr jnlst,
00040 expression *var,
00041 int way,
00042 CouNumber brpoint,
00043 bool doFBBT,
00044 bool doConvCuts);
00045
00047 CouenneBranchingObject (const CouenneBranchingObject &src):
00048
00049 OsiTwoWayBranchingObject (src),
00050 variable_ (src.variable_),
00051 jnlst_ (src.jnlst_),
00052 doFBBT_ (src.doFBBT_),
00053 doConvCuts_ (src.doConvCuts_),
00054 downEstimate_ (src.downEstimate_),
00055 upEstimate_ (src.upEstimate_),
00056 simulate_ (src.simulate_) {}
00057
00059 virtual OsiBranchingObject * clone () const
00060 {return new CouenneBranchingObject (*this);}
00061
00067 virtual double branch (OsiSolverInterface * solver = NULL);
00068
00070 virtual bool boundBranch () const
00071 {return !doConvCuts_;}
00072
00074 void setSimulate (bool s)
00075 {simulate_ = s;}
00076
00078 expression *variable ()
00079 {return variable_;}
00080
00081 protected:
00082
00087 expression *variable_;
00088
00090 JnlstPtr jnlst_;
00091
00093 bool doFBBT_;
00094
00096 bool doConvCuts_;
00097
00099 double downEstimate_;
00100
00102 double upEstimate_;
00103
00105 bool simulate_;
00106 };
00107
00108 #endif