如何使用Minigrid创建自定义强化学习环境:完整教程

张开发
2026/4/18 16:04:51 15 分钟阅读

分享文章

如何使用Minigrid创建自定义强化学习环境:完整教程
如何使用Minigrid创建自定义强化学习环境完整教程【免费下载链接】MinigridSimple and easily configurable grid world environments for reinforcement learning项目地址: https://gitcode.com/gh_mirrors/mi/MinigridMinigrid是一个简单且高度可配置的网格世界环境库专为强化学习研究和开发设计。本教程将带您逐步了解如何利用Minigrid的核心功能创建属于自己的强化学习环境即使您是没有太多经验的新手也能轻松掌握。为什么选择Minigrid创建强化学习环境Minigrid提供了灵活的环境构建框架让开发者能够快速设计各种网格世界场景。其核心优势包括简单易用基于Python的简洁API无需复杂配置即可快速上手高度可定制支持自定义网格大小、物体类型、任务目标和奖励机制丰富组件库内置多种物体门、钥匙、目标等和环境模板可视化工具提供直观的环境渲染功能便于调试和演示Minigrid的MultiRoomEnv展示了复杂网格环境的可能性准备工作安装Minigrid在开始创建自定义环境之前需要先安装Minigrid库。推荐使用以下命令从官方仓库获取最新版本git clone https://gitcode.com/gh_mirrors/mi/Minigrid cd Minigrid pip install -e .安装完成后您可以通过导入minigrid模块来验证安装是否成功import minigrid print(Minigrid版本:, minigrid.__version__)从零开始创建自定义环境基础环境类结构创建自定义环境的第一步是定义一个继承自MiniGridEnv的类。以下是基本的模板代码from minigrid.core.mission import MissionSpace from minigrid.minigrid_env import MiniGridEnv class SimpleEnv(MiniGridEnv): def __init__( self, size8, agent_start_pos(1, 1), agent_start_dir0, max_stepsNone, **kwargs, ): self.agent_start_pos agent_start_pos self.agent_start_dir agent_start_dir # 定义任务空间 mission_space MissionSpace(mission_funcself._gen_mission) super().__init__( mission_spacemission_space, grid_sizesize, max_stepsmax_steps or 4*size**2, **kwargs, ) staticmethod def _gen_mission(): return 找到目标位置这个基础结构包含了环境的基本参数设置包括网格大小、智能体初始位置和方向以及任务描述生成函数。生成网格世界Minigrid环境的核心是_gen_grid方法负责创建网格布局。让我们逐步构建一个包含墙壁、钥匙、门和目标的完整环境1. 创建基本网格和边界首先创建一个空网格并添加边界墙壁def _gen_grid(self, width, height): # 创建空网格 self.grid Grid(width, height) # 添加边界墙壁 self.grid.wall_rect(0, 0, width, height) # 放置智能体 if self.agent_start_pos is not None: self.agent_pos self.agent_start_pos self.agent_dir self.agent_start_dir else: self.place_agent()此时的环境是一个空房间只有边界墙壁和智能体基本网格环境包含边界墙壁和智能体初始位置2. 添加目标位置接下来我们在网格中添加一个目标位置作为智能体的任务目标# 在右下角放置目标 self.put_obj(Goal(), width - 2, height - 2)添加目标后的环境如下所示添加了目标位置的网格环境3. 创建分隔墙为了增加环境复杂度我们可以添加分隔墙将空间分为多个区域# 创建垂直分隔墙 for i in range(0, height): self.grid.set(5, i, Wall())添加分隔墙后的效果添加了垂直分隔墙的网格环境4. 添加钥匙和门最后我们添加一把钥匙和一扇锁着的门创建需要解决的谜题from minigrid.core.constants import COLOR_NAMES from minigrid.core.world_object import Door, Key # 放置锁着的门 self.grid.set(5, 6, Door(COLOR_NAMES[0], is_lockedTrue)) # 放置对应的钥匙 self.grid.set(3, 6, Key(COLOR_NAMES[0]))现在我们的环境包含了完整的探索元素包含钥匙、门和目标的完整网格环境完整的自定义环境代码将以上所有部分组合起来我们得到完整的自定义环境代码from __future__ import annotations from minigrid.core.constants import COLOR_NAMES from minigrid.core.grid import Grid from minigrid.core.mission import MissionSpace from minigrid.core.world_object import Door, Goal, Key, Wall from minigrid.manual_control import ManualControl from minigrid.minigrid_env import MiniGridEnv class SimpleEnv(MiniGridEnv): def __init__( self, size10, agent_start_pos(1, 1), agent_start_dir0, max_stepsNone, **kwargs, ): self.agent_start_pos agent_start_pos self.agent_start_dir agent_start_dir mission_space MissionSpace(mission_funcself._gen_mission) if max_steps is None: max_steps 4 * size**2 super().__init__( mission_spacemission_space, grid_sizesize, see_through_wallsTrue, max_stepsmax_steps, **kwargs, ) staticmethod def _gen_mission(): return 找到钥匙打开门到达目标位置 def _gen_grid(self, width, height): # 创建空网格 self.grid Grid(width, height) # 添加边界墙壁 self.grid.wall_rect(0, 0, width, height) # 创建垂直分隔墙 for i in range(0, height): self.grid.set(5, i, Wall()) # 放置门和钥匙 self.grid.set(5, 6, Door(COLOR_NAMES[0], is_lockedTrue)) self.grid.set(3, 6, Key(COLOR_NAMES[0])) # 放置目标 self.put_obj(Goal(), width - 2, height - 2) # 放置智能体 if self.agent_start_pos is not None: self.agent_pos self.agent_start_pos self.agent_dir self.agent_start_dir else: self.place_agent() self.mission self._gen_mission() def main(): # 创建环境并启用手动控制 env SimpleEnv(render_modehuman) manual_control ManualControl(env, seed42) manual_control.start() if __name__ __main__: main()测试自定义环境要测试您创建的环境可以运行上面代码中的main函数它会启动一个手动控制界面python your_env_file.py在手动控制模式下您可以使用以下按键控制智能体方向键移动智能体空格执行动作拾取/使用物品Q退出高级定制技巧动态环境元素Minigrid支持创建动态变化的环境例如移动的障碍物from minigrid.core.world_object import DynamicObstacle # 添加动态障碍物 self.put_obj(DynamicObstacle(), 4, 4)包含动态障碍物的Minigrid环境自定义奖励机制您可以通过重写step方法来自定义奖励机制def step(self, action): obs, reward, done, info super().step(action) # 自定义奖励逻辑 if self.agent_pos self.goal_pos: reward 10.0 # 到达目标给予高额奖励 elif action self.actions.pickup and self.carrying: reward 2.0 # 拾取钥匙给予小奖励 return obs, reward, done, info使用RoomGrid创建多房间环境Minigrid提供了RoomGrid类简化了多房间环境的创建from minigrid.core.roomgrid import RoomGrid class MultiRoomEnv(RoomGrid): def __init__(self, **kwargs): super().__init__( num_rows2, num_cols2, room_size6, max_steps100, **kwargs, ) def _gen_grid(self, width, height): super()._gen_grid(width, height) # 在不同房间放置物体 self.place_obj(Goal(), room(1,1)) self.place_obj(Key(blue), room(0,1)) self.place_obj(Door(blue, is_lockedTrue), room(0,1), door_idx3)使用RoomGrid创建的四房间环境总结与下一步通过本教程您已经学会了使用Minigrid创建自定义强化学习环境的基本步骤创建继承自MiniGridEnv的环境类实现_gen_grid方法构建网格布局添加物体墙壁、门、钥匙、目标等自定义任务和奖励机制测试和调试环境官方文档中提供了更多高级功能和示例docs/content/create_env_tutorial.md接下来您可以尝试设计更复杂的网格结构和任务实现自定义物体类型集成强化学习算法进行训练探索minigrid/envs/目录中的现有环境作为参考Minigrid的灵活性使它成为强化学习研究和教学的理想工具无论是学术研究还是个人项目都能帮助您快速实现和测试各种强化学习算法。【免费下载链接】MinigridSimple and easily configurable grid world environments for reinforcement learning项目地址: https://gitcode.com/gh_mirrors/mi/Minigrid创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章