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 "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