diff options
author | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2009-08-23 13:08:26 +0000 |
---|---|---|
committer | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2009-08-23 13:08:26 +0000 |
commit | f11adda11d1275bcff45b20c15194d7a76bb6b59 (patch) | |
tree | b57521b8eeef3fe85130ebb32a964a3dbac7aebd | |
parent | 1a63d3a669ebcff212e52ddb1e4efae473550f9f (diff) | |
download | opt-utilities-f11adda11d1275bcff45b20c15194d7a76bb6b59.tar.bz2 |
git-svn-id: file:///home/svn/opt_utilities@54 ed2142bd-67ad-457f-ba7c-d818d4011675
-rw-r--r-- | example/Makefile | 8 | ||||
-rw-r--r-- | example/test_optimizer.cpp | 73 | ||||
-rw-r--r-- | methods/aga/aga.hpp | 10 | ||||
-rw-r--r-- | methods/powell/bas_util.hpp | 17 |
4 files changed, 95 insertions, 13 deletions
diff --git a/example/Makefile b/example/Makefile new file mode 100644 index 0000000..24fc4f0 --- /dev/null +++ b/example/Makefile @@ -0,0 +1,8 @@ +target=test_optimizer + + +test_optimizer:test_optimizer.cpp + g++ -o $@ $< -I ../ -O2 + +clean: + rm -f $(target) diff --git a/example/test_optimizer.cpp b/example/test_optimizer.cpp new file mode 100644 index 0000000..99b9ec2 --- /dev/null +++ b/example/test_optimizer.cpp @@ -0,0 +1,73 @@ +#include <core/optimizer.hpp> +#include <methods/powell/powell_method.hpp> +#include <methods/aga/aga.hpp> +#include <vector> +#include <iostream> + + +//declear a class derived from func_obj +class foo + :public opt_utilities::func_obj<double,std::vector<double> > +// ^^^^^^^^double is the return type +// vector is the parameter type +{ + double do_eval(const std::vector<double>& p) + { + double result=0; + for(int i=0;i<p.size();++i) + { + result+=p[i]*p[i]; + } + return result; + } + + foo* do_clone()const + { + return new foo(*this);//default implement of the do_clone + } +}; + + +int main() +{ + //define an optimizer object + opt_utilities::optimizer<double,std::vector<double> > op; + //set the optimization method + op.set_opt_method(opt_utilities::powell_method<double,std::vector<double> >()); + //attach the object function + op.set_func_obj(foo()); + + //define the starting point + std::vector<double> p(3); + p[0]=p[1]=p[2]=10; + + //set the starting point + op.set_start_point(p); + std::cout<<"starting optimization from:"<< + p[0]<<" "<<p[1]<<" "<<p[2]<<std::endl; + + //set the precision + op.set_precision(1E-6); + //perform the optimization + p=op.optimize(); + + //output the result + std::cout<<"optimization result:"<< + p[0]<<" "<<p[1]<<" "<<p[2]<<std::endl; + + //Let's change another method + op.set_opt_method(opt_utilities::aga_method<double,std::vector<double> >()); + //define the lower and upper limit + p[0]=p[1]=p[2]=-10; + op.set_lower_limit(p); + p[0]=p[1]=p[2]=10; + op.set_upper_limit(p); + //set the start point + op.set_start_point(p); + //set precision + op.set_precision(1E-10); + //start optimize + p=op.optimize(); + std::cout<<"optimization result:"<< + p[0]<<" "<<p[1]<<" "<<p[2]<<std::endl; +} diff --git a/methods/aga/aga.hpp b/methods/aga/aga.hpp index f87d215..577e526 100644 --- a/methods/aga/aga.hpp +++ b/methods/aga/aga.hpp @@ -146,7 +146,6 @@ namespace opt_utilities uni_rand(get_element(lower_bound,j), get_element(upper_bound,j)) ); - } } @@ -186,7 +185,7 @@ namespace opt_utilities sum+=samples[i].v; } - std::sort(samples.begin(),samples.end(),vp_comp<double,std::vector<double> >()); + std::sort(samples.begin(),samples.end(),vp_comp<rT,pT>()); if(sum2/samples.size()-pow(sum/samples.size(),2)<threshold) { return false; @@ -240,16 +239,17 @@ namespace opt_utilities buffer.resize(n2); double n_per_dim=pow((double)n0,1./get_size(lower_bound)); resize(reproduction_box,get_size(lower_bound)); + for(int i=0;i<get_size(lower_bound);++i) { - + set_element(reproduction_box,i, (get_element(upper_bound,i)- get_element(lower_bound,i))/n_per_dim); } - + while(iter()){} - + return samples.begin()->p; } diff --git a/methods/powell/bas_util.hpp b/methods/powell/bas_util.hpp index 743dc3c..6a53f0a 100644 --- a/methods/powell/bas_util.hpp +++ b/methods/powell/bas_util.hpp @@ -1,6 +1,7 @@ #ifndef BAS_UTIL #define BAS_UTIL #include <core/opt_traits.hpp> +#include <algorithm> namespace opt_utilities { template <typename T> @@ -31,15 +32,15 @@ namespace opt_utilities opt_eq(b,c); opt_eq(c,d); } - template <typename T> - void swap(T& ax,T& bx) - { + // template <typename T> + // void swap(T& ax,T& bx) + //{ // swap(ax,bx); - T temp; - opt_eq(temp,ax); - opt_eq(ax,bx); - opt_eq(bx=temp); - } + // T temp; + //opt_eq(temp,ax); + //opt_eq(ax,bx); + //opt_eq(bx,temp); + //} template <typename T> T sign(const T& a,const T& b) |