Генетические алгоритмы в играх - PullRequest
8 голосов
/ 10 октября 2010

Мне нужно сделать проект по генетическим алгоритмам, и у меня была идея настроить черты (то есть оружие, которое будет использоваться и т. Д.) Бот-шутера от первого лица. Например, я представлял бы черты в форме строки, где первые 10 битов представляли вероятность выбора оружия1, следующие 10 битов представляли вероятность выбора оружия2 и т. Д. Таким образом, я получал бы оптимальную строку и, таким образом, мог вычислить какой должен быть оптимальный набор оружия, который я должен использовать.

Очевидная проблема, с которой я сталкиваюсь, заключается в том, как найти значения пригодности. Моя идея состояла бы в том, что, если я хочу найти пригодность струны, я заставляю бота использовать соответствующее оружие и играю против него, используя окончательный счет бота в качестве пригодности. Проблема в том, что мне нужно играть в БОЛЬШУЮ из игр.

Есть ли какая-то симуляция, которую я могу сделать? Например, могу ли я как-нибудь получить функцию f, в которой я буду кормить черты бота (например, оружие и т. Д.), И она будет возвращать соответствующие значения пригодности? Игры с открытым исходным кодом FPS предоставляют такую ​​библиотеку?

Другой вариант - войти в исходный код игры, а затем продолжить моделирование различных сценариев и отмечать счет в каждом сценарии. Я бы предпочел не допускать дополнительной сложности входа в исходный код игры, поскольку это короткий (1 месяц) проект.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 10 октября 2010

Я думаю, что ваш проект очень сложен для месячного проекта.

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

2 голосов
/ 10 октября 2010

Я согласен с Марком Байерсом, это слишком амбициозно для 1-месячного проекта.

В любом случае, вы можете попробовать NERO (Neuro-Evolving Robotic Operatives), которая основана на алгоритме Кена Стэнли NEAT (NeuroEvolution of Augmenting Topologies). 1007 *

Вы также можете посмотреть на документы Стэнли:

Несколько реализаций NEAT существуют для разных языков, так что это может быть началом.

0 голосов
/ 10 октября 2010

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

В качестве альтернативы, вы можете использовать Autohotkey (поиск в Google), чтобы сгенерировать последовательность нажатий клавиш и мыши и заставить бота как-то автоматически играть тупым образом.

0 голосов
/ 10 октября 2010

Ваша функция пригодности может быть в зависимости от того, сколько DPS данного бота наносит против противника, сидящего на утке. Например. пусть бот атакует игрока, и не сопротивляется.

Вы можете запомнить фитнес, поэтому повторяющиеся лица не нужно перепроверять.


В качестве альтернативы вы можете сделать буквально выживание наиболее приспособленных, назначив двух человек в разные команды и посмотрев, кто кого убьет.

Поскольку технически вам не нужна функция фитнеса, просто способ сравнить людей.

Чтобы уменьшить количество сравнений, можно сравнивать людей из каждого поколения через турнир, например

A 
  }-> A
B
        }-> C
C
  }-> C
D

, который показывает, что два верхних человека - это C, а затем A.

...