Sliding Puzzles Gym (SPGym)
收藏资源简介:
Sliding Puzzles Gym (SPGym) 是一个用于视觉强化学习中状态表示学习的可扩展基准数据集。该数据集扩展了经典的15-tile拼图,支持可变网格大小和观察空间,包括大型真实世界图像数据集。SPGym通过保持潜在环境动态和算法问题固定,同时增加表示学习的复杂性,提供了一个针对性的评估平台。数据集的创建过程包括生成随机初始状态和应用随机有效移动来生成初始状态。SPGym主要应用于评估强化学习代理在复杂和多样化视觉输入下的表示学习能力,旨在解决在开放世界环境中代理如何从原始感官输入中提取有意义信息的问题。
Sliding Puzzles Gym (SPGym) is a scalable benchmark dataset for state representation learning in visual reinforcement learning. This dataset extends the classic 15-tile puzzle, supports variable grid sizes and observation spaces, and includes large-scale real-world image datasets. SPGym provides a targeted evaluation platform by fixing the underlying environment dynamics and algorithmic problems while increasing the complexity of representation learning. The dataset creation process involves generating random initial states and applying random valid moves to produce state sequences for the dataset. SPGym is primarily used to evaluate the representation learning capabilities of reinforcement learning agents under complex and diverse visual inputs, aiming to solve the problem of how agents extract meaningful information from raw sensory inputs in open-world environments.
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 颜色(默认黑色)。 |




