ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

多智能体网格世界环境 MultiGrid:MiniGrid 多代理扩展的使用与源码解析

多智能体网格世界环境 MultiGrid:MiniGrid 多代理扩展的使用与源码解析 人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本指南以 Google Research 仓库social_rl/gym_multigrid模块为核心讲解 MultiGrid 多智能体网格世界环境的背景、与 MiniGrid 的 API 差异、文本化人工控制工具的使用方法以及MultiGridEnv的核心参数、观测/动作空间与已注册环境。读完本文你将能够手动运行并调试任意 MultiGrid 环境理解多代理并行交互的实现原理并据此接入自己的多智能体强化学习训练流程。什么是 MultiGridMultiGridMulti-agent Minimalistic Gridworld Environment是 MiniGrid 的继承与扩展。MiniGrid 是一个基于 OpenAI Gym API 的轻量级快速网格世界环境而 MultiGrid 在其基础上引入了多代理同时行动的能力多个代理可以同时在环境中行动每个代理拥有自己独立的部分可观测视图partially observable view代理之间可能为资源相互竞争。模块的核心代码位于 social_rl/gym_multigrid/multigrid.py其中MultiGridEnv直接继承自 MiniGrid 的MiniGridEnv并通过重写step、reset、gen_obs、render等方法将单代理环境推广到多代理场景。MultiGrid 保持了对 MiniGrid 的向后兼容也支持单代理训练因此原有的 MiniGrid 用法可以平滑迁移。与 MiniGrid 的核心差异从 API 层面看MultiGrid 与 MiniGrid 的关键区别在于step()的输入输出形态输入不再传入单个动作而是传入一个动作数组array of actions数组长度等于代理数量每个元素对应一个代理的动作。输出返回一个观测数组数组中每个元素是形如 dict 的观测与 MiniGrid 一致。这一设计的实现位于 multigrid.py 的step()方法。需要注意两个细节公平性处理每一步中代理以随机顺序依次行动np.random.shuffle(agent_ordering)避免固定的行动先后顺序给某些代理带来不公平优势。观测结构与 MiniGrid 不同MultiGrid 在观测中不包含mission的字符串文本观测 dict 主要包含image与direction两个字段详见下文“观测空间”一节。此外MultiGrid 在非竞争模式下所有 episode 都运行固定的最大步数如果某个代理提前完成任务它会在网格中的新位置重生respawn以便在步数预算内尽可能多地重复完成任务即使只有一个代理也应设计为固定步数并允许代理在步数内多次寻找目标才能与该设计公平比较。基本用法文本化人工控制MultiGrid 提供了一种基于文本的 UI 应用允许你手动控制每个代理来测试环境功能。该脚本位于 social_rl/gym_multigrid/manual_control_multiagent.py其设计初衷是环境以字符串形式渲染因此可以透过 SSH 在无图形界面的服务器上使用。默认运行方式python -m manual_control_multiagent.py指定环境运行通过--env_name选项选择环境例如python -m manual_control_multiagent.py --env_name MultiGrid-DoorKey-16x16-v0脚本默认环境为MultiGrid-DoorKey-8x8-v0见 manual_control_multiagent.py 的参数解析并要求环境名以MultiGrid开头。交互方式如下启动后会打印当前环境的字符串渲染结果以及所有可用动作及其整数编号。每次需要为所有代理同时输入动作以逗号分隔例如0,1,2表示三个代理分别执行动作 0、1、2输入的动作数量必须与代理数量一致。输入r重置环境输入q退出。每步执行后会打印各代理的奖励、累计奖励历史与累计奖励总和并通过 matplotlib 渲染 RGB 图像当done为真时打印 Game over。注意脚本内通过from social_rl import gym_multigrid的导入副作用触发环境注册见 manual_control_multiagent.py因此运行前需确保social_rl包位于 Python 路径中且已安装依赖gym、gym-minigrid、numpy、matplotlib。MultiGridEnv 核心参数MultiGridEnv的构造函数见 multigrid.py提供了以下关键参数用于控制环境规模、代理数量与观测形态参数默认值说明grid_sizeNone正方形网格的边长瓦片数设置后不能再同时指定width/heightwidth/heightNone网格的宽、高瓦片数max_steps100一个 episode 的最大步数see_through_wallsFalse代理能否看穿墙壁seed52生成环境使用的随机种子agent_view_size7代理方形部分可观测视图的边长n_agents3环境中代理的数量competitiveFalse若为True任一代理到达目标即结束全部代理的 episode若为False代理到达目标后在其他位置重生episode 持续到max_stepsfixed_environmentFalse若为True每次生成环境时使用相同的随机种子环境保持不变minigrid_modeFalse若为True保持与 MiniGrid 的单代理向后兼容此时强制要求n_agents 1fully_observedFalse若为True每个代理获得完整环境状态的观测而非以自我为中心的部分观测实现中的几个关键行为当n_agents 1时competitive会被强制置为True见 multigrid.py。当fully_observed为True时agent_view_size被自动设置为max(width, height)使观测覆盖整个网格。若设置了grid_size则断言width与height均为None并把二者同时赋值为grid_size。minigrid_mode下观测与动作空间退化为 MiniGrid 的单代理形态离散动作空间、三维图像观测否则动作空间为(n_agents,)的 Box图像观测多出代理维度(n_agents, agent_view_size, agent_view_size, 3)见 multigrid.py。动作与观测空间动作空间多代理模式下动作空间是gym.spaces.Box(low0, highlen(Actions)-1, shape(n_agents,), dtypeint64)即需要为每个代理提供一个动作索引。可用动作继承自 MiniGrid 的枚举left、right、forward、pickup、drop、toggle、done其中done默认作为空操作处理。在step_one_agent见 multigrid.py中每个动作对应的世界变更如下left/right原地左转/右转更新方向并同步网格中的代理对象forward尝试前移一格若前方是goal或lava代理完成任务并进入重生流程若前方为空或可重叠则移动代理不能互相穿过前移时检查其他代理是否占据目标格pickup/drop拾取/放下前方物体toggle切换/激活前方物体对门door而言会尝试用手中同色钥匙开锁或开关门。观测空间observation_space是一个gym.spaces.Dict包含image(n_agents, agent_view_size, agent_view_size, 3)的 uint8 数组每个代理的部分可观测视图以自我为中心的视角已按朝向旋转direction(n_agents,)的 uint8 数组记录每个代理的朝向保留额外维度以兼容 TF-Agents当fully_observedTrue时额外包含position(n_agents, 2)的 uint8 数组记录每个代理的全局坐标见 multigrid.py。部分可观测视图的生成流程是先通过get_view_exts计算视野范围用Grid.slice截取子网格再按代理朝向旋转最后通过process_vis计算可见性掩码see_through_wallsFalse时墙壁会遮挡视线。代理携带的物体会被放到视野底部中央的自身位置以便代理看到自己拿了什么。竞争模式与非竞争模式competitive参数决定多代理场景的终局语义竞争模式competitiveTrue只要有一个代理找到目标整个 episode 对所有代理立即结束collective_done np.sum(self.done) 1。这适用于竞速或对抗类任务。非竞争模式competitiveFalseepisode 固定持续到max_steps某个代理到达目标后会被重生到新位置继续探索其他代理不受影响见agent_is_done方法multigrid.py。若该代理正携带物体物体也会被随机重新放置到网格中以满足关卡依赖。step()返回的done是所有代理共享的collective_done布尔值而rewards仍是长度n_agents的数组按代理分别统计。内置环境一览MultiGridEnv是一个可继承的基类仓库在 social_rl/gym_multigrid/envs/ 下提供了 13 个具体环境模块全部通过 envs/init.py 在导入时注册到 Gym模块环境语义adversarial.py对抗式环境cluttered.py堆满障碍物的杂乱环境coingame.py硬币收集游戏doorkey.py门与钥匙任务拿钥匙开锁到达目标empty.py空房间只有目标格稀疏奖励fourrooms.py四房间布局gather.py收集物体任务按颜色区分lava_walls.py熔岩与墙壁障碍maze.py迷宫meetup.py会合/集合任务stag_hunt.py猎鹿博弈类协作/竞争任务tag.py追捕tag任务tasklist.py任务列表式多步骤任务每个模块都定义了一组具体的环境子类并在文件末尾调用register()完成 Gym 注册。例如empty.py 注册了MultiGrid-Empty-5x5-v0、MultiGrid-Empty-8x8-v0、MultiGrid-Empty-16x16-v0、MultiGrid-Empty-5x5-Single-v0、MultiGrid-Empty-Random-6x6-Minigrid-v0等一系列环境。其中EmptyEnv本身支持n_agents、size、agent_startfixed或random、randomize_goal等参数minigrid_modeTrue的变体用于与 MiniGrid 单代理对齐。doorkey.py 注册了MultiGrid-DoorKey-6x6-v0、MultiGrid-DoorKey-8x8-v0、MultiGrid-DoorKey-16x16-v0以及多个Single单代理变体。其place_one_agent被重写确保代理总是被放置在门的一侧且钥匙也在同侧从而保证任务可解。gather.py 注册了MultiGrid-Gather-v0、MultiGrid-Gather-Empty-6x6-v0、MultiGrid-Color-Gather-Empty-6x6-v0等收集类环境支持n_goals硬币数、n_clutter障碍物数、n_colors颜色种类、random_colors等参数并默认使用fully_observedTrue与自定义的按颜色奖励逻辑。README 中示例使用的MultiGrid-DoorKey-16x16-v0即来自 doorkey 模块一个 16×16 网格、5 个代理、目标在右下角、中间有垂直分割墙与一把黄色钥匙门锁的环境。Gym 注册机制环境注册由 register.py 完成。其register(env_id, entry_point, reward_threshold0.95)函数要求环境 ID 以MultiGrid-开头将(id, entry_point)交给 Gym 的注册表并默认设置reward_threshold0.95该阈值在 Gym 环境中用于判断任务是否被视为“已解决”。每个环境模块在文件末尾通过__loader__.name获取自身模块路径并以module_path :EnvClassName作为entry_point注册例如register( env_idMultiGrid-DoorKey-16x16-v0, entry_pointmodule_path :DoorKeyEnv16x16 )因此只要import social_rl.gym_multigrid导入envs/__init__.py触发全部子模块所有环境就会一次性注册到 Gym之后即可通过gym.make(MultiGrid-...-v0)创建任意环境实例。在强化学习训练中的应用MultiGrid 的MultiGridEnv严格遵循 Gym APIreset/step/render且观测空间为gym.spaces.Dict、动作空间为数组形态天然适配多智能体 RL 框架。在本仓库的 social_rl/ 顶层还包含配套的训练组件social_rl/multiagent_tfagents/基于 TF-Agents 的多代理训练实现可与 MultiGrid 环境直接对接social_rl/adversarial_env/对抗环境训练框架social_rl/self_tuning_follower/自适应跟随者相关实验。多代理训练的基本模式是在每个 step 为全部代理各产生一个动作组成数组传入env.step(actions)收取返回的观测数组、奖励数组与共享的done从而并行优化每个代理的策略。观测中的direction字段专门保留了额外维度以兼容 TF-Agents 的观测格式这也印证了该环境面向 TF-Agents 生态的设计取向。延伸阅读环境基类与多代理实现social_rl/gym_multigrid/multigrid.py人工控制脚本social_rl/gym_multigrid/manual_control_multiagent.py环境注册工具social_rl/gym_multigrid/register.py全部内置环境定义social_rl/gym_multigrid/envs/配套多代理训练框架social_rl/multiagent_tfagents/关于 MiniGrid 原始环境的观测格式、环境 API 与世界类型等更细节的说明可查阅 MiniGrid 官方文档MultiGrid 在观测、API 与可生成世界上与之保持一致。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐如何零代码构建智能社会CAMEL多智能体框架的完整实战指南如何零代码构建智能社会CAMEL多智能体框架的完整实战指南 CAMEL多智能体框架是一个强大的工具允许用户轻松创建和模拟由多个AI智能体组成的智能社会。人工智能大模型AI AgentAgent 框架多智能体工具调用MCP ClientsRAG模型评测数据生成Psycholab用 ASCII 画布与 Gym 接口快速构建多智能体网格世界博弈环境的实战指南Psycholab用 ASCII 画布与 Gym 接口快速构建多智能体网格世界博弈环境的实战指南 导读 Psycholab 是 Google Research人工智能深度学习NLP计算机视觉强化学习在 RLlib 中使用 Footsies 格斗游戏环境自包含多智能体强化学习环境解析在 RLlib 中使用 Footsies 格斗游戏环境自包含多智能体强化学习环境解析 导读 Footsies 是一个双人横版格斗游戏环境常被强化学习社区用作人工智能分布式训练强化学习任务调度模型推理服务后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表