Как мне сделать обучающий агент подкрепления в Java? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть вызов, который мой учитель дал, чтобы разбить армию своих солдат по сетке 18x24 со случайными препятствиями на доске. Игра пошаговая, и у меня есть армия из 50 солдат, каждый из которых должен либо двигаться, либо атаковать в свой ход.

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

Я хочу знать, как бы я создал обучающий агент для подкрепления в Java, к которому у меня есть доступ. Если вы знаете какие-либо способы сделать это или какие-либо ресурсы, которые могут помочь, это было бы здорово. Спасибо за помощь!

1 Ответ

1 голос
/ 24 октября 2019

Java не является хорошим языком для выполнения сложных математических вычислений (это то, что вам нужно будет сделать для RL). Вы можете попытаться реализовать алгоритмы Q-Learning, Value-Iteration или Policy-iteration, но я бы избегал делать что-либо с нейронными сетями / современными подходами глубокого RL, поскольку ваша рабочая нагрузка значительно возрастет.

Что касается вашей проблемы, если вы хотите реализовать один из алгоритмов старой школы. Подумайте о своем состоянии и пространстве действия. У меня есть серьезные опасения по поводу размера вашего пространства действия, даже с небольшим количеством ходов для каждого солдата (скажем, 3 - атака, движение вверх, движение вниз) с 50 солдатами, пространство действия будет очень большим - 50 ^ 3, дажесо многими из них будет трудно иметь дело, больше (даже 4 или 5) отправит вас глубоко в некоторые сложные темы в RL.

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

Короткий ответ: это не то, что нужно воспринимать легкомысленно, это будет сложным и трудоемким даже для тех, кто имеет опыт работы в этой области, и использование Java - нет-нет (лучше Python). Учитывая, что вам, вероятно, не придется долго искать хорошее решение, я бы порекомендовал попробовать другой подход - возможно, основанный на планировании, или жесткий код разумной стратегии.

Если вы все еще хотите продолжить и прочитать эту тему, вот несколько хороших ресурсов:

  • Укрепление, изучение введения (Саттон и Барто) -подойдет любое издание
  • Отдельные главы в Искусственный интеллект: современный подход (Рассел и Норвиг)

Надеюсь, что это поможет, и извините, что это не такмы надеемся ответить вам

...