paraboloidElitistCMA.cpp
#include <EALib/PopulationT.h>
#include <EALib/ChromosomeCMA.h>
#include <ReClaM/Paraboloid.h>
using namespace std;
int main(int argc, char* argv[])
{
int lambdaSucc;
unsigned i, t;
const unsigned Dimension = 10;
const unsigned a = 1000;
const bool rotate = true;
Paraboloid f(Dimension, a, rotate);
const unsigned Iterations = 10000;
const double MinInit = -3.;
const double MaxInit = 7.;
const double GlobalStepInit = 1.;
const unsigned Lambda = 1;
PopulationCT<ChromosomeCMA> parent(1, 1);
PopulationCT<ChromosomeCMA> offspring(Lambda, 1);
parent.setMinimize();
offspring.setMinimize();
parent[0][0].init(Dimension, GlobalStepInit, MinInit, MaxInit, Lambda);
parent[0].setFitness(f.error(parent[0][0]));
for (t = 0; t < Iterations; t++) {
lambdaSucc = 0;
IndividualCT<ChromosomeCMA> parentIndiv = parent[0];
for (i = 0; i < Lambda; i++) {
offspring[i] = parentIndiv;
offspring[i][0].mutate();
offspring[i].setFitness(f.error(offspring[i][0]));
if (offspring[i].getFitness() <= parentIndiv.getFitness()) {
lambdaSucc++;
if (offspring[i].getFitness() <= parent[0].getFitness()) parent[0] = offspring[i];
}
}
if ((t % 100) == 0)
cout << t << " " << parent[0].getFitness() << endl;
parent[0][0].updateGlobalStepsize(lambdaSucc);
if (lambdaSucc) parent[0][0].updateCovariance(parentIndiv);
}
cout << t << " " << parent[0].getFitness() << endl;
if (parent[0].getFitness() < 1e-50) exit(EXIT_SUCCESS);
else exit(EXIT_FAILURE);
}