1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/daochenzha-DouZero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

[ICML 2021] DouZero: Овладение игрой DouDizhu с помощью самообучения глубокого обучения с подкреплением

Логотип

Сборка Версия PyPI Загрузки Загрузки за месяц Лицензия Открыть в Colab

Документация на русскомDouZero — это фреймворк обучения с подкреплением для игры DouDizhu (斗地主), самой популярной карточной игры в Китае. Цель этой игры типа "слив" — как можно скорее избавиться от всех карт в руках, передав их другим игрокам. DouDizhu представляет собой очень сложное поле соперничества, сотрудничества, неполной информации, большого пространства состояний и особенно огромного множества возможных действий, где легальные действия значительно различаются от хода к ходу. DouZero был создан командой AI Platform компании Kwai Inc. (快手).

*知乎:https://zhuanlan.zhihu.com/p/526723604

  • Разные ресурсы: Вы слышали о данных-центричной искусственной интеллект? Пожалуйста, проверьте нашу опрос по данным-центричному ИИorg/abs/2303.10158) и awesome данные-центричные ИИ ресурсы! Комьюнити:

  • Slack: Обсуждение в канале DouZero.

  • Группа QQ: Присоединяйтесь к нашей группе QQ для обсуждения. Пароль: douzeroqqgroup * Группа 1: 819204202

    • Группа 2: 954183174
    • Группа 3: 834954839
    • Группа 4: 211434658
    • Группа 5: 189203636

Новости:

  • Благодарим @Vincentzyx за его вклад в активацию обучения на процессорах. Теперь пользователи Windows могут обучаться с использованием ЦПУ.

Демонстрация

Цитирование работы

Если вы считаете этот проект полезным для ваших исследований, пожалуйста, цитируйте нашу статью:Zha, Daochen et al. "DouZero: Овладение игрой DouDizhu с помощью самообучения глубинного обучения с подкреплением." ICML (2021).

