00001 #include "problembbob2009.h"
00002 #include <cassert>
00003 #include <cstdio>
00004 #include <cstring>
00005
00006
00007 using namespace realea;
00008
00009 ProblemBBOB2009::ProblemBBOB2009(string algname, string resultpath, unsigned int dim, int instance) {
00010 assert(dim == 2 || dim == 3 || dim == 5
00011 || dim == 10 || dim == 20 || dim == 40);
00012 assert(instance >= 1 && instance <= 5);
00013
00014 m_ndim = dim;
00015 m_instance = instance;
00016 m_init = false;
00017 m_algname = algname;
00018 m_resultpath = resultpath;
00019 }
00020
00021 ProblemBBOB2009::~ProblemBBOB2009(void) {
00022 if (m_init) {
00023
00024 fgeneric_finalize();
00025 }
00026 }
00027
00028 void ProblemBBOB2009::init(unsigned int fun) {
00029 if (m_init) {
00030 return;
00031 }
00032
00033 assert((fun >= 1 && fun <= 24)
00034 || (fun >= 101 && fun <= 130)
00035 );
00036
00037
00038
00039
00040
00041 fgeneric_noiseseed(30);
00042
00043 ParamStruct params = fgeneric_getDefaultPARAMS();
00044
00045
00046
00047 strcpy(params.dataPath, m_resultpath.c_str());
00048
00049
00050 strcpy(params.algName, m_algname.c_str());
00051 strcpy(params.comments, "RatioBL=0.5,Intensity=500");
00052
00053
00054 params.DIM = m_ndim;
00055 params.funcId = fun;
00056 params.instanceId = m_instance;
00057
00058 fgeneric_initialize(params);
00059 m_init = true;
00060 }
00061
00062 tFitness eval_bbob2009(const tGen *x, int ndim) {
00063 double sol[ndim];
00064
00065 for (int i = 0; i < ndim; i++) {
00066 sol[i] = x[i];
00067 }
00068 return fgeneric_evaluate(sol);
00069 }
00070
00071 ProblemPtr ProblemBBOB2009::get(unsigned int fun) {
00072
00073 init(fun);
00074 ProblemPtr prob (new Problem());
00075 prob->setDimension(m_ndim);
00076
00077
00078 for (unsigned i = 0; i < m_ndim; ++i) {
00079 prob->setDomainValues(i, -5, 5, true);
00080 }
00081
00082
00083 prob->setOptimize(fgeneric_ftarget(), 0);
00084 prob->setMinimize();
00085
00086
00087 prob->setEval(eval_bbob2009);
00088
00089
00090 prob->setMaxEval(5000*m_ndim*m_ndim);
00091 prob->setMinimize();
00092
00093 return prob;
00094 }