From 0eee2ff13d39f97b362e58fff1541535d9a5ac17 Mon Sep 17 00:00:00 2001 From: maartenkeijzer Date: Fri, 14 Oct 2005 15:34:45 +0000 Subject: [PATCH] Tester for CMA --- eo/test/Makefile.am | 7 ++- eo/test/t-eoCMAES.cpp | 120 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 eo/test/t-eoCMAES.cpp diff --git a/eo/test/Makefile.am b/eo/test/Makefile.am index bf0a37bfa..32e724e25 100644 --- a/eo/test/Makefile.am +++ b/eo/test/Makefile.am @@ -8,6 +8,7 @@ LIBEO = $(top_builddir)/src/libeo.a LIBEOUTILS = $(top_builddir)/src/utils/libeoutils.a LIBES = $(top_builddir)/src/es/libes.a LIBGA = $(top_builddir)/src/ga/libga.a +LIBCMA = $(top_builddir)/src/es/libcma.a # PLEASE don't break the line (see create_batch.sh) check_PROGRAMS = t-eoParetoFitness \ @@ -36,7 +37,8 @@ check_PROGRAMS = t-eoParetoFitness \ t-eoFitnessAssembled \ t-eoFitnessAssembledEA \ t-eoRoulette \ - t-eoSharing + t-eoSharing \ + t-eoCMAES TESTS = $(check_PROGRAMS) \ @@ -46,7 +48,7 @@ noinst_HEADERS = binary_value.h real_value.h RoyalRoad.h AM_CXXFLAGS = -I$(top_srcdir)/src -DEPS = $(LIBGA) $(LIBES) $(LIBEOUTILS) $(LIBEO) +DEPS = $(LIBGA) $(LIBES) $(LIBCMA) $(LIBEOUTILS) $(LIBEO) LIBS = $(DEPS) CLEANFILES = monitor.csv t-eoRandom.out @@ -88,3 +90,4 @@ t_eoPBIL_SOURCES = t-eoPBIL.cpp t_eoFitnessAssembled_SOURCES = t-eoFitnessAssembled.cpp t_eoRoulette_SOURCES = t-eoRoulette.cpp t_eoSharing_SOURCES = t-eoSharing.cpp +t_eoCMAES_SOURCES = t-eoCMAES.cpp diff --git a/eo/test/t-eoCMAES.cpp b/eo/test/t-eoCMAES.cpp new file mode 100644 index 000000000..bccfec8e0 --- /dev/null +++ b/eo/test/t-eoCMAES.cpp @@ -0,0 +1,120 @@ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +using namespace eo; +using namespace std; + +typedef eoMinimizingFitness FitT; +typedef eoVector EoType; + +double sqr(double x) { return x*x; } + +eoValueParam evals(0,"Function Evals","Number of Evaluations"); + +double f_sphere(const vector& values) { + double sum = 0.0; + for (unsigned i = 0; i < values.size(); ++i) { + sum += values[i] * values[i]; + } + ++evals.value(); + return sum; +} + +double f_rosen(const vector& x) { + double sum =0.0; + + for (int i = 0; i < x.size()-1; ++i) { + sum += 100 * sqr(sqr(x[i])-x[i+1]) + sqr(1.-x[i]); + } + ++evals.value(); + return sum; +} + + + +int main(int argc, char* argv[]) { + + eoParser parser(argc, argv); + + CMAParams params(parser); + + vector initial_point(params.n, 0.0); + + CMAState state(params, initial_point); + + if (parser.userNeedsHelp()) + { + parser.printHelp(std::cout); + return 1; + } + + eoCMAInit init(state); + + eoPop pop(params.mu, init); + + eoEvalFuncPtr&> eval( f_rosen ); + + eoCMABreed breed(state, params.lambda); + + for (unsigned i = 0; i < pop.size(); ++i) { + eval(pop[i]); + } + + eoCommaReplacement comma; + + eoGenContinue gen(params.maxgen); + eoFitContinue fit(1e-10); + + eoCheckPoint checkpoint(gen); + checkpoint.add(fit); + + eoBestFitnessStat stat; + + eoStdoutMonitor mon; + mon.add(stat); + mon.add(evals); + + eoTimedMonitor timed(1);// 1 seconds + timed.add(mon); // wrap it + + checkpoint.add(timed); + checkpoint.add(stat); + + eoEasyEA algo( + checkpoint, + eval, + breed, + comma); + + + algo(pop); + pop.sort(); + + cout << pop[0] << endl; + cout << "Fitness achieved = " << pop[0].fitness() << endl; + cout << "Function evaluations = " << evals.value() << endl; +} + + +