/home/coin/SVN-release/OS-2.2.0/Couenne/src/problem/CouenneSolverInterface.hpp

Go to the documentation of this file.
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

Generated on Thu Aug 5 03:02:57 2010 by  doxygen 1.4.7