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 namespace Couenne {
00018
00019 class CouenneProblem;
00020 class CouenneSOSObject;
00021 class exprVar;
00022
00023
00024
00025
00026
00027 class CouenneSOSBranchingObject: public OsiSOSBranchingObject {
00028
00029 protected:
00030
00032 CouenneProblem *problem_;
00033
00037 exprVar *reference_;
00038
00040 JnlstPtr jnlst_;
00041
00043 bool doFBBT_;
00044
00046 bool doConvCuts_;
00047
00048 public:
00049
00050
00051 CouenneSOSBranchingObject () {}
00052
00053
00054 CouenneSOSBranchingObject (CouenneProblem *p,
00055 exprVar *ref,
00056 OsiSolverInterface *solver,
00057 const OsiSOS *originalObject,
00058 int way,
00059 double separator,
00060 JnlstPtr jnlst,
00061 bool doFBBT,
00062 bool doConvCuts):
00063
00064 OsiSOSBranchingObject (solver, originalObject, way, separator),
00065 problem_ (p),
00066 reference_ (ref),
00067 jnlst_ (jnlst),
00068 doFBBT_ (doFBBT),
00069 doConvCuts_ (doConvCuts) {}
00070
00071
00072
00073 CouenneSOSBranchingObject (const CouenneSOSBranchingObject &src):
00074 OsiSOSBranchingObject (src),
00075 problem_ (src.problem_),
00076 reference_ (src.reference_),
00077 jnlst_ (src.jnlst_),
00078 doFBBT_ (src.doFBBT_),
00079 doConvCuts_ (src.doConvCuts_) {}
00080
00081
00083 virtual OsiBranchingObject * clone() const
00084 {return new CouenneSOSBranchingObject (*this);}
00085
00087 virtual double branch (OsiSolverInterface * solver);
00088 };
00089
00090
00094
00095 class CouenneSOSObject: public OsiSOS {
00096
00097 protected:
00098
00100 CouenneProblem *problem_;
00101
00105 exprVar *reference_;
00106
00108 JnlstPtr jnlst_;
00109
00111 bool doFBBT_;
00112
00114 bool doConvCuts_;
00115
00116 public:
00117
00118 CouenneSOSObject (OsiSolverInterface *solver, int nelem, int *indices, double *weights, int type,
00119 CouenneProblem *problem,
00120 exprVar *ref,
00121 JnlstPtr jnlst,
00122 bool doFBBT,
00123 bool doConvCuts):
00124
00125 OsiSOS (solver, nelem, indices, weights, type),
00126 problem_ (problem),
00127 reference_ (ref),
00128 jnlst_ (jnlst),
00129 doFBBT_ (doFBBT),
00130 doConvCuts_ (doConvCuts) {}
00131
00132
00134 CouenneSOSObject (const CouenneSOSObject &src):
00135 OsiSOS (src),
00136 problem_ (src.problem_),
00137 reference_ (src.reference_),
00138 jnlst_ (src.jnlst_),
00139 doFBBT_ (src.doFBBT_),
00140 doConvCuts_ (src.doConvCuts_) {}
00141
00143 virtual OsiObject * clone () const
00144 {return new CouenneSOSObject (*this);}
00145
00147 OsiBranchingObject *createBranch (OsiSolverInterface* si,
00148 const OsiBranchingInformation* info, int way) const;
00149
00151
00152
00153 };
00154
00155 }
00156
00157 #endif