aboutsummaryrefslogtreecommitdiffstats
path: root/methods
diff options
context:
space:
mode:
authorastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2009-10-11 16:24:22 +0000
committerastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2009-10-11 16:24:22 +0000
commit896a67e280d41df613092279f76913f8372faba1 (patch)
treeef5c2a83f1291d47dd56ee9969d244ceb1b7fc4c /methods
parent3fcb4f104a8b81937f93ef4b298dd51e3c1eec94 (diff)
downloadopt-utilities-896a67e280d41df613092279f76913f8372faba1.tar.bz2
git-svn-id: file:///home/svn/opt_utilities@79 ed2142bd-67ad-457f-ba7c-d818d4011675
Diffstat (limited to 'methods')
-rw-r--r--methods/aga/aga.hpp24
-rw-r--r--methods/powell/powell_method.hpp16
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;
+ }
+
};
}