00001
00002
00003
00004
00005
00006
00007 #ifndef QUADUEST_H
00008 #define QUADUEST_H
00009
00010 #include "standard.h"
00011 #include "func.h"
00012 #include "sampling.h"
00013 #include "decomp.h"
00014 #include "MINLPData.h"
00015 #include "polynom.h"
00016
00059 class QuadraticUnderestimator {
00060 private:
00061 Pointer<Param> param;
00062
00063 double eps;
00064 int iter_max;
00065 double time_max;
00066
00067 Sampling sampling;
00068 Sampling_Vertices sampling_vertices;
00069 Sampling_Minimizer sampling_minimizer;
00070 int sampling_initial;
00071
00072 multimap<double, dvector> sample_set;
00073 multimap<double, dvector>::iterator enforce_tightness;
00074
00075 list<MultiIndex> multiindices;
00076 list<Monom> monoms;
00077
00078 Decomposition decomp;
00079
00080 void new_multiindices(const SparsityInfo& si, int n);
00081
00082 void new_sampleset(const dvector& lower, const dvector& upper);
00083 void check_for_nan(const Func& f);
00084 multimap<double, dvector>::iterator add_point_to_sampleset(const dvector& point);
00085 multimap<double, dvector>::iterator add_minimizer_to_sample(Pointer<Func> f, const dvector& lower, const dvector& upper, dvector& start);
00086
00089 void quadratic_underestimator(SparseMatrix2& A, SparseVector<double>& b, double& c, const Pointer<Func>& f, ivector& indices, const Pointer<dvector>& lower, const Pointer<dvector>& upper);
00090
00091 bool do_locmin(BoxLocOpt& locminsolver, const Pointer<Func>& f, dvector& start, double& f_val, double& viol1, double& viol2, double& scale2, dvector& b1);
00092
00093 public:
00094 SparseVector<double> c_add1, c_add2;
00095
00096 double U3_time, locopt_time, max_abscoeff;
00097 int max_locmin;
00098
00099 QuadraticUnderestimator(Pointer<Param> param_=NULL);
00100
00101 void quadratic_underestimator(MinlpProblem& prob, MINLPData& minlpdata, ivector& ineq_index, SparseVector<double>& obj_c_add, vector<SparseVector<double> >& con_c_add);
00102 Pointer<SepQcFunc> quadratic_underestimator(Pointer<SepQcFunc> f, bool eq, dvector& lower, dvector& upper, dvector& primal);
00103 };
00104
00105 #endif