Ответы пользователя по тегу Генетические алгоритмы
  • Генетический алгоритм в pygame?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сделал простенькую игру на pygame.

    Можно ли обучить башню самой стрелять по ботам с помощью генетического алгоритма.

    Башня должна определить по какой дорожке к ней идёт бот. Определить его расстояние и скорость. И как он подошёл к сектору начать в него стрелять.


    Зачем? Если это твоя собственная игра, то ивой код и так "знает" параметры и траекторию перемещения юнитов, зачем тут генетические алгоритмы?

    Генетические алгоритмы нужны когда строгое алгоритмическое решение оказывается слишком сложным вычислительно или логически. Тогда можно сделать простую мультиагентную систему, и каждый агент будет реализовывать свою вариацию стратегии игры.
    Нужно построить "геном" - набор изолированных параметров, которые определяют стратегию агента.
    Нужно сформулировать правила "скрещивания" и "мутации" геномов, чтобы в результате получались новые стратегии для новых агентов.
    Нужно оценивать эффективность каждого агента в баллах или придумать нормирующую функцию которая по набору показателей агента (kill-rate, набранное число очков за жизнь, продолжительность жизни, нанесенному урону) будет выдавать число (скаляр) с помощью которого можно сравнивать агентов. В совокупности с логикой стратегии эта нормирующая функция будет формировать фитнес-функцию. Фитнес-функция принимает параметры стратегии (геном) и возвращает результат - скаляр - качество агента. Формируем поколения или просто периодический отбор самых качественных, потом их скрещиваем в рандомном или каком-то еще порядке, добавляем мутации и формируем новый набор агентов с новым геномом. а значит с новыми параметрами стратегий.
    И так по кругу. В итоге у вас получатся агенты, которые будут эволюционировать.

    В вашей задаче так можно, например, "обучать" нападающих юнитов. Пользователь ставит башни и остреливается, а ваши генетические юниты плодятся, мутируют и лезут на пользователя. Лучшие отбираются и на их основе генерится потомство, которое попадает в следующие волны.

    Осторожно, если раскусить этот принцип. пользователь сможет нарочно не применять какой-то очень сильный приём, которым будет выкашивать целиком популяции, которые не смогут так к нему приспособиться. Так работают антибиотики, если их применять правильно. А если оставлять в живых недобитых юнитов, то они будут формировать резистентность к приёму.

    Никаких особых библиотек для такой реализации не требуется. Всё довольно просто и понятно.
    Ответ написан