@Fenix104

Генетический алгоритм в pygame?

Доброго времени суток.
Сделал простенькую игру на pygame. Типо тавер дефенс. И тут пришла идея. Можно ли обучить башню самой стрелять по ботам с помощью генетического алгоритма. Раньше с генетическим алгоритмом не работал. Начал изучать Deap. Но так и не понял как прикрутить его. То есть.как я вижу это. Башня должна определить по какой дорожке к ней идёт бот. Определить его расстояние и скорость. И как он подошёл к сектору начать в него стрелять.
Смотрел примеры, но похожего не видел.
Можете предложить что почитать.
Или где можно посмотреть пример.
Заранее спасибо.
Может я не правильно свою мысль доношу.
То есть игрок,
Сам поворачивает башню в сторону противника, и сам стреляет нажатием на клавишу. Снаряд летит с определенной скоростью и траекторией, и можно промазать по противнику.
Я смотрел примеры ГА. И решил научиться. Но не могу понять как прикрутить алгоритм к башне.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
AshBlade
@AshBlade
Просто хочу быть счастливым
Судя по описанию - это можно реализовать и без генетических алгоритмов/глубокого обучения и т.д.
Алгоритм прост:
1. На каждой итерации находишь расстояние до всех доступных противников
2. Рассчитываешь "опасность" исходя из его класса/расстояния/скорости/жизни и тому подобное. Самое простое - атакуй ближайшего к себе
3. На каждой итерации рассчитывай эти веса и выбирай того, у которого этот вес больше
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Сделал простенькую игру на pygame.

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

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


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

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

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

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

Никаких особых библиотек для такой реализации не требуется. Всё довольно просто и понятно.
Ответ написан
@Luka83
C Deapом не знаком, но общая постановка может выглядеть примерно так:

Формируете параметрический закон поведения башни в духе Цель типа А находится в координате х, у и движется со скоростью ux uy - стреляем по ней, целясь в точку ХС УС. Есть некая функция ХС=f(A, x, y, ux, uy) и УС=f(A, x, y, ux, uy). Задача генетического алгоритма - подобрать параметры в этих функциях.
Для этого вводим фитнес функцию - например, количество успешных попаданий или число оставшихся хп цели или еще что нам надо. Формируем модельную ситуацию: в заданной карте пробегает цель (м.б. несколько разных), башенка стреляет по ней по указанному алгоритму и вся эта тестовая задача возвращает фитнесс функцию.
И все, можно запускать генетическую оптимизацию по подбору параметров.

Но я согласен с ответами выше - все это выглядит несколько за уши притянутым.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 17:10
20000 руб./за проект
28 апр. 2024, в 15:00
100000 руб./за проект
28 апр. 2024, в 14:43
5000 руб./за проект