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; +    }    };  | 
