diff options
Diffstat (limited to 'methods/aga')
-rw-r--r-- | methods/aga/aga.hpp | 24 |
1 files changed, 19 insertions, 5 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; + } }; |