CouenneCrossConv.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef COUENNECROSSCONV_HPP
00012 #define COUENNECROSSCONV_HPP
00013
00014 #include "BonRegisteredOptions.hpp"
00015
00016 #include "CglConfig.h"
00017 #include "CglCutGenerator.hpp"
00018 #include "OsiRowCut.hpp"
00019 #include "CouenneJournalist.hpp"
00020
00021 namespace Ipopt {
00022 template <class T> class SmartPtr;
00023 class OptionsList;
00024 }
00025
00026 namespace Couenne {
00027
00028 class CouenneProblem;
00029
00031
00032 class AuxRelation {
00033
00034 public:
00035
00036 virtual int findRelations () = 0;
00037
00038 virtual void generateCuts (const OsiSolverInterface &,
00039 OsiCuts &,
00040 const CglTreeInfo = CglTreeInfo ()) const;
00041 protected:
00042
00043 };
00044
00057
00058 class SumLogAuxRel: public AuxRelation {
00059
00060 public:
00061
00062 virtual int findRelations ();
00063
00064 virtual void generateCuts (const OsiSolverInterface &,
00065 OsiCuts &,
00066 const CglTreeInfo = CglTreeInfo ()) const;
00067 };
00068
00069
00081
00082 class MultiProdRel: public AuxRelation {
00083
00084 public:
00085
00086 virtual int findRelations ();
00087
00088 virtual void generateCuts (const OsiSolverInterface &,
00089 OsiCuts &,
00090 const CglTreeInfo = CglTreeInfo ()) const;
00091 };
00092
00104
00105 class BiProdDivRel: public AuxRelation {
00106
00107 public:
00108
00109 virtual int findRelations ();
00110
00111 virtual void generateCuts (const OsiSolverInterface &,
00112 OsiCuts &,
00113 const CglTreeInfo = CglTreeInfo ()) const;
00114 };
00115
00124
00125 class PowRel: public AuxRelation {
00126
00127 public:
00128
00129 virtual int findRelations ();
00130
00131 virtual void generateCuts (const OsiSolverInterface &,
00132 OsiCuts &,
00133 const CglTreeInfo = CglTreeInfo ()) const;
00134 };
00135
00136
00138
00139 class CouenneCrossConv: public CglCutGenerator {
00140
00141 public:
00142
00144 CouenneCrossConv (CouenneProblem *,
00145 JnlstPtr,
00146 const Ipopt::SmartPtr <Ipopt::OptionsList>);
00147
00149 CouenneCrossConv (const CouenneCrossConv &);
00150
00152 virtual ~CouenneCrossConv ();
00153
00155 virtual CouenneCrossConv *clone () const
00156 {return new CouenneCrossConv (*this);}
00157
00159 virtual void generateCuts (const OsiSolverInterface &,
00160 OsiCuts &,
00161 const CglTreeInfo = CglTreeInfo ())
00162 #if CGL_VERSION_MAJOR == 0 && CGL_VERSION_MINOR <= 57
00163 const
00164 #endif
00165 ;
00166
00168 static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions);
00169
00171 virtual void setup ();
00172
00173 protected:
00174
00176 JnlstPtr jnlst_;
00177
00179 CouenneProblem *problem_;
00180 };
00181 }
00182
00183 #endif