00001 /* $Id: CouenneSolverInterface.hpp 154 2009-06-16 18:52:53Z 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-08. 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 #include "OsiClpSolverInterface.hpp" 00016 #include "CouenneCutGenerator.hpp" 00017 00018 class ClpSimplex; 00019 00026 00027 class CouenneSolverInterface: public OsiClpSolverInterface { 00028 00029 public: 00030 00032 CouenneSolverInterface (CouenneCutGenerator *cg = NULL); 00033 00035 CouenneSolverInterface (const CouenneSolverInterface &src); 00036 00038 ~CouenneSolverInterface (); 00039 00041 virtual OsiSolverInterface * clone (bool copyData = true) const 00042 {return new CouenneSolverInterface (*this);} 00043 00045 virtual bool isProvenPrimalInfeasible () const; 00046 00048 virtual bool isProvenOptimal () const; 00049 00051 CouenneCutGenerator *CutGen () 00052 {return cutgen_;} 00053 00057 void setCutGenPtr (CouenneCutGenerator *cg) { 00058 cutgen_ = cg; 00059 if (cutgen_ && !(cutgen_ -> enableLpImpliedBounds ())) 00060 specialOptions_ = specialOptions_ | 262144; 00061 } 00062 00064 virtual void initialSolve (); 00065 00067 virtual void resolve (); 00068 00070 virtual void resolve_nobt () 00071 {OsiClpSolverInterface::resolve ();} 00072 00076 00077 virtual void markHotStart(); 00078 00080 virtual void solveFromHotStart(); 00081 00083 virtual void unmarkHotStart(); 00085 00087 virtual int tightenBounds (int lightweight); 00088 00090 virtual int tightenBoundsCLP (int lightweight); 00091 00093 virtual int tightenBoundsCLP_Light (int lightweight); 00094 00096 ClpSimplex *continuousModel () 00097 {return continuousModel_;} 00098 00100 bool &doingResolve () 00101 {return doingResolve_;} 00102 00104 bool isProvenDualInfeasible () const; 00105 //{return knowDualInfeasible_;} 00106 00107 protected: 00108 00112 CouenneCutGenerator *cutgen_; 00113 00115 bool knowInfeasible_; 00116 00118 bool knowOptimal_; 00119 00121 bool knowDualInfeasible_; 00122 00125 bool doingResolve_; 00126 }; 00127 00128 #endif