Сокобан - японский для хранителя склада и традиционная видеоигра. Игра представляет собой транспортную загадку, где игрок должен толкать все коробки в комнате в местах хранения/ целей. Возможность совершения необратимых ошибок делает эти головоломки настолько сложными, особенно для алгоритмов обучения подкрепления, которые в основном не имеют возможности думать заранее.
Репозиторий реализует игру Sokoban на основе правил, представленных бумажным воображением DeepMind, дополнило агентов для глубокого обучения подкреплению. Генерация комнаты является случайной и, следовательно, позволит тренировать глубокие нейронные сети, не переживая набор предопределенных комнат.
| Пример игры 1 | Пример игры 2 | Пример игры 3 |
|---|---|---|
![]() | ![]() | ![]() |
pip install gym-sokobangit clone [email protected]:mpSchrader/gym-sokoban.git
cd gym-sokoban
pip install -e .Ознакомьтесь с примерами того, как использовать внешнюю среду спортзала.
Каждая комната состоит из пяти основных элементов: стены, пол, коробки, коробки и игрока. У них могут быть разные состояния, не совпадают ли они с целью коробки или нет.
| Тип | Состояние | Графический | TinyWorld |
|---|---|---|---|
| Стена | Статический | ![]() | ![]() |
| Пол | Пустой | ![]() | ![]() |
| Целевая коробка | Пустой | ![]() | ![]() |
| Коробка | Вне цели | ![]() | ![]() |
| Коробка | На цель | ![]() | ![]() |
| Игрок | Вне цели | ![]() | ![]() |
| Игрок | На цель | ![]() | ![]() |
Игра предоставляет 9 действий для взаимодействия с окружающей средой. Толкайте и перемещайте действия в направлениях вверх, вниз, влево и вправо. Операция «без операции» - это пустое действие, которое ничего не меняет в окружающей среде. Картирование номеров действий с фактическими действиями выглядит следующим образом
| Действие | ИДЕНТИФИКАТОР |
|---|---|
| Нет операции | 0 |
| Подтолкнуть | 1 |
| Отталкивать | 2 |
| Толкнуть влево | 3 |
| Толкнуть направо | 4 |
| Двигаться вверх | 5 |
| Двигаться вниз | 6 |
| Двигаться влево | 7 |
| Двигайтесь правильно | 8 |
Перемещение просто движется, если в направлении есть свободное поле, что означает отсутствие блокирующей коробки или стены.
Push Push пытается переместить соседнюю коробку, если следующее поле за коробкой бесплатно. Это означает, что цепочка невозможна коробок. В случае, если в соседнем поле нет ящика, действие толкания обрабатывается так же, как и действие движения в том же направлении.
Завершение игры, толкая все на цели, дает награду в 10 на последнем шаге. Также наталкивание ящика или выключения дает вознаграждение в размере 1 соответственно -1. Кроме того, на каждом шаге дается вознаграждение -0,1, это наказывает решения со многими этапами.
| Причина | Награда |
|---|---|
| Выполнить шаг | -0.1 |
| Нажмите на цель | 1.0 |
| Выдвигать коробку с цели | -1.0 |
| Нажмите все коробки на цели | 10.0 |
Каждый раз, когда сопобанская среда загружается или сбрасывается, новая комната генерируется случайным образом. Поколение состоит из 3 этапов: поколение топологии, размещение целей и игроков, а также обратная игра.
Для создания основной топологии комнаты, состоящей из стен и пустого пола, основано на случайной прогулке, которая изменяет его направление на вероятности 0,35. На каждом этапе центрированного в текущем положении шаблон полей установлен на пустые пространства. Используемые шаблоны можно найти на рисунке 2.

