00001 /* $Id: quadratic_cuts_check.hpp 508 2011-02-15 21:52:44Z pbelotti $ 00002 * 00003 * Name: quadratic_cuts_check.hpp 00004 * Author: Andrea Qualizza 00005 * Purpose: 00006 * 00007 * This file is licensed under the Eclipse Public License (EPL) 00008 */ 00009 00010 #ifndef QUADRATIC_CUTS_CHECK_HPP 00011 #define QUADRATIC_CUTS_CHECK_HPP 00012 00013 #include <tracer.hpp> 00014 00015 #define indexQ(i,j,n) ((n) + (i) * (2*(n)-1-(i)) / 2 + (j)) 00016 00017 00018 00019 #define aaRECOMPUTE_XTILDE_EV_FROM_SCRATCH 00020 #define QUADRATIC_CUTS_DEBUG 00021 #define QUADRATIC_CUTS_CHECK_TOLERANCE 1e-8 00022 00023 class QuadraticCuts{ 00024 public: 00025 QuadraticCuts(int n, const double *initial_sol, Tracer *tracer); 00026 ~QuadraticCuts(); 00027 void refresh(const double *current_sol); 00028 00029 private: 00030 int n_; 00031 double *L; //L = X - xxT 00032 double *sol; 00033 double *previous_sol; 00034 double **eigenvectors; 00035 int card_ev; 00036 #ifdef RECOMPUTE_XTILDE_EV_FROM_SCRATCH 00037 double *Xtilde; 00038 double **eigenvectors_Xtilde; 00039 int card_ev_Xtilde; 00040 #endif 00041 Tracer *tracer_; 00042 00043 void updateSolution(const double *current_sol); 00044 void computeEigenvectorsFromCurrentSolution(); 00045 void checkQuadraticDiagonalCutsOnCurrentSolution(); 00046 void checkPreviousQuadraticEVCutsOnCurrentSolution(); 00047 }; 00048 00049 #endif 00050