pulsatrix
Loading...
Searching...
No Matches
neat_speciation.hpp File Reference

NEAT speciation (Stanley & Miikkulainen 2002): a compatibility-distance metric over two genomes' gene lists, population grouping by that metric, and fitness sharing – the mechanism that protects a structurally novel but not-yet-optimized genome from being immediately out-competed before its innovation has a chance to be refined. More...

#include <algorithm>
#include <stdexcept>
#include <vector>
#include "pulsatrix/neat_genome.hpp"
Include dependency graph for neat_speciation.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pulsatrix::SpeciesAssignment
 Population grouping into species: each inner vector is a list of indices into the population vector that were passed to SpeciatePopulation. More...
 

Namespaces

namespace  pulsatrix
 

Functions

double pulsatrix::CompatibilityDistance (const NEATGenome &a, const NEATGenome &b, double c1, double c2, double c3)
 Compatibility distance: delta = c1*E/N + c2*D/N + c3*W_bar, where E is the count of excess genes (innovation numbers beyond the other genome's own highest), D is the count of disjoint genes (innovation numbers within the overlapping range but present in only one genome), N is the larger genome's gene count (or 1 if both genomes have fewer than 20 connection genes – the original paper's own small-genome exception), and W_bar is the average weight difference over genes with matching innovation numbers (present in both genomes, regardless of enabled/disabled status).
 
SpeciesAssignment pulsatrix::SpeciatePopulation (const std::vector< NEATGenome > &population, double compatibility_threshold, double c1, double c2, double c3)
 Groups population into species: each genome joins the first existing species whose representative (that species' own first member) it is compatible with (distance < compatibility_threshold); otherwise it founds a new species with itself as representative.
 
std::vector< double > pulsatrix::ComputeAdjustedFitness (const std::vector< double > &raw_fitness, const std::vector< std::vector< size_t > > &species)
 Fitness sharing: each individual's adjusted fitness is its own raw fitness divided by the size of its species – protects small, structurally novel species from being immediately out-competed by a large, already-optimized one.
 

Detailed Description

NEAT speciation (Stanley & Miikkulainen 2002): a compatibility-distance metric over two genomes' gene lists, population grouping by that metric, and fitness sharing – the mechanism that protects a structurally novel but not-yet-optimized genome from being immediately out-competed before its innovation has a chance to be refined.