00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00028 #include <coconut_config.h>
00029 #include <search_graph.h>
00030 #include <pfstar.h>
00031
00032 #define PFSTAR_DEBUG 0
00033
00034 namespace coco {
00035
00036 double calc_pf_star::operator() () const
00037 {
00038 typedef expression_walker nodeptr;
00039 double lowbnd, width;
00040
00041 bool error;
00042 const vdbl::col& _ca(_r->get_col(x_lowbnd, error));
00043 if(error) return false;
00044 _ca.get(lowbnd);
00045
00046 const vdbl::col& _cb(_r->get_col(x_width, error));
00047 if(error) return false;
00048 _cb.get(width);
00049
00050 const gptr<search_graph> *psg = sgc->sg();
00051 const vdbl::viewdbase& vdb((*psg)->get_viewdbase());
00052 const vdbl::view *iv((vdbl::view*)vdb.get_view("global info"));
00053 vdbl::view::row_const_iterator rc(iv->rows_begin());
00054 double fmin;
00055
00056 if(rc != iv->rows_end())
00057 {
00058 basic_alltype b;
00059 iv->get(rc.id(), "fmin", b);
00060 fmin = b.nd();
00061 }
00062 else
00063 fmin = COCO_INF;
00064
00065
00066 #if PFSTAR_DEBUG
00067 std::cout << "in calc_pf_star::operator(): ";
00068 std::cout << "lowbnd: " << lowbnd << " "
00069 << "width: " << width << " "
00070 << "fmin: " << fmin << std::endl;
00071 #endif
00072
00073 double ret;
00074 if(width > 0)
00075 ret = (fmin - lowbnd)/width;
00076 else
00077 ret = 0;
00078 return ret;
00079 }
00080
00081 }