CouenneSOSObject.hpp

Go to the documentation of this file.
00001 /* $Id: CouenneSOSObject.hpp 141 2009-06-03 04:19:19Z pbelotti $ */
00002 /*
00003  * Name:    CouenneSOSObject.hpp
00004  * Authors: Pietro Belotti, Lehigh University
00005  * Purpose: SOS Object
00006  *
00007  * (C) Carnegie-Mellon University, 2008.
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 "exprVar.hpp"
00016 
00017 class CouenneSOSObject;
00018 
00019 // TODO: SOS of the form sum x_i \le k with k small. Instead of
00020 // branching on a single variable do a SOS-like branching
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   // Default Constructor 
00046   CouenneSOSBranchingObject () {}
00047 
00048   // Useful constructor
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     //reference_ (ref),
00059     jnlst_ (jnlst),
00060     doFBBT_ (doFBBT),
00061     doConvCuts_ (doConvCuts) {}
00062 
00063   
00064   // Copy constructor 
00065   CouenneSOSBranchingObject (const CouenneSOSBranchingObject &src):
00066     OsiSOSBranchingObject (src),
00067     //reference_ (ref),
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   //exprVar *reference_;
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                     //CouenneProblem *problem,
00108                     //exprVar *ref,
00109                     JnlstPtr jnlst,
00110                     bool doFBBT,
00111                     bool doConvCuts):
00112 
00113     OsiSOS      (solver, nelem, indices, weights, type),
00114     //problem_    (problem),
00115     //reference_  (ref),
00116     jnlst_      (jnlst),
00117     doFBBT_     (doFBBT),
00118     doConvCuts_ (doConvCuts) {}
00119 
00120 
00122   CouenneSOSObject (const CouenneSOSObject &src):
00123     OsiSOS      (src),
00124     //problem_    (src.problem_),
00125     //reference_  (src.reference_),
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   //exprVar *Reference () const
00140   //{return reference_;}
00141 };
00142 
00143 #endif

Generated on Wed Jul 8 03:05:41 2009 for Couenne by  doxygen 1.4.7