Я предполагаю, что код, который вы предоставили, не ваш, и что вы следовали какой-то инструкции. Качество кода очень низкое, документация в виде комментариев буквально отсутствует, а именование переменных не является sh. Если вы это закодировали, то для новичка это вполне нормально. На самом деле даже впечатляет. Хотя особенно для учебника для начинающих, я настоятельно рекомендую поискать лучше объясненные и документированные учебники.
С учетом вышесказанного, вот код, который вам нужно добавить в ваш проект для воспроизведения сохраненного генома:
def replay_genome(config_path, genome_path="winner.pkl"):
# Load requried NEAT config
config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction, neat.DefaultSpeciesSet, neat.DefaultStagnation, config_path)
# Unpickle saved winner
with open(genome_path, "rb") as f:
genome = pickle.load(f)
# Convert loaded genome into required data structure
genomes = [(1, genome)]
# Call game with only the loaded genome
game(genomes, config)
Очевидно, что, поскольку качество кода было довольно низким, я не мог понять его до такой степени, чтобы обеспечить чистый код воспроизведения. Поэтому код просто повторно использует существующий игровой код для обучения населения, хотя население в данном случае состоит только из загруженного генома.
Бесстыдный плагин: если вы хотите узнать больше о Neuroevolution, см. Здесь: https://towardsdatascience.com/9068f532f7f7