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 #ifndef NODE_H 00008 #define NODE_H 00009 00010 #include "standard.h" 00011 #include "problem.h" 00012 #include "minlpopt.h" 00013 #include "bcp.h" 00014 00015 class ColumnGenerator; 00016 class RMPManager; 00017 class LinearRelax; 00018 class LinearRelaxSolverGeneral; 00019 class LinearRelaxSolverMIP; 00020 class LagHeu; 00021 class LagHeu1; 00022 class LagHeu_SimAnnealing; 00023 class LagHeu2; 00024 class LagHeu2b; 00025 00029 class MinlpNode { 00030 friend class MinlpBCP; 00031 friend class ColumnGenerator; 00032 friend class RMPManager; 00033 friend class LinearRelax; 00034 friend class LinearRelaxSolverGeneral; 00035 friend class LinearRelaxSolverMIP; 00036 friend class RelaxationSolver; 00037 friend class LagHeu; 00038 friend class LagHeu1; 00039 friend class LagHeu_SimAnnealing; 00040 friend class LagHeu2; 00041 friend class LagHeu2b; 00042 00043 private: 00046 double low_bound; 00047 00048 bool update_subdiv_bound_called; 00049 00052 // map<int, set<int> > bcp_fixed_var; 00053 00056 // vector<list<Pointer<SepQcFunc> > > part_con; 00057 00060 dvector lower, upper; 00061 00065 set<int> fix_branch_var; 00066 00070 vector<dvector> lagprob_solutions; 00071 00075 dvector ref_point; 00076 00079 dvector dual_point; 00080 00082 dvector yz_RMP; 00083 00085 vector<list<list<ExtremePoint>::iterator> > i_ExtremePoints; 00088 vector<list<ExtremePoint>::iterator> i_ExtremePoints_limit; 00089 00090 public: 00096 MinlpNode(const dvector& lower_, const dvector& upper_/*, const map<int, set<int> >& already_fixed/*=map<int, set<int> >*/); 00097 00101 MinlpNode(MinlpNode& node); 00102 00108 pair<double, pair<int,int> > bcp_rho(const dvector& x, const vector<ivector>& block, const vector<bool>& discr); 00109 00116 bool inside_part_set(dvector &point, int k, const vector<ivector>& block); 00117 00122 set<SolCandidate>::const_iterator outside_part_set(const set<SolCandidate>& points); 00123 00126 double key() { return low_bound; } 00127 00131 double key(const vector<int>& i_discr); 00132 00133 }; 00134 00135 //------------------------------------------ 00136 00137 #endif