Рисунок 2: Маски для создания топологии
На этом этапе игрок, включающий все целевые показатели N, помещаются на случайно выбранные пустые пространства.
Это важная этап для обеспечения решаемой комнаты. Теперь Сокобан играют в обратном порядке, где игрок может двигаться и тянуть коробки. Цель этого этапа - найти состояние комнаты с самым высоким баллом комнаты, с первым поиском глубины. Для каждой комнаты, исследованной во время поиска, оценка комнаты рассчитывается с помощью уравнения, показанного ниже. Уравнение является эвристическим подходом к оценке сложности комнаты. Boxswaps подсчитывает количество раз, когда игрок меняет коробку, чтобы вытащить. BoxDisplacement - это расстояние Манхэттена между конкретной коробкой и его целью. Пока хотя бы одна коробка находится на цели, номера всегда 0.
Сокобан имеет много разных вариантов, таких как: размер комнаты, количество коробок, режимы рендеринга или правила.
Помимо обычного рендеринга Сокобана, каждая конфигурация может быть отображена в виде TinyWorld, который имеет размер пикселя, равный размеру сетки. Чтобы получить среду, оказанную как крошечный мир, просто добавьте tiny_ перед режимом рендеринга. Например: env.render('tiny_rgb_array', scale=scale_tiny) . Шкала позволяет увеличить размер визуализированного мирового наблюдения. Использование масштаба в сочетании с режимами рендеринга, human или rgb_array , не влияет на размер выхода. Доступны режимы рендеринга:
| Режим | Описание |
|---|---|
| rgb_array | Хорошо выглядящий 2D RGB -изображение |
| человек | Отображает текущее состояние на экране |
| tiny_rgb_array | Каждый пиксель описывает один элемент в комнате |
| Tiny_human | Отображает крошечный rgb_array на экране |
Доступные конфигурации комнаты показаны в таблице ниже.
| Идентификатор комнаты | Размер сетки | Пиксели | #Boxes | Пример | TinyWorld |
|---|---|---|---|---|---|
| Sokoban-V0 | 10x10 | 160x160 | 3 | ![]() | ![]() |
| Sokoban-V1 | 10x10 | 160x160 | 4 | ![]() | ![]() |
| Sokoban-V2 | 10x10 | 160x160 | 5 | ![]() | ![]() |
| Sokoban-Small-V0 | 7x7 | 112x112 | 2 | ![]() | ![]() |
| Sokoban-Small-V1 | 7x7 | 112x112 | 3 | ![]() | ![]() |
| Sokoban-Large-V0 | 13x11 | 208x176 | 3 | ![]() | ![]() |
| Sokoban-Large-V1 | 13x11 | 208x176 | 4 | ![]() | ![]() |
| Sokoban-Large-V2 | 13x11 | 208x176 | 5 | ![]() | ![]() |
| Sokoban-Huge-V0 | 13x13 | 208x208 | 5 | ![]() | ![]() |
Обратите внимание, что большие комнаты могут занять некоторое время, особенно на ноутбуке.
Помимо обычной игры в Сокобане, этот репозиторий реализует или будет реализовать вариации, которые могут сделать игру проще или более сложной. За исключением того, что вариации не отмечают, что вариации не реализуют крошечную версию.
| Вариация | Краткое содержание | Ожидаемая сложность | Пример | Крошечный мир | Статус | Подробности |
|---|---|---|---|---|---|---|
| Фиксированные цели | Каждую коробку должна быть выдвинута на цель с одним и тем же цветом. | Сложнее | ![]() | Да | реализовано | Ридме |
| Многократный игрок | В комнате два игрока. Каждый раунд один из двух игроков может быть использован. Там нет порядка ходов между двумя игроками. | Сложнее | ![]() | Да | реализовано | Ридме |
| Push & pull | Игрок может не только толкнуть коробки, но и потянуть их. Следовательно, более необратимых движений не существует. | Полегче | ![]() | Да | реализовано | Ридме |
| Коробочка | Использование DeepMind Pregenerated Sokoban Buzzles. | Похожий | ![]() | Да | Реализовано | Ридме |
Если вы используете этот репозиторий для своего исследования, пожалуйста, сопоставьте его со следующей информацией:
@misc{SchraderSokoban2018,
author = {Schrader, Max-Philipp B.},
title = {gym-sokoban},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/mpSchrader/gym-sokoban}},
commit = {#CommitId}
}
Не стесняйтесь связаться со мной, чтобы поговорить об этом или других проектах. Либо, создав проблему, либо напишите мне на LinkedIn.
Если вы достигли конца и понравился проект, пожалуйста , покажите свою признательность, запустив этот проект .
Не стесняйтесь вносить свой вклад в этот проект, разбив репо и внедрите то, что вам не хватает. В качестве альтернативы, откройте новую проблему на случай, если вам нужна помощь или вы хотите добавить функцию.