Closed Resch-Said closed 11 months ago
In the Config, the user can specify the number of maximum species and species size instead of the population size. The population size calculates itself.
Instead of penalising a species if it does not improve for a certain number of generations, like in NEAT, each species has a minimum survival time.
If the number of species is over the limit, then the species (if they are not the best) that has not improved for the longest time will be eliminated if the minimum survival time without progress is exceeded.
Possible config name: generation_stagnation_duration
In other words, if for some reason no new species are created, then bad species are tolerated.
To recognise whether a genome belongs to a species, the genome is compared with the best genome of a species and if the structure is similar, it is added to the species.
If a genome does not fit into any species, it becomes a species of its own. The extent to which a genome must differ can be determined in the config. As a rule, 1 should mean that everything is different and 0 that it is identical.
However, we will assume that there will always be an oversupply of species. Therefore, the minimum survival time is mandatory, as otherwise it would only lead to poorer species being pushed out.
To recognise whether a species is improving, the average fitness of the species is used.
It might also make sense to eliminate bad species based on average fitness, even if they have the best genomes. Especially because genomes within a species should tend to have the same fitness anyway.
This also means that instead of outputting the fitness of the best genome, the best average fitness per genome is displayed instead.
resolved in #25
I won't be able to avoid speciation. I have tested different approaches to require only one population, but it always results in all genomes having the same fitness and new genomes not having the opportunity to evolve.
New structures can form, but only if the fitness is equivalent to the other genomes. However, the development of recurrent connections in particular requires time, as these generally achieve a poorer result at the beginning.