ما الذي يميّز NEAT
خلافاً للشبكات التقليدية، تبدأ NEAT بشبكات صغرى وتضيف التعقيد فقط عند الحاجة. وهذا يمنع التضخم ويجد حلولاً فعّالة.
المفاهيم الأساسية
التخصّص (Speciation)
تُجمَّع الشبكات في أنواع بناءً على التشابه البنيوي. ويتنافس كل نوع داخلياً، مما يحافظ على التنوّع.
أرقام الابتكار
تحصل كل طفرة بنيوية جديدة (اتصال/عقدة جديدة) على رقم ابتكار عالمي فريد. وهذا يتيح تهجيناً ذا معنى بين طوبولوجيات مختلفة.
مشاركة اللياقة
تُقسَم اللياقة على حجم النوع لمنع أي نوع من الهيمنة.
التنفيذ بلغة 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)