CouenneCrossConv.hpp

Go to the documentation of this file.
00001 /* $Id: CouenneCrossConv.hpp 605 2011-06-06 12:08:33Z pbelotti $
00002  *
00003  * Name:    CouenneCrossConv.hpp
00004  * Author:  Pietro Belotti
00005  * Purpose: Convexification cuts on redundant relationships between auxiliaries
00006  *
00007  * (C) Pietro Belotti, 2010-11.
00008  * This file is licensed under the Eclipse Public License (EPL)
00009  */
00010 
00011 #ifndef COUENNECROSSCONV_HPP
00012 #define COUENNECROSSCONV_HPP
00013 
00014 #include "BonRegisteredOptions.hpp"
00015 
00016 #include "CglCutGenerator.hpp"
00017 #include "OsiRowCut.hpp"
00018 #include "CouenneJournalist.hpp"
00019 
00020 namespace Ipopt {
00021   template <class T> class SmartPtr;
00022   class OptionsList;
00023 }
00024 
00025 namespace Couenne {
00026 
00027   class CouenneProblem;
00028 
00030 
00031   class AuxRelation {
00032 
00033   public:
00034 
00035     virtual int findRelations () = 0;
00036 
00037     virtual void generateCuts (const OsiSolverInterface &, 
00038                                OsiCuts &, 
00039                                const CglTreeInfo = CglTreeInfo ()) const;
00040   protected:
00041 
00042   };
00043   
00056 
00057   class SumLogAuxRel: public AuxRelation {
00058 
00059   public:
00060 
00061     virtual int findRelations ();
00062 
00063     virtual void generateCuts (const OsiSolverInterface &, 
00064                                OsiCuts &, 
00065                                const CglTreeInfo = CglTreeInfo ()) const;
00066   };
00067 
00068 
00080 
00081   class MultiProdRel: public AuxRelation {
00082 
00083   public:
00084 
00085     virtual int findRelations ();
00086 
00087     virtual void generateCuts (const OsiSolverInterface &, 
00088                                OsiCuts &, 
00089                                const CglTreeInfo = CglTreeInfo ()) const;
00090   };
00091 
00103 
00104   class BiProdDivRel: public AuxRelation {
00105 
00106   public:
00107 
00108     virtual int findRelations ();
00109 
00110     virtual void generateCuts (const OsiSolverInterface &, 
00111                                OsiCuts &, 
00112                                const CglTreeInfo = CglTreeInfo ()) const;
00113   };
00114 
00123 
00124   class PowRel: public AuxRelation {
00125 
00126   public:
00127 
00128     virtual int findRelations ();
00129 
00130     virtual void generateCuts (const OsiSolverInterface &, 
00131                                OsiCuts &, 
00132                                const CglTreeInfo = CglTreeInfo ()) const;
00133   };
00134 
00135 
00137 
00138   class CouenneCrossConv: public CglCutGenerator {
00139 
00140   public:
00141 
00143     CouenneCrossConv (CouenneProblem *,
00144                       JnlstPtr,
00145                       const Ipopt::SmartPtr <Ipopt::OptionsList>);
00146 
00148     CouenneCrossConv  (const CouenneCrossConv &);
00149 
00151     virtual ~CouenneCrossConv ();
00152 
00154     virtual CouenneCrossConv *clone () const
00155     {return new CouenneCrossConv (*this);}
00156 
00158     virtual void generateCuts (const OsiSolverInterface &, 
00159                        OsiCuts &, 
00160                        const CglTreeInfo = CglTreeInfo ()) const;
00161 
00163     static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions);
00164 
00166     virtual void setup ();
00167 
00168   protected:
00169 
00171     JnlstPtr jnlst_;
00172 
00174     CouenneProblem *problem_;
00175   };
00176 }
00177 
00178 #endif

Generated on Mon Aug 8 03:06:40 2011 for Couenne by  doxygen 1.4.7