aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2009-08-23 13:08:26 +0000
committerastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2009-08-23 13:08:26 +0000
commitf11adda11d1275bcff45b20c15194d7a76bb6b59 (patch)
treeb57521b8eeef3fe85130ebb32a964a3dbac7aebd
parent1a63d3a669ebcff212e52ddb1e4efae473550f9f (diff)
downloadopt-utilities-f11adda11d1275bcff45b20c15194d7a76bb6b59.tar.bz2
git-svn-id: file:///home/svn/opt_utilities@54 ed2142bd-67ad-457f-ba7c-d818d4011675
-rw-r--r--example/Makefile8
-rw-r--r--example/test_optimizer.cpp73
-rw-r--r--methods/aga/aga.hpp10
-rw-r--r--methods/powell/bas_util.hpp17
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)