/home/coin/SVN-release/OS-2.1.1/Couenne/src/branch/CouenneSOSObject.hpp

Go to the documentation of this file.
00001 /* $Id: CouenneSOSObject.hpp 215 2009-07-08 15:43:38Z pbelotti $
00002  *
00003  * Name:    CouenneSOSObject.hpp
00004  * Authors: Pietro Belotti, Lehigh University
00005  * Purpose: SOS Object
00006  *
00007  * (C) Carnegie-Mellon University, 2008-09.
00008  * This file is licensed under the Common Public License (CPL)
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 // TODO: SOS of the form sum x_i \le k with k small. Instead of
00023 // branching on a single variable do a SOS-like branching
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   // Default Constructor 
00049   CouenneSOSBranchingObject () {}
00050 
00051   // Useful constructor
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   // Copy constructor 
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   //exprVar *Reference () const
00150   //{return reference_;}
00151 };
00152 
00153 #endif

Generated on Mon May 3 03:05:18 2010 by  doxygen 1.4.7