void evolutionary_algorithm::write_data()
{
    individual_vector::iterator it = std::max_element(population.begin(), population.end(),
            &compare_individuals);
    double max_fitness = (*it)->fitness();
    double avg = average_fitness(population);
    double std = standard_deviation(population);
    csv.write(3, avg, std, max_fitness);
    if(debug_flag)
    {
        //print_individuals(population);
        for(std::size_t i = 0; i < population.size(); ++i)
        {
            sstream ss;
            ss << "id: " << i << "\tphenotype:\t";
            for(std::size_t j = 0; j < population[i]->phenotype()->size(); ++j)
            {
                ss << " " << (*population[i]->phenotype())[j];
            }
            ss << "\tgenotype:";
            for(std::size_t j = 0; j < population[i]->genotype()->size(); ++j)
            {
                if(j % development->bit_chunk_size()==0) ss << " ";
                ss << (*population[i]->genotype())[j];
            }
            debug.write(1, ss.str().c_str());
        }
    }
}
Beispiel #2
0
bool GA::has_converged() const {
  return (historic_best_fitness - average_fitness()) < convergence_threshold;
}