@InProceedings{pmlr-v139-zha21a,
   title =        {DouZero: Овладение игрой DouDizhu с помощью самообучения глубинного обучения с подкреплением},
   author =       {Zha, Daochen and Xie, Jingru and Ma, Wenye and Zhang, Sheng and Lian, Xiangru and Hu, Xia and Liu, Ji},
   booktitle =    {Программы Международной конференции по машинному обучению},
   pages =        {12333--12344},
   year =         {2021},
   editor =       {Meila, Marina and Zhang, Tong},
   volume =       {139},
   series =       {Программы исследования машинного обучения},
   month =        {18--24 июля},
   publisher =    {PMLR},
   pdf =          {http://proceedings.mlr.press/v139/zha21a/zha21a.pdf},
   url =          {http://proceedings.mlr.press/v139/zha21a.html},
   abstract =     {Игры являются абстракциями реального мира, где искусственные агенты учатся соперничать и сотрудничать с другими агентами. Хотя значительные достижения были сделаны в различных играх с полной и неполной информацией, DouDizhu (также известная как "Борьба с землевладельцем"), трехкарточная игра для трёх игроков, остаётся нерешённой. DouDizhu представляет собой очень сложную область с соперничеством, сотрудничеством, неполной информацией, большим пространством состояний и особенно огромным множеством возможных действий, где легальные действия значительно различаются от хода к ходу. К сожалению, современные алгоритмы обучения с подкреплением в основном сосредоточены на простых и маленьких пространствах действий, и неудивительно, что они показывают недостаточный прогресс в DouDizhu.}
}
```В этой работе мы предлагаем концептуально простую, но эффективную систему искусственного интеллекта для игры DouDizhu, называемую DouZero, которая усиливает традиционные методы Монте-Карло с использованием глубоких нейронных сетей, кодирования действий и параллельных акторов. Начиная с чистого поля на одном сервере с четырьмя GPU, DouZero превзошла все существующие программы искусственного интеллекта для игры DouDizhu за несколько дней обучения и заняла первое место среди 344 программ искусственного интеллекта на лидерборде Botzone. Создание DouZero демонстрирует, что классические методы Монте-Карло могут быть адаптированы для получения сильных результатов в сложной области с большим пространством действий. Исходный код и онлайн-демо доступны по адресу https://github.com/kwai/DouZero с надеждой, что этот подход может мотивировать будущие работы.

### ## Что делает DouDizhu сложной?Кроме вызова неполной информации, DouDizhu имеет огромное пространство состояний и действий. В частности, пространство действий в DouDizhu составляет \(10^4\) (см. [этот таблицу](https://github.com/datamllab/rlcard#available-environments)). К сожалению, большинство алгоритмов обучения с подкреплением могут обрабатывать только очень маленькие пространства действий. Кроме того, игроки в DouDizhu должны как конкурировать, так и сотрудничать с другими в частично-наблюдаемой среде с ограниченной коммуникацией, то есть два игрока "крестьян" будут играть за одну команду против игрока "землевладелец". Моделирование как конкуренции, так и сотрудничества является открытой исследовательской задачей.

В этой работе мы предлагаем алгоритм Глубокого Монте-Карло (Deep Monte Carlo, DMC) с кодированием действий и параллельными актёрами. Это приводит к очень простому, но удивительно эффективному решению для DouDizhu. Подробнее читайте в [нашей статье](https://arxiv.org/abs/2106.06135).

## Установка

Код тренировки предназначен для GPU. Поэтому вам нужно установить CUDA, если вы хотите обучать модели. Вы можете обратиться к [этому руководству](https://docs.nvidia.com/cuda/index.html#installation-guides). Для оценки CUDA необязательна, и вы можете использовать CPU для оценки.

Сначала клонируйте репозиторий с помощью (если вы в Китае и GitHub медленный, вы можете использовать зеркало на [Gitee](https://gitee.com/daochenzha/DouZero)):```bash
git clone https://github.com/kwai/DouZero.git

Убедитесь, что установлен Python версии 3.6+. Установите зависимости:

cd douzero
pip3 install -r requirements.txt

Мы рекомендуем установить стабильную версию DouZero с помощью

pip3 install douzero

Если вы в Китае и вышеупомянутая команда слишком медленная, вы можете использовать зеркало, предоставленное университетом Циньхуа:

pip3 install douzero -i https://pypi.tuna.tsinghua.edu.cn/simple

или установите последнюю версию (она может быть нестабильной):

pip3 install -e .
```Обратите внимание, что пользователи Windows могут использовать только CPU в качестве акторов. Смотрите [Проблемы в Windows](README.md#issues-in-windows) о том, почему не поддерживаются GPU. Тем не менее, пользователи Windows всё ещё могут [локально запустить демо](https://github.com/datamllab/rlcard-showdown).

## Обучение
Чтобы использовать GPU для обучения, выполните
```bash
python3 train.py

Это обучит DouZero на одном GPU. Чтобы обучить DouZero на нескольких GPU, используйте следующие аргументы.

  • --gpu_devices: какие GPU устройства видимы
  • --num_actor_devices: сколько из GPU устройств будет использоваться для симуляции, то есть самопроигрывания
  • --num_actors: сколько процессов акторов будет использоваться для каждого устройства
  • --training_device: какое устройство будет использоваться для обучения DouZero

Например, если у вас есть 4 видеокарты, где вы хотите использовать первые три видеокарты для симуляции с 15 актёрами каждая и четвёртую видеокарту для обучения, можно запустить следующую команду:

python3 train.py --gpu_devices 0,1,2,3 --num_actor_devices 3 --num_actors 15 --training_device 3

Для использования обучения на CPU или симуляции (Windows может использовать только CPU для акторов), используйте следующие аргументы:

  • --training_device cpu: Использует CPU для обучения модели
  • --actor_device_cpu: Использует CPU как акторовНапример, используйте следующую команду для выполнения всего на ЦПУ:
python3 train.py --actor_device_cpu --training_device cpu

Следующая команда выполняет актёров только на ЦПУ:

python3 train.py --actor_device_cpu

Для более специфической конфигурации обучения, воспользуйтесь следующими необязательными аргументами:

--xpid XPID           Experiment ID (default: douzero)
--save_interval SAVE_INTERVAL
                      Интервал времени (в минутах), через который модель будет сохраняться
--objective {adp, wp}  Использует ADP или WP в качестве цели (по умолчанию: ADP)
--actor_device_cpu    Использует ЦПУ как устройство актёров
--gpu_devices GPU_DEVICES
                      Какие видеокарты будут использоваться для обучения
--num_actor_devices NUM_ACTOR_DEVICES
                      Количество устройств, используемых для симуляции
--num_actors NUM_ACTORS
                      Количество актёров для каждого устройства симуляции
--training_device TRAINING_DEVICE
                      Индекс видеокарты, используемой для обучения моделей. `cpu` означает использование ЦПУ
--load_model          Загружает существующую модель
--disable_checkpoint  Отключает сохранение контрольной точки
--savedir SAVEDIR     Корневая директория, куда будут сохранены данные эксперимента
--total_frames TOTAL_FRAMES
                      Общее количество окружений для обучения
--exp_epsilon EXP_EPSILON
                      Вероятность для исследования
--batch_size BATCH_SIZE
                      Размер пакета обучения
--unroll_length UNROLL_LENGTH
                      Длина развертки (временная размерность)
--num_buffers NUM_BUFFERS
```                      Количество буферов общего доступа
 --num_threads NUM_THREADS
                       Количество потоков обучения
 --max_grad_norm MAX_GRAD_NORM
                       Максимальная норма градиентов
 --learning_rate LEARNING_RATE
                       Скорость обучения
 --alpha ALPHA         Константа сглаживания RMSProp
 --momentum MOMENTUM   Импульс RMSProp
 --epsilon EPSILON     Эпсилон RMSProp
 ```## Оценка
 Оценка может быть выполнена с использованием GPU или CPU (GPU будет намного быстрее). Предобученная модель доступна по ссылкам [Google Drive](https://drive.google.com/drive/folders/1NmM2cXnI5CIWHaLJeoDZMiwt6lOTV_UB?usp=sharing) или [百度网盘](https://pan.baidu.com/s/18g-JUKad6D8rmBONXUDuOQ),提取码: 4624. Установите предобученные веса в папку `baselines/`. Оценка производится через самопрокладывание. Мы предоставили предобученные модели и некоторые эвристики как базовые линии:
 *   [случайный](douzero/evaluation/random_agent.py): агенты, играющие случайно (равномерно)
 *   [rlcard](douzero/evaluation/rlcard_agent.py): правило-основной агент в [RLCard](https://github.com/datamllab/rlcard)
 *   SL (`baselines/sl/`): предобученные глубокие агенты на данных людей
 *   DouZero-ADP (`baselines/douzero_ADP/`): предобученные агенты DouZero с целью среднего значения очков (Average Difference Points, ADP)
 *   DouZero-WP (`baselines/douzero_WP/`): предобученные агенты DouZero с целью процента побед (Winning Percentage, WP)### Шаг 1: Генерация данных для оценки
```bash
python3 generate_eval_data.py

Некоторые важные гиперпараметры указаны ниже.

  • --output: куда будут сохранены сериализованные данные
  • --num_games: количество случайных игр, которое будет сгенерировано, значение по умолчанию — 10000### Шаг 2: Самопрокладывание
python3 evaluate.py

Некоторые важные гиперпараметры указаны ниже.

  • --landlord: какой агент будет играть за землевладельца, что может быть случайным, rlcard или путь предобученной модели
  • --landlord_up: какой агент будет играть за землевладельца верхней части (тот, кто играет перед землевладельцем), что может быть случайным, rlcard или путь предобученной модели
  • --landlord_down: какой агент будет играть за землевладельца нижней части (тот, кто играет после землевладельца), что может быть случайным, rlcard или путь предобученной модели
  • --eval_data: пикл-файл, содержащий данные для оценки
  • --num_workers: количество подпроцессов, которое будет использоваться
  • --gpu_device: какой GPU использовать. По умолчанию используется CPU. Например, следующая команда оценивает DouZero-ADP в позиции землевладельца против случайных агентов
python3 evaluate.py --landlord baselines/douzero_ADP/landlord.ckpt --landlord_up random --landlord_down random

Следующая команда оценивает DouZero-ADP в позиции крестьян против агентов RLCard

python3 evaluate.py --landlord rlcard --landlord_up baselines/douzero_ADP/landlord_up.ckpt --landlord_down baselines/douzero_ADP/landlord_down.ckpt

По умолчанию наша модель будет сохраняться в douzero_checkpoints/douzero каждые полчаса. Мы предоставляем скрипт, чтобы помочь вам определить самый свежий чекпоинт. Выполните

sh get_most_recent.sh douzero_checkpoints/douzero/

Самая свежая модель будет находиться в most_recent_model.

Проблемы в WindowsВы можете столкнуться с ошибкой операция не поддерживается, если используете систему Windows для обучения с использованием GPU как акторов. Это связано с тем, что многопоточность на CUDA-тензорах не поддерживается в Windows. Однако наш код широко использует CUDA-тензоры, так как он оптимизирован для работы с GPU. Обратитесь к нам, если вы найдете какие-либо решения!## Основная команда

Благодарности

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

[ICML2021] DouZero: искусственный интеллект для игры в Баккара. Обучение с подкреплением с нуля через самоигру. Развернуть Свернуть
Python и 2 других языков
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/daochenzha-DouZero.git
git@api.gitlife.ru:oschina-mirror/daochenzha-DouZero.git
oschina-mirror
daochenzha-DouZero
daochenzha-DouZero
main