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

Системные Требования

  • Установлен фреймворк PySC2 2.0
  • Базовые навыки программирования на Python
  1. Импортируйте base_agent, sc2_env, actions, features и приложение из Abseil Python для настроек агента и среды.

2. Определите класс, который будет содержать поведение агента. Он наследуется от класса BaseAgent.

Метод step вернет допустимое действие в соответствии с полученными наблюдениями за окружающей средой.
Вам потребуется функция с именем super, поскольку step является унаследованным методом от родительского класса. базовый агент; первый параметр — это подкласс, а второй относится к экземпляру TerranAgent.

3. Настройте среду

Здесь мы создаем экземпляр нашего класса TerranAgent. На этом этапе нам потребуется бесконечный цикл для запуска игры заново, пока вы не остановите процесс.

Вы можете выбрать любую карту, которую вы установили. Для пользователей Windows карты хранятся в папке C:\Program Files\StarCraft II\Maps\.

Вы заметите в коде, что теперь мы определили список игроков, в котором первый элемент (первый игрок) — это наш терранский агент. Второй элемент (второй игрок) — это враг, с которым вы сталкиваетесь. Это бот, раса которого выбирается случайным образом.

Мы указываем уровень сложности как very_easy. Также можно выбрать легкий, средний, средний_сложный, сложный, очень_сложный, чит_видение, чит_деньги и чит_безумие. Все уровни сложности определены в перечислении, расположенном в Класс сложности.

Затем мы можем указать разрешение для экрана (просмотр всей карты в высоком разрешении) и миникарты (просмотр всей карты в низком разрешении). Значения по умолчанию — 84 и 64 пикселя соответственно.

step_mul связан со скоростью игры. Обычно проходит от 16 до 22, что означает, что действие выполняется после этого количества игровых шагов.

game_steps_per_episode определяет продолжительность игры. Если вы установите его на 0, игра будет продолжаться до тех пор, пока вы не выиграете или не потерпите поражение.

Наконец, чтобы видеть подробную информацию об окружении во время игры, установите значение true для параметра visualize.

4. Настройте и перезагрузите агент. Затем инициализируйте временные шаги и добавьте цикл, чтобы продолжать получать действия, пока этот экземпляр игры не завершится.

После этого вы можете запустить своего агента и наблюдать, как юниты SCV (базовые юниты терранов) собирают минералы, пока не будете побеждены.

5. Добавить модуль units и импортировать случайную библиотеку в заголовочный файл.

6. Вспомогательные функции

Здесь мы создаем функции в классе TerranAgent для действий, которые нужны много раз одним и тем же образом, но применяются в разных ситуациях. Мы собираемся использовать их, чтобы построить больше терранских юнитов.

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

get_units_by_type – это функция, которая возвращает список с фактическими экземплярами входной единицы.

can_do – это функция, проверяющая, доступно ли действие ввода.

7. Постройте склад снабжения

Чтобы построить Склад снабжения, необходимо убедиться, что у вас достаточно минералов (100) и выбраны единицы КСМ. Если он у нас есть, мы можем начать строительство.

8. Построить казармы

Теперь, когда мы уже построили Склад снабжения, мы можем приступить к Казарме. Для этого требуется 150 минералов. На каждый созданный склад снабжения можно построить две казармы.

9. Если юниты SCV не выбраны, невозможно построить ни склады снабжения, ни казармы. Добавьте инструкцию для их выбора в случае, если предыдущие действия не были выполнены.

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

10. Обучайте морпехов

Наша армия будет состоять из подразделений морской пехоты. Выберите Казармы, чтобы можно было создать четыре отряда морской пехоты.

11. Наконец, отправляйте морпехов в атаку!

Определите конструктор для класса TerranAgent class.

На первом шаге игры (отловленном условием obs.first()) получите координаты своих юнитов, чтобы задать координаты атаки и отправить армию в атаку в противоположной зоне.

Теперь выберите отряды морской пехоты и отправьте их в атаку.

Теперь вы готовы бежать и побеждать!

Полный код вы можете найти здесь.

использованная литература