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 "exprVar.hpp"
00016
00017 class CouenneSOSObject;
00018
00019
00020
00021
00022 class CouenneSOSBranchingObject: public OsiSOSBranchingObject {
00023
00024 protected:
00025
00027 CouenneProblem *problem_;
00028
00032 exprVar *reference_;
00033
00035 JnlstPtr jnlst_;
00036
00038 bool doFBBT_;
00039
00041 bool doConvCuts_;
00042
00043 public:
00044
00045
00046 CouenneSOSBranchingObject () {}
00047
00048
00049 CouenneSOSBranchingObject (OsiSolverInterface *solver,
00050 const OsiSOS *originalObject,
00051 int way,
00052 double separator,
00053 JnlstPtr jnlst,
00054 bool doFBBT,
00055 bool doConvCuts):
00056
00057 OsiSOSBranchingObject (solver, originalObject, way, separator),
00058
00059 jnlst_ (jnlst),
00060 doFBBT_ (doFBBT),
00061 doConvCuts_ (doConvCuts) {}
00062
00063
00064
00065 CouenneSOSBranchingObject (const CouenneSOSBranchingObject &src):
00066 OsiSOSBranchingObject (src),
00067
00068 jnlst_ (src.jnlst_),
00069 doFBBT_ (src.doFBBT_),
00070 doConvCuts_ (src.doConvCuts_) {}
00071
00072
00074 virtual OsiBranchingObject * clone() const
00075 {return new CouenneSOSBranchingObject (*this);}
00076
00078 virtual double branch (OsiSolverInterface * solver);
00079 };
00080
00081
00085
00086 class CouenneSOSObject: public OsiSOS {
00087
00088 protected:
00089
00093
00094
00096 JnlstPtr jnlst_;
00097
00099 bool doFBBT_;
00100
00102 bool doConvCuts_;
00103
00104 public:
00105
00106 CouenneSOSObject (OsiSolverInterface *solver, int nelem, int *indices, double *weights, int type,
00107
00108
00109 JnlstPtr jnlst,
00110 bool doFBBT,
00111 bool doConvCuts):
00112
00113 OsiSOS (solver, nelem, indices, weights, type),
00114
00115
00116 jnlst_ (jnlst),
00117 doFBBT_ (doFBBT),
00118 doConvCuts_ (doConvCuts) {}
00119
00120
00122 CouenneSOSObject (const CouenneSOSObject &src):
00123 OsiSOS (src),
00124
00125
00126 jnlst_ (src.jnlst_),
00127 doFBBT_ (src.doFBBT_),
00128 doConvCuts_ (src.doConvCuts_) {}
00129
00131 virtual OsiObject * clone () const
00132 {return new CouenneSOSObject (*this);}
00133
00135 OsiBranchingObject *createBranch (OsiSolverInterface* si,
00136 const OsiBranchingInformation* info, int way) const;
00137
00139
00140
00141 };
00142
00143 #endif