Sliding Puzzles Gym (SPGym)
收藏Sliding Puzzles Gym Environment
简介
Sliding Puzzles Gym (SPGym) 是一个可定制的 Gymnasium 兼容环境,用于训练和评估强化学习算法在滑动拼图任务上的表现。该环境支持多种拼图尺寸、基于图像的拼图和不同的渲染模式,允许对算法在不同复杂度和输入模式下的性能进行全面分析。
主要功能
- 比较不同强化学习算法在学习有用状态表示方面的有效性。
- 分析代理在拼图观察空间中的泛化能力。
- 研究不同环境参数和算法变化对表示学习性能的影响。
安装
通过以下命令安装 SPGym: bash pip install sliding-puzzles
或者克隆仓库并安装为可编辑包: bash git clone https://github.com/bryanoliveira/sliding-puzzles-gym cd sliding-puzzles-gym pip install -e .
使用
在项目中使用 SPGym 的步骤如下:
- 导入环境: python import sliding_puzzles
基于图像的拼图
env = sliding_puzzles.make(w=3, variation="image", image_folder="imagenet-1k", image_pool_size=2, render_mode="human")
基于数字的拼图
env = sliding_puzzles.make(w=3, variation="onehot", render_mode="state")
或者使用 Gymnasium 创建环境
import gymnasium import sliding_puzzles env = gymnasium.make("SlidingPuzzles-v0", w=3, variation="image", image_folder="imagenet-1k", image_pool_size=2, render_mode="human")
- 与环境交互: python obs = env.reset() done = False
while not done: action = env.action_space.sample() # 替换为代理的动作 obs, reward, terminated, truncated, info = env.step(action) env.render()
env.close()
环境详情
- 观察空间:包括原始(2D 状态数组)、onehot(1D 状态数组)和图像(拼图上的图像叠加)。
- 动作空间:离散,有四个可能的动作:0(上)、1(下)、2(左)、3(右)。其他整数被视为无操作。
- 奖励函数:默认奖励是所有拼图块到目标位置的负归一化距离(浮点数,介于 -1 和 0 之间)。默认情况下,解决拼图的奖励为 +10。
- 回合终止:当拼图解决(终止)或达到最大步数(截断)时,回合结束。
环境参数
Sliding Puzzle 环境可以通过以下参数进行自定义:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
w |
Optional[int] | None | 拼图网格的宽度。如果未指定,则设置为与 h 相同的值。 |
h |
Optional[int] | None | 拼图网格的高度。如果未指定,则设置为与 w 相同的值。 |
render_mode |
str | "state" | 确定环境的渲染方式。选项:"state", "human", "rgb_array"。 |
render_size |
tuple | (32, 32) | 渲染图像的大小(宽度 x 高度)。 |
sparse_rewards |
bool | False | 如果为 True,提供稀疏奖励;否则,提供密集奖励。 |
win_reward |
float | 10 | 拼图解决时的奖励。 |
move_reward |
float | -0.1 | 每次移动的奖励(应为非正值)。 |
invalid_move_reward |
Optional[float] | -1 | 无效移动的奖励。如果为 None,则无效移动不受到惩罚。 |
circular_actions |
bool | False | 如果为 True,允许在网格边缘环绕。 |
blank_value |
int | -1 | 用于表示空白拼图块的值(必须为非正值)。 |
reward_mode |
str | "distances" | 确定奖励的计算方式。选项:"distances", "percent_solved"。 |
shuffle_mode |
str | "fast" | 用于打乱拼图的方法。选项:"fast", "serial"。 |
shuffle_steps |
int | 100 | 打乱拼图时使用的步数(仅适用于 "serial" 打乱模式)。 |
shuffle_target_reward |
Optional[float] | None | 打乱期间达到的目标奖励(如果指定,必须为负值)。 |
shuffle_render |
bool | False | 如果为 True,在打乱期间渲染环境。 |
max_episode_steps |
Optional[int] | 1000 | 每个回合的最大步数。如果为 None,则没有限制。 |
seed |
Optional[int] | None | 随机数生成器的种子。如果为 None,则生成随机种子。 |
图像变化参数
图像变化的 Sliding Puzzle 环境接受以下附加参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
image_folder |
str | "single" | 包含用于拼图的图像的文件夹。 |
image_pool_size |
Optional[int] | None | 从文件夹中使用的图像数量。如果为 None,则使用文件夹中的所有图像。 |
image_pool_seed |
Optional[int] | None | 从池中随机选择图像的种子。如果为 None,则使用随机种子。 |
image_size |
tuple | (84, 84) | 渲染图像的大小(宽度 x 高度)。 |
background_color_rgb |
tuple | (0, 0, 0) | 背景的 RGB 颜色(默认黑色)。 |




