CouenneSdpCuts.hpp

Go to the documentation of this file.
00001 /* $Id: CouenneSdpCuts.hpp 945 2013-04-06 20:25:21Z stefan $
00002  *
00003  * Name:    CouenneSdpCuts.hpp
00004  * Authors: Pietro Belotti
00005  *          Andrea Qualizza
00006  * Purpose: wrapper for Couenne to insert sdpcuts
00007  *
00008  * This file is licensed under the Eclipse Public License (EPL)
00009  */
00010 
00011 #ifndef CouenneSdpCuts_hpp
00012 #define CouenneSdpCuts_hpp
00013 
00014 #include "CglConfig.h"
00015 #include "CglCutGenerator.hpp"
00016 #include "BonRegisteredOptions.hpp"
00017 #include "IpOptionsList.hpp"
00018 #include "CouenneJournalist.hpp"
00019 
00020 namespace Couenne {
00021 
00022   class CouenneProblem;
00023   class CouenneExprMatrix;
00024 
00042 
00043   class CouenneSdpCuts: public CglCutGenerator {
00044 
00045   protected:
00046 
00047     CouenneProblem *problem_; 
00048 
00049     bool doNotUse_; 
00050 
00051 
00052 
00053     std::vector <CouenneExprMatrix *> minors_; 
00054 
00055     int numEigVec_; 
00056 
00057     bool onlyNegEV_; 
00058 
00059     bool useSparsity_; 
00060 
00061     bool fillMissingTerms_; 
00062 
00063 
00064 
00065 
00066   public:
00067 
00068     CouenneSdpCuts  (CouenneProblem *, JnlstPtr,
00069                      const Ipopt::SmartPtr <Ipopt::OptionsList>); 
00070 
00071     ~CouenneSdpCuts ();                                           
00072     CouenneSdpCuts  &operator= (const CouenneSdpCuts &);          
00073     CouenneSdpCuts             (const CouenneSdpCuts &);          
00074     virtual CglCutGenerator *clone () const;                      
00075 
00076     const bool doNotUse () const {return doNotUse_;}
00077 
00079     virtual void generateCuts (const OsiSolverInterface &, 
00080                                OsiCuts &, 
00081                                const CglTreeInfo = CglTreeInfo ())
00082 #if CGL_VERSION_MAJOR == 0 && CGL_VERSION_MINOR <= 57
00083     const
00084 #endif
00085     ;
00086 
00088     static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions);
00089 
00090     // -----------------------------------------------------------------------------------------------------
00091 
00092     void updateSol();
00093 
00094   private:
00095 
00096     void genCutSingle (CouenneExprMatrix * const &,
00097                        const OsiSolverInterface &, OsiCuts &, 
00098                        const CglTreeInfo = CglTreeInfo ()) const;
00099 
00100     void compareSparsify (const OsiSolverInterface &si,
00101                           int n, int m, const double *sol, 
00102                           double *z, double *w,FILE *out) const;
00103 
00104 
00105     void sparsify2 (const int n,
00106                     const double *A, double **sparse_v_mat,
00107                     int *card_v_mat, int min_nz, int *evdec_num) const;
00108 
00109     void genSDPcut (const OsiSolverInterface &si,
00110                     OsiCuts &cs, 
00111                     CouenneExprMatrix *XX,
00112                     double *v1, double *v2, 
00113                     int **) const; // contains indices
00114 
00115     void additionalSDPcuts (const OsiSolverInterface &si,
00116                             OsiCuts &cs, 
00117                             CouenneExprMatrix *minor, 
00118                             int np, const double *A, 
00119                             const double *vector, int **) const; // indices of matrix X'
00120 
00121     enum zero_type {POS_DELTA, SELECTED, VALID_DELTA};
00122 
00123     void zero_comp (const int ind_i, const double delta,
00124                     const int np, const int *selected,
00125                     int *loc_selected, 
00126                     int *ploc_card_selected, int *ploc_card_new_selected, 
00127                     double *ploc_lhs, 
00128                     double *locmargin, double *locmat, 
00129                     double *locv, 
00130                     const int evidx, bool wise, 
00131                     int *evdec_num, 
00132                     double *recomp_gap, 
00133                     double *threshold) const;
00134 
00135     void zero_unified (enum zero_type type,
00136                        const int np, const int *order,
00137                        const int * selected,
00138                        const int min_card_new_selected,
00139                        const double min_delta, const int start_point, 
00140                        const int curr_i, 
00141                        int *loc_selected, 
00142                        int *ploc_card_selected, 
00143                        int *ploc_card_new_selected, 
00144                        double *ploc_lhs, 
00145                        double *locmargin, double *locmat, 
00146                        int *pnchanged,
00147                        double *locv, 
00148                        const int evidx, bool wise,double *recomp_gap, double *threshold,
00149                        int *evdec_num) const;
00150 
00151     void add_v_cut(const int np,
00152                    const int *loc_selected, 
00153                    const int loc_card_selected,
00154                    const double *locv,
00155                    const int init_card_selected, int *has_init_vect,
00156                    int *selected, int *pcard_selected,
00157                    int *pnew_selected,
00158                    double **sparse_v_mat,
00159                    int *pcard_v_mat) const;
00160 
00161     void update_sparsify_structures(const int np, 
00162                                     double *v, double* margin, 
00163                                     double *A, double *lhs, const int *zeroed, 
00164                                     int evidx, bool decompose, int *evdec_num) const;
00165 
00166     void sparsify (bool sparsify_new,
00167                    const int evidx, const double eigen_val, 
00168                    const double *v, const int n, 
00169                    const double *sol, double **sparse_v_mat,
00170                    int *card_v_mat,
00171                    int *evdec_num) const;
00172   };
00173 }
00174 
00175 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 13 May 2015 for Couenne by  doxygen 1.6.1