Sokoban是日本仓库门将和传统视频游戏的日语。该游戏是一个运输难题,玩家必须在存储位置/目标的房间中推动所有盒子。犯不可逆的错误的可能性使这些难题变得如此具有挑战性,尤其是对于强化学习算法而言,这些难题大多缺乏思考的能力。
存储库根据呈现DeepMind的纸张想象的规则来实现游戏,增强了深度加强学习的代理。房间的一代是随机的,因此将允许训练深层神经网络,而不会在一组预定义的房间上过度拟合。
| 示例游戏1 | 示例游戏2 | 示例游戏3 |
|---|---|---|
![]() | ![]() | ![]() |
pip install gym-sokobangit clone [email protected]:mpSchrader/gym-sokoban.git
cd gym-sokoban
pip install -e .结帐有关如何使用外部健身房环境的示例。
每个房间都由五个主要要素组成:墙壁,地板,盒子,盒子目标和一个玩家。无论是否与盒子目标重叠,他们可能都有不同的状态。
| 类型 | 状态 | 形象的 | 小世界 |
|---|---|---|---|
| 墙 | 静止的 | ![]() | ![]() |
| 地面 | 空的 | ![]() | ![]() |
| 盒子目标 | 空的 | ![]() | ![]() |
| 盒子 | 关闭目标 | ![]() | ![]() |
| 盒子 | 在目标上 | ![]() | ![]() |
| 球员 | 关闭目标 | ![]() | ![]() |
| 球员 | 在目标上 | ![]() | ![]() |
该游戏提供了9种与环境互动的动作。将动作推向向上,向下,左右向方向。无操作行动是一个无效的动作,它不会改变环境中的任何内容。将动作编号映射到实际动作的实际操作如下
| 行动 | ID |
|---|---|
| 没有操作 | 0 |
| 俯卧撑 | 1 |
| 向下推 | 2 |
| 向左推 | 3 |
| 向右推 | 4 |
| 向上移动 | 5 |
| 向下移动 | 6 |
| 向左移动 | 7 |
| 向右移动 | 8 |
移动只需移动,如果方向上有一个自由场,则意味着没有阻塞框或墙壁。
如果盒子后面的下一个字段是免费的,则推动尝试将相邻盒子移动。这意味着不可能推动盒子的链条推动。如果相邻字段没有盒子,则推动动作的处理方式与移动动作向相同方向相同。
在最后一步中,通过推动所有目标来完成比赛的奖励。同样将目标推入目标或关闭目标的奖励分别为-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 |
可用的房间配置如下表所示。
| 房间ID | 网格大小 | 像素 | #框 | 例子 | 小世界 |
|---|---|---|---|---|---|
| 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-buge-V0 | 13x13 | 208x208 | 5 | ![]() | ![]() |
请注意,较大的房间可能需要一些时间才能创建,尤其是在笔记本电脑上。
除了常规的Sokoban游戏外,该存储库实施或将实施变化,这可能会使游戏更容易或更复杂。除了指出不同之外,变化没有实现微小的版本。
| 变化 | 概括 | 预期的困难 | 例子 | 微小的世界 | 地位 | 细节 |
|---|---|---|---|---|---|---|
| 固定目标 | 每个盒子都必须用相同的颜色推到目标上。 | 更困难 | ![]() | 是的 | 实施的 | 读书我 |
| 多个玩家 | 房间里有两个玩家。可以使用两个球员中的每一轮。两个球员之间没有移动的顺序。 | 更困难 | ![]() | 是的 | 实施的 | 读书我 |
| 推和拉 | 玩家不仅可以推动盒子,还可以拉它们。因此,不再存在不可逆转的举动。 | 更轻松 | ![]() | 是的 | 实施的 | 读书我 |
| Boxoban | 通过深态预生物的索科邦拼图的用途。 | 相似的 | ![]() | 是的 | 实施的 | 读书我 |
如果您使用此存储库进行研究,请用以下信息引用它:
@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上寄给我。
如果您到达结束并喜欢该项目,请通过启动此项目来表示感谢。
通过分配存储库并实施您所缺少的一切,可以随意为该项目做出贡献。另外,请打开一个新问题,以防您需要帮助或想要添加功能。