# CouenneCrossConv.hpp

Go to the documentation of this file.

    00001 /* $Id: CouenneCrossConv.hpp 945 2013-04-06 20:25:21Z stefan $
    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 "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

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines