diff options
Diffstat (limited to 'methods')
-rw-r--r-- | methods/aga/aga.hpp | 24 | ||||
-rw-r--r-- | methods/powell/powell_method.hpp | 16 |
2 files changed, 30 insertions, 10 deletions
diff --git a/methods/aga/aga.hpp b/methods/aga/aga.hpp index cf0b4a6..77c5700 100644 --- a/methods/aga/aga.hpp +++ b/methods/aga/aga.hpp @@ -69,7 +69,7 @@ namespace opt_utilities pT reproduction_box; std::vector<vp_pair<rT,pT> > samples; std::vector<pT> buffer; - + mutable bool bstop; private: typename element_type_trait<pT>::element_type uni_rand (typename element_type_trait<pT>::element_type x1, @@ -216,7 +216,7 @@ namespace opt_utilities } pT lb(get_size(samples[0].p)); pT ub(get_size(samples[0].p)); - for(int i=0;i<n2;++i) + for(int i=0;i<n2&&!bstop;++i) { pT p(samples[i].p); for(size_t j=0;j<get_size(p);++j) @@ -244,9 +244,13 @@ namespace opt_utilities } buffer[i]=p; } - for(int i=0;i<n1;++i) + if(bstop) { - for(int j=0;j<n2;++j) + return false; + } + for(int i=0;i<n1&&!bstop;++i) + { + for(int j=0;j<n2&&!bstop;++j) { pT p(samples[i].p); for(size_t k=0;k<get_size(p);++k) @@ -261,6 +265,10 @@ namespace opt_utilities } } } + if(bstop) + { + return false; + } double n_per_dim=pow((double)n0,1./get_size(lower_bound)); for(size_t i=0;i<get_size(reproduction_box);++i) { @@ -276,6 +284,7 @@ namespace opt_utilities pT do_optimize() { + bstop=false; srand(time(0)); buffer.resize(n2); double n_per_dim=pow((double)n0,1./get_size(lower_bound)); @@ -289,10 +298,15 @@ namespace opt_utilities get_element(lower_bound,i))/n_per_dim); } - while(iter()){} + while(iter()&&!bstop){} return samples.begin()->p; } + + void do_stop() + { + bstop=true; + } }; diff --git a/methods/powell/powell_method.hpp b/methods/powell/powell_method.hpp index 0ec095c..ee5adeb 100644 --- a/methods/powell/powell_method.hpp +++ b/methods/powell/powell_method.hpp @@ -31,7 +31,7 @@ namespace opt_utilities private: func_obj<rT,pT>* p_fo; optimizer<rT,pT>* p_optimizer; - + mutable bool bstop; //typedef blitz::Array<rT,2> array2d_type; @@ -99,13 +99,13 @@ namespace opt_utilities array1d_type ptt(n); array1d_type xit(n); fret=p_fo->eval(p); - + for(j=0;j<n;++j) { //get_element(pt,j)=get_element(p,j); set_element(pt,j,get_element(p,j)); } - for(iter=0;;++iter) + for(iter=0;!bstop;++iter) { fp=fret; ibig=0; @@ -238,7 +238,7 @@ namespace opt_utilities pT do_optimize() { - + bstop=false; init_xi((int)get_size(start_point)); @@ -255,7 +255,13 @@ namespace opt_utilities rT fret; powell(end_point,threshold,iter,fret); return end_point; - } + } + + void do_stop() + { + bstop=true; + } + }; } |