Ce qui rend NEAT spécial
Contrairement aux réseaux classiques, NEAT démarre avec des réseaux minimaux et n'ajoute de la complexité que lorsque nécessaire. Cela évite le surdimensionnement et trouve des solutions efficaces.
Concepts clés
Spéciation
Les réseaux sont regroupés en espèces selon leur similarité structurelle. Chaque espèce concourt en interne, préservant la diversité.
Numéros d'innovation
Chaque nouvelle mutation structurelle (nouvelle connexion/nœud) reçoit un numéro d'innovation global unique. Cela permet un croisement pertinent entre topologies différentes.
Partage de fitness
La fitness est divisée par la taille de l'espèce pour empêcher une espèce de dominer.
Implémentation Python (neat-python)
import neat
config = neat.Config(
neat.DefaultGenome,
neat.DefaultReproduction,
neat.DefaultSpeciesSet,
neat.DefaultStagnation,
'config-feedforward'
)
def eval_genomes(genomes, config):
for genome_id, genome in genomes:
net = neat.nn.FeedForwardNetwork.create(genome, config)
genome.fitness = run_game(net) # your game/simulation
population = neat.Population(config)
population.run(eval_genomes, n=1000)