7 #include <boost/foreach.hpp> 16 struct FitnessComparator {
17 bool operator()(
const IndividualType & a,
const IndividualType & b ) {
25 int main(
int argc,
char ** argv ) {
27 const unsigned Mu = 15;
28 const unsigned Lambda = 100;
29 const unsigned Dimension = 30;
30 const double InitialSigma = 3.;
33 Ackley ackley( Dimension );
37 mutationDistribution.
resize(Dimension);
40 prototypeIndividual.
chromosome() = InitialSigma;
54 double tau0 = 1. / sqrt(2. * Dimension);
55 double tau1 = 1. / sqrt(2. * sqrt( static_cast<double>( Dimension ) ) );
60 for( std::size_t i = 0; i < offspring.size(); i++ ) {
63 example::Population::const_iterator mom = parents.begin() +
Rng::discrete( 0, parents.size() - 1 );
64 example::Population::const_iterator dad = parents.begin() +
Rng::discrete( 0, parents.size() - 1 );
67 offspring[i].chromosome() =
Rng::uni( mom->chromosome(), dad->chromosome() );
69 offspring[i].chromosome() *= Rng::logNormal( 0, tau0 + tau1 );
72 offspring[i].searchPoint() = uniform(Rng::globalRng, mom->searchPoint(), dad->searchPoint() );
74 offspring[i].searchPoint() = offspring[i].chromosome() * mutationDistribution(Rng::globalRng).first;
77 offspring[i].unpenalizedFitness() = ackley.
eval( offspring[i].searchPoint() );
81 example::FitnessComparator comp;
82 std::sort( offspring.begin(), offspring.end(), comp );
83 std::copy( offspring.begin(), offspring.begin() + Mu, parents.begin() );
87 << parents.front().unpenalizedFitness() <<
" " 88 << parents.front().chromosome()