relax.h

Go to the documentation of this file.
00001 // Copyright (C) 2006 Ivo Nowak and Stefan Vigerske
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // Author: Stefan Vigerske
00006 
00007 
00008 #ifndef RELAX_H
00009 #define RELAX_H
00010 
00011 #include "standard.h"
00012 #include "param.h"
00013 #include "func.h"
00014 #include "problem.h"
00015 #include "opt.h"
00016 #include "decomp.h"
00017 #include "sampling.h"
00018 
00019 
00033 class Convexify {
00034         private:
00035                 Pointer<Param> param;
00036 
00038                 Sampling sampling;
00039                 vector<vector<dvector> > sample_set;
00040 
00041                 Decomposition decomp;
00042 
00043                 double very_large, cgu_eps;
00044 
00047                 pair<Pointer<UserVector<double> >, Pointer<UserVector<double> > > convexify_a;
00050                 pair<Pointer<UserVector<double> >, Pointer<UserVector<double> > > convexify_b;
00051 
00054                 vector<bool> convexified_by_cgu;
00055 
00060                 void convexify_cgu(SepQcFunc& f, int k);
00067                 pair<double, double> convexify_alpha(SepQcFunc& f, int k, const dvector& low, const dvector& up, Pointer<set<int> > i_quad, Pointer<set<int> > i_nonquadlin);
00068                 pair<double, double> convexify_alpha(SepQcFunc& f, int k, const dvector& low, const dvector& up);
00069                 pair<double, double> convexify_alpha2(SepQcFunc& f, int k, const dvector& low, const dvector& up);
00070         public:
00073                 vector<pair<double, double> > convexify_c;
00074                 
00078                 map<int, double> characteristica1, characteristica2;
00079         
00080                 Convexify(Pointer<Param> param_)
00081                 : param(param_), sampling(param_, "Convexify"), decomp(param)
00082                 { very_large=param->get_d("Relax very large", 1E+99);
00083                         cgu_eps=param->get_d("Relax CGU epsilon", 0.);
00084                 }
00085                 
00091                 void new_sampleset(UserVector<double>& lower, UserVector<double>& upper, SepQcFunc& f);
00092                 
00103                 double convexify(SepQcFunc& f, bool eq, vector<double>& min_eigval, vector<double>& max_eigval, UserVector<double>& lower, UserVector<double>& upper);
00104                 
00109                 void get_decomposed_functions(pair<Pointer<SepQcFunc>, Pointer<SepQcFunc> >& f);
00110 
00111                 void check_convex2(vector<double>& min_eigval, vector<double>& max_eigval, SepQcFunc& f, const vector<vector<dvector> >& sample_set);
00112 
00120                 void check_convexification(MinlpProblem& conv_prob, MinlpProblem& orig_prob, const ivector& ineq_index, int test_pts=20);
00121 };
00122 
00123 #endif

Generated on Tue Oct 21 03:12:10 2008 for LaGO by  doxygen 1.4.7