00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00027 #include <search_node.h>
00028 #include <dbtools.h>
00029 #include <int_evaluator.h>
00030
00031 bool point_check_feasibility::operator() () const
00032 {
00033 typedef model::walker nodeptr;
00034 const std::vector<double>* x;
00035 const double* f;
00036
00037 bool error;
00038 const vdbl::col& _ca(_r->get_col(x_ci, error));
00039 if(error) return false;
00040 _ca.get_ptr(x);
00041
00042 const vdbl::col& _cb(_r->get_col(f_ci, error));
00043 if(error) return false;
00044 _cb.get_ptr(f);
00045
00046 const work_node *wn = wnc->wn()->get_local_copy();
00047 const model* __mod = wn->get_model_ptr();
00048 variable_indicator v_i(__mod->number_of_variables());
00049 v_i.set(0, __mod->number_of_variables());
00050
00051 std::vector<interval> xi;
00052 std::copy((*x).begin(), (*x).end(), std::back_inserter(xi));
00053 interval fi;
00054 interval_eval ie(xi, v_i, *__mod, NULL, false);
00055
00056 std::vector<nodeptr>::const_iterator __b, __e(__mod->constraints.end());
00057 for(__b = __mod->constraints.begin(); __b != __e; ++__b)
00058 {
00059 fi = evaluate(ie, *__b);
00060 if(!fi.subset((*__b)->f_bounds))
00061 return false;
00062 }
00063 return true;
00064 }
00065
00066 bool box_check_intersection::operator() () const
00067 {
00068 typedef model::walker nodeptr;
00069 const std::vector<interval>* x;
00070
00071 bool error;
00072 const vdbl::col& _ca(_r->get_col(x_ci, error));
00073 if(error) return false;
00074 _ca.get_ptr(x);
00075
00076 const work_node *wn = wnc->wn()->get_local_copy();
00077 const model* __mod = wn->get_model_ptr();
00078 const std::vector<interval>& ranges(wn->node_ranges);
00079
00080 unsigned int e(x->size());
00081 for(unsigned int i = 0; i < e; ++i)
00082 {
00083 if((*x)[i].disjoint(ranges[__mod->var(i)->node_num]))
00084 return false;
00085 }
00086 return true;
00087 }