00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef COUENNESOSOBJECT_HPP
00012 #define COUENNESOSOBJECT_HPP
00013
00014 #include "OsiBranchingObject.hpp"
00015 #include "CouenneJournalist.hpp"
00016
00017 class CouenneProblem;
00018 class CouenneSOSObject;
00019 class exprVar;
00020
00021
00022
00023
00024
00025 class CouenneSOSBranchingObject: public OsiSOSBranchingObject {
00026
00027 protected:
00028
00030 CouenneProblem *problem_;
00031
00035 exprVar *reference_;
00036
00038 JnlstPtr jnlst_;
00039
00041 bool doFBBT_;
00042
00044 bool doConvCuts_;
00045
00046 public:
00047
00048
00049 CouenneSOSBranchingObject () {}
00050
00051
00052 CouenneSOSBranchingObject (CouenneProblem *p,
00053 exprVar *ref,
00054 OsiSolverInterface *solver,
00055 const OsiSOS *originalObject,
00056 int way,
00057 double separator,
00058 JnlstPtr jnlst,
00059 bool doFBBT,
00060 bool doConvCuts):
00061
00062 OsiSOSBranchingObject (solver, originalObject, way, separator),
00063 problem_ (p),
00064 reference_ (ref),
00065 jnlst_ (jnlst),
00066 doFBBT_ (doFBBT),
00067 doConvCuts_ (doConvCuts) {}
00068
00069
00070
00071 CouenneSOSBranchingObject (const CouenneSOSBranchingObject &src):
00072 OsiSOSBranchingObject (src),
00073 problem_ (src.problem_),
00074 reference_ (src.reference_),
00075 jnlst_ (src.jnlst_),
00076 doFBBT_ (src.doFBBT_),
00077 doConvCuts_ (src.doConvCuts_) {}
00078
00079
00081 virtual OsiBranchingObject * clone() const
00082 {return new CouenneSOSBranchingObject (*this);}
00083
00085 virtual double branch (OsiSolverInterface * solver);
00086 };
00087
00088
00092
00093 class CouenneSOSObject: public OsiSOS {
00094
00095 protected:
00096
00098 CouenneProblem *problem_;
00099
00103 exprVar *reference_;
00104
00106 JnlstPtr jnlst_;
00107
00109 bool doFBBT_;
00110
00112 bool doConvCuts_;
00113
00114 public:
00115
00116 CouenneSOSObject (OsiSolverInterface *solver, int nelem, int *indices, double *weights, int type,
00117 CouenneProblem *problem,
00118 exprVar *ref,
00119 JnlstPtr jnlst,
00120 bool doFBBT,
00121 bool doConvCuts):
00122
00123 OsiSOS (solver, nelem, indices, weights, type),
00124 problem_ (problem),
00125 reference_ (ref),
00126 jnlst_ (jnlst),
00127 doFBBT_ (doFBBT),
00128 doConvCuts_ (doConvCuts) {}
00129
00130
00132 CouenneSOSObject (const CouenneSOSObject &src):
00133 OsiSOS (src),
00134 problem_ (src.problem_),
00135 reference_ (src.reference_),
00136 jnlst_ (src.jnlst_),
00137 doFBBT_ (src.doFBBT_),
00138 doConvCuts_ (src.doConvCuts_) {}
00139
00141 virtual OsiObject * clone () const
00142 {return new CouenneSOSObject (*this);}
00143
00145 OsiBranchingObject *createBranch (OsiSolverInterface* si,
00146 const OsiBranchingInformation* info, int way) const;
00147
00149
00150
00151 };
00152
00153 #endif