PUZZLES
收藏资源简介:
PUZZLES是由苏黎世联邦理工学院的研究团队基于Simon Tatham的便携式谜题集合开发的强化学习基准数据集,包含40种不同复杂度的逻辑谜题。这些谜题具有可调整的大小和难度,适用于评估强化学习代理的算法和逻辑推理能力。数据集的创建过程中,研究团队将原始C源代码扩展至Pygame库标准,并集成到Gymnasium框架API中,使得用户可以灵活调整谜题的难度和大小。PUZZLES主要应用于强化学习领域,旨在推动算法和逻辑推理在机器学习中的应用和发展。
PUZZLES is a reinforcement learning benchmark dataset developed by a research team from ETH Zurich based on Simon Tatham's Portable Puzzle Collection, which contains 40 distinct logic puzzles with varying complexity levels. These puzzles feature adjustable sizes and difficulty settings, making them suitable for evaluating the algorithms and logical reasoning capabilities of reinforcement learning agents. During the dataset's creation, the research team extended the original C source code to conform to Pygame library standards and integrated it into the Gymnasium framework API, allowing users to flexibly adjust the difficulty and size of the puzzles. PUZZLES is primarily applied in the field of reinforcement learning, aiming to promote the application and advancement of algorithms and logical reasoning in machine learning.
PUZZLES: A Benchmark for Neural Algorithmic Reasoning
描述
本代码支持提交的 PUZZLES: A Benchmark for Neural Algorithmic Reasoning。
我们提供 RLP,一个基于 Simon Tathams Portable Puzzle Collection 的强化学习(RL)环境,设计用于与 Faramas Gymnasium RL 工具一起使用。
除了 RLP,您还可以找到用于重现论文中结果的脚本。为此,我们在下面提供了使用说明。
安装指南
要求
Python 3.10+,一个较新的 C 编译器,如 GCC 或 Clang,CMake 3.26。
我们仅在 Linux 上测试了代码。
逐步指南
-
将 git 仓库克隆到您的本地机器。 shell git clone https://github.com/ETH-DISCO/rlp.git
-
进入目录。 shell cd rlp
-
安装所有必需的包并构建 C 库。 shell ./install.sh
-
激活
RLP的虚拟 Python 环境。 shell source rlpvenv/bin/activate
使用指南
成功遵循安装指南后,您现在可以运行 RLP 环境!
初始化一个谜题时,必须提供所需的谜题名称。请参考谜题名称列表。
您可以在 experiment_commands.txt 中找到重现论文实验的确切命令。
训练一个代理
要在特定谜题中训练代理,请在仓库的顶层运行以下命令: shell ./run_training.py --puzzle <谜题名称> --arg <参数>
运行 ./run_training.py --help 以获取可自定义选项的完整范围。
请参考谜题名称列表。
运行先前训练的代理
要在特定谜题上运行先前训练的代理,请在仓库的顶层运行以下命令: shell ./run_trained_agent.py --puzzle <谜题名称> --arg <参数>
运行 ./run_trained_agent.py --help 以获取可自定义选项的完整范围。
请参考谜题名称列表。
随机代理
要在其中一个谜题中让代理执行随机动作,请在仓库的顶层运行以下命令: shell ./run_random.py --puzzle <谜题名称> --arg <参数>
运行 ./run_random.py --help 以获取可自定义选项的完整范围。
请参考谜题名称列表。
手动游玩
要手动玩其中一个谜题,请在仓库的顶层运行以下命令: shell ./run_puzzle.py --puzzle <谜题名称>
运行 ./run_puzzle.py --help 以获取可自定义选项的完整范围。
请参考谜题名称列表。
谜题名称列表
<table> <tbody> <tr> <td width=20% align=center> blackbox </td> <td width=20% align=center> bridges </td> <td width=20% align=center> cube </td> <td width=20% align=center> dominosa </td> <td width=20% align=center> fifteen </td> </tr> <tr> <td width=20% align=center> filling </td> <td width=20% align=center> flip </td> <td width=20% align=center> flood </td> <td width=20% align=center> galaxies </td> <td width=20% align=center> guess </td> </tr> <tr> <td width=20% align=center> inertia </td> <td width=20% align=center> keen </td> <td width=20% align=center> lightup </td> <td width=20% align=center> loopy </td> <td width=20% align=center> magnets </td> </tr> <tr> <td width=20% align=center> map </td> <td width=20% align=center> mines </td> <td width=20% align=center> mosaic </td> <td width=20% align=center> net </td> <td width=20% align=center> netslide </td> </tr> <tr> <td width=20% align=center> palisade </td> <td width=20% align=center> pattern </td> <td width=20% align=center> pearl </td> <td width=20% align=center> pegs </td> <td width=20% align=center> range </td> </tr> <tr> <td width=20% align=center> rect </td> <td width=20% align=center> samegame </td> <td width=20% align=center> signpost </td> <td width=20% align=center> singles </td> <td width=20% align=center> sixteen </td> </tr> <tr> <td width=20% align=center> slant </td> <td width=20% align=center> solo </td> <td width=20% align=center> tents </td> <td width=20% align=center> towers </td> <td width=20% align=center> tracks </td> </tr> <tr> <td width=20% align=center> twiddle </td> <td width=20% align=center> undead </td> <td width=20% align=center> unequal </td> <td width=20% align=center> unruly </td> <td width=20% align=center> untangle </td> </tr> </tbody> </table>
开发者笔记
自定义奖励结构
可以使用 Gymnasium 环境包装器(文档)来提供自定义奖励,以改进代理的学习过程。谜题的内部游戏状态在每次 step() 后由环境创建的 info 字典中提供。其属性可以使用以下方式访问:
python
info[puzzle_state][<属性名称>]
示例可以在 custom_rewards_example.py 中找到。
添加新谜题
可以通过创建包含游戏逻辑和相关数据结构的新 C 后端来添加新谜题。更多详细信息请参考 Simon Tatham 的开发者文档。新 C 文件应放置在 puzzles 文件夹中,其他后端文件也位于该文件夹中。随后,需要通过在 puzzles/CMakeLists.txt 中添加条目来将新谜题添加到构建系统中。
此外,环境中的某些函数需要实现或调整,例如检索包含谜题逻辑状态的字典。相关代码需要在 rlp/specific_api.py 和 rlp/envs/observation_spaces.py 文件中进行修改。
<table> <tr> <th> 函数 </th> <th> 描述 </th> </tr>
<tr>
<td> <pre> make_puzzle_state() </pre> </td>
<td> 将表示谜题内部逻辑状态的数据结构转换为 Python 字典。 </td>
</tr>
<tr>
<td> <pre> set_api_structures_newpuzzle() </pre> </td>
<td> 设置后端的 <i>game_params</i>、<i>game_ui</i>、<i>game_drawstate</i>、<i>game_state</i> 及其相关类的 <i>ctypes</i> 定义。 </td>
</tr>
<tr>
<td> <pre> get_action_keys_newpuzzle() </pre> </td>
<td> 返回一个包含用于玩谜题的所有键盘键的 <i>dict</i>。 </td>
</tr>
<tr>
<td> <pre> get_observation_space_newpuzzle() </pre> </td>
<td> 返回一个包含谜题内部数据观察空间的 <i>dict</i>。 </td>
</tr>
<tr>
<td> <pre> get_observation_newpuzzle() </pre> </td>
<td> 返回一个包含谜题内部数据观察的 <i>dict</i>。 </td>
</tr> </table>
对于后四个函数,需要在 set_api_structures_methods、get_action_keys_methods、get_observation_space_methods 和 get_observation_methods 这四个字典中分别添加新函数。
许可证
RLP 代码在 CC BY-NC 4.0 许可证下发布。更多信息请参见 LICENSE。
Simon Tathams Portable Puzzle Collection 在 MIT 许可证下发布,参见 puzzles/LICENCE。

- 1PUZZLES: A Benchmark for Neural Algorithmic Reasoning苏黎世联邦理工学院 · 2024年



