00001 /* $Id: CouenneSolverInterface.hpp 215 2009-07-08 15:43:38Z pbelotti $ 00002 * 00003 * Name: CouenneSolverInterface.hpp 00004 * Authors: Pietro Belotti, Carnegie Mellon University 00005 * Purpose: OsiSolverInterface with a pointer to a CouenneCutGenerator object 00006 * 00007 * (C) Carnegie-Mellon University, 2007-09. 00008 * This file is licensed under the Common Public License (CPL) 00009 */ 00010 00011 #ifndef COUENNESOLVERINTERFACE_HPP 00012 #define COUENNESOLVERINTERFACE_HPP 00013 00014 #include "CoinFinite.hpp" 00015 00016 class OsiSolverInterface; 00017 class CouenneCutGenerator; 00018 00025 00026 template <class T> class CouenneSolverInterface: public T { 00027 00028 public: 00029 00031 CouenneSolverInterface (CouenneCutGenerator *cg = NULL); 00032 00034 CouenneSolverInterface (const CouenneSolverInterface &src); 00035 00037 ~CouenneSolverInterface (); 00038 00040 virtual OsiSolverInterface * clone (bool copyData = true) const 00041 {return new CouenneSolverInterface (*this);} 00042 00044 virtual bool isProvenPrimalInfeasible () const; 00045 00047 virtual bool isProvenOptimal () const; 00048 00050 CouenneCutGenerator *CutGen () 00051 {return cutgen_;} 00052 00056 void setCutGenPtr (CouenneCutGenerator *cg) { 00057 cutgen_ = cg; 00058 //if (cutgen_ && !(cutgen_ -> enableLpImpliedBounds ())) 00059 //specialOptions_ = specialOptions_ | 262144; 00060 } 00061 00063 virtual void initialSolve (); 00064 00066 virtual void resolve (); 00067 00069 virtual void resolve_nobt () 00070 {T::resolve ();} 00071 00075 00076 virtual void markHotStart(); 00077 00079 virtual void solveFromHotStart(); 00080 00082 virtual void unmarkHotStart(); 00084 00086 virtual int tightenBounds (int lightweight); 00087 00089 //bool &doingResolve () 00090 //{return doingResolve_;} 00091 00093 bool isProvenDualInfeasible () const; 00094 //{return knowDualInfeasible_;} 00095 00096 protected: 00097 00099 virtual int tightenBoundsCLP (int lightweight); 00100 00102 virtual int tightenBoundsCLP_Light (int lightweight); 00103 00107 CouenneCutGenerator *cutgen_; 00108 00110 bool knowInfeasible_; 00111 00113 bool knowOptimal_; 00114 00116 bool knowDualInfeasible_; 00117 00120 //bool doingResolve_; 00121 }; 00122 00123 #include "CouenneSolverInterface.cpp" 00124 #include "CouenneLPtightenBounds.cpp" 00125 #include "CouenneLPtightenBoundsCLP-light.cpp" 00126 #include "CouenneLPtightenBoundsCLP.cpp" 00127 00128 #endif