Применение сохраненного NEAT- Python Genome к тестовой среде после тренировки - PullRequest
1 голос
/ 22 апреля 2020

Я использовал некоторые NEAT-алгоритмы для кодирования собственного AI для некоторых простых игр, таких как flappy bird. Все отлично работает, и я знаю, что происходит. Проблема в том, что я не знаю, что делать с результатом. ИИ чему-то учится, и я хочу сохранить этот прогресс. TechwithTim YouTuber сказал кое-что об использовании маринада, который сработал для меня, когда я его сохранил. Я даже могу загрузить его из файла, но на этом я заканчиваю. Я не знаю, что делать дальше, чтобы запустить только одну птицу, чтобы играть в игру со знанием тех птиц, которые играли в игру до него.

Сохранение в одном коде

winner = p.run(game,50)
with open("winner.pkl", "wb") as f:
    pickle.dump(winner, f)
    f.close()

Открытие в другом коде:

with open("winner.pkl", "wb") as f:
    genome = pickle.load(f)

При использовании

print(type(genome))

вывод равен

<class "neat.genome.DefaultGenome">

1 Ответ

1 голос
/ 22 апреля 2020

Я предполагаю, что код, который вы предоставили, не ваш, и что вы следовали какой-то инструкции. Качество кода очень низкое, документация в виде комментариев буквально отсутствует, а именование переменных не является 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

...