MPE中environment.py复盘

1.__init__

  1. 初始化函数参数

    • world: 一个包含环境信息和所有智能体的世界对象。
    • reset_callbackreward_callbackobservation_callbackinfo_callbackdone_callback: 这些都是回调函数,用于在环境的特定事件发生时执行相应的操作。
    • shared_viewer: 一个布尔值,用于决定是否共享渲染视图。
  2. 存储世界对象和智能体列表

    • self.world: 存储传入的世界对象。
    • self.agents: 从世界对象中获取所有策略智能体(policy_agents)的列表。
  3. 设置智能体数量

    • self.n: 设置智能体的数量,等于世界中策略智能体的数量。
  4. 设置回调函数

    • 将传入的回调函数赋值给类属性。
  5. 设置环境参数

    • self.discrete_action_space: 布尔值,表示动作空间是否为离散的,默认为True
    • self.discrete_action_input: 布尔值,表示动作输入是否为离散的(即使动作空间是连续的),默认为False
    • self.force_discrete_action: 布尔值,表示是否强制将连续动作离散化。
    • self.shared_reward: 布尔值,表示是否所有智能体共享相同的奖励。
  6. 初始化时间和动作/观测空间列表

    • self.time: 初始化时间计数器。
    • self.action_space 和 self.observation_space: 初始化动作空间和观测空间的列表。
  7. 配置动作和观测空间

    • 遍历每个智能体,根据智能体的特性和环境参数配置其动作空间和观测空间。离散的情况下就使用spaces.Discrete函数,连续情况下就使用spaces.Box函数。
  8. 总动作空间

    • 如果智能体有多个动作空间,将它们组合成一个总动作空间。如果所有动作空间都是离散的,可以使用 MultiDiscrete 动作空间简化表示。
  9. 观测空间

    • 调用 observation_callback 函数来确定每个智能体的观测空间维度,并创建一个无限边界的盒子空间作为观测空间。
  10. 初始化通信动作向量

    • 将每个智能体的通信动作向量初始化为零。
  11. 渲染设置

    • 根据 self.shared_viewer 的值,初始化渲染视图列表 self.viewers
  12. 重置渲染

    • 调用 _reset_render 方法来重置渲染设置。

2.step

  1. 输入动作:接受一个动作列表 action_n,其中每个元素 action_n[i] 是针对相应智能体 i 的动作。

  2. 初始化列表:初始化用于存储每个智能体观测、奖励、完成状态和信息的列表。

  3. 设置智能体动作:遍历每个智能体,使用 _set_action 函数为每个智能体设置动作。这个函数根据传入的动作和智能体的动作空间来更新智能体的内部状态。

  4. 推进世界状态:调用 self.world.step() 来根据所有智能体的动作推进环境的状态。

  5. 记录观测:再次遍历智能体,为每个智能体获取观测、奖励、完成状态和信息。

    • obs_n:存储每个智能体的观测。
    • reward_n:存储每个智能体获得的奖励。
    • done_n:存储每个智能体的任务完成状态(例如,是否达到终止状态)。
    • info_n:存储每个智能体的额外信息。
  6. 计算总奖励:如果环境是合作性的(self.shared_rewardTrue),则将所有智能体获得的奖励相加,然后让每个智能体都获得相同的总奖励。

  7. 返回结果:返回一个元组,包含每个智能体的观测列表、奖励列表、完成状态列表和信息字典。

以下是对函数中一些关键部分的详细解释:

  • _set_action:这个函数负责根据智能体的动作空间和传入的动作来设置智能体的动作。例如,如果动作空间是离散的,它可能会将动作转换为特定的动作向量。

  • _get_obs:这个函数负责获取智能体的观测。观测通常包括智能体对环境的感知,例如周围实体的位置、速度等。

  • _get_reward:这个函数负责计算并返回智能体获得的奖励。奖励可以基于智能体的表现或达到的目标。

  • _get_done:这个函数负责判断智能体的任务是否完成,或者环境是否已经达到一个终止状态。

  • _get_info:这个函数负责提供关于智能体状态的额外信息,这可以包括任何对调试或分析有用的数据。

3._set_action

以离散动作输入和非离散动作输入两种情况进行分析。

离散动作输入情况

self.discrete_action_inputTrue时,表示动作输入是离散的:

  1. 初始化动作向量

    agent.action.u = np.zeros(self.world.dim_p) agent.action.c = np.zeros(self.world.dim_c)

  2. 处理动作: 如果动作空间是MultiDiscrete类型,代码将动作分解为多个离散动作,并存储在列表act中。否则,动作已经是列表形式。

  3. 物理动作

    • 根据动作的值(1, 2, 3, 4),设置智能体在x轴和y轴上的移动方向:

      if action[0] == 1: agent.action.u[0] = -1.0 if action[0] == 2: agent.action.u[0] = +1.0 if action[0] == 3: agent.action.u[1] = -1.0 if action[0] == 4: agent.action.u[1] = +1.0

  4. 通信动作

    • 将通信动作向量agent.action.c的对应位置设置为1:

      agent.action.c[action[0]] = 1.0

非离散动作输入情况

self.discrete_action_inputFalse时,表示动作输入是连续的:

  1. 初始化动作向量

    agent.action.u = np.zeros(self.world.dim_p) agent.action.c = np.zeros(self.world.dim_c)

  2. 物理动作

    • 如果self.force_discrete_actionTrue,则将动作向量中最大的元素设置为1,其余设置为0,以强制离散化动作。
    • 如果self.discrete_action_spaceTrue,则根据连续动作的值更新智能体在x轴和y轴上的移动:

      agent.action.u[0] += action[0][1] - action[0][2] agent.action.u[1] += action[0][3] - action[0][4]

    • 否则,直接将连续动作赋值给智能体的物理动作:

      agent.action.u = action[0]

  3. 通信动作

    • 直接将连续动作赋值给智能体的通信动作:

      agent.action.c = action[0]

通用步骤

无论动作输入是离散的还是连续的,以下步骤是通用的:

  • 灵敏度调整: 物理动作向量agent.action.u乘以一个灵敏度因子sensitivity,以调整智能体的移动速度。

  • 断言检查: 最后,使用assert语句确保所有动作元素都已被处理,即动作列表action的长度为0。

4.观测环境,在simple_tag.py里的

  1. 获取所有实体的位置

    • entity_pos 用于存储环境中除了智能体自身以外的其他实体(如路标或目标)相对于智能体的位置。
    • 通过遍历 world.landmarks(环境中的所有地标),如果地标 entity 不是边界(not entity.boundary),则计算其相对于智能体 agent 的位置 entity.state.p_pos - agent.state.p_pos,并将其添加到 entity_pos 列表中。
  2. 获取其他智能体的通信、位置和速度

    • comm 用于存储其他智能体的通信状态。
    • other_pos 用于存储其他智能体相对于当前智能体的位置。
    • other_vel 用于存储其他智能体的速度,但只包括那些不是对手(adversary)的智能体。
    • 通过遍历 world.agents(环境中的所有智能体),如果 other 不是当前智能体 agent,则将其通信状态 other.state.c 添加到 comm 列表中,将其相对于智能体的位置添加到 other_pos 列表中,如果 other 不是对手,则将其速度添加到 other_vel 列表中。
  3. 返回观测向量

    • 使用 np.concatenate 函数将智能体自身的速度 agent.state.p_vel、智能体自身的位置 agent.state.p_pos、所有地标的相对位置 entity_pos、其他智能体的相对位置 other_pos 以及其他智能体的速度(如果适用)other_vel 合并成一个观测向量。
    • 这个合并的观测向量提供了智能体对环境的全面感知,它可以用来决定智能体的下一步动作。

总结来说,这个 observation 函数收集了智能体对环境的感知信息,包括:

  • 自身的速度 (agent.state.p_vel)
  • 自身的位置 (agent.state.p_pos)
  • 地标的相对位置 (entity_pos)
  • 其他智能体的通信状态 (comm)
  • 其他智能体的相对位置 (other_pos)
  • 其他智能体的速度 (other_vel)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邦芒面试:面试官“青睐”你的微妙信号

在激烈的面试过程中,你是否好奇过面试官是如何评估你的表现,以及哪些举动表明你有可能成为他们心仪的候选人?接下来,我们将揭示面试官“青睐”你的几个微妙信号。 1. 主动分享职位详情 当面试官不仅满足于询问你的工作经历&#…

【Linux进程篇】Linux内核——程序地址空间的初构

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 程序地址空间回顾 我们在讲C语言的时候&#xff0c;大家应该都见过这样的空间布局图&#xff1a; 为了更好的验证不同的数据在内存中的存储位置&#xff0c;下面这段代码我们可以去实验一下&#xff1a; #include<…

云WAF:守护网络安全的强大盾牌

随着互联网技术的飞速发展&#xff0c;网络安全问题已经成为全球性的难题。为了应对日益复杂的网络安全威胁&#xff0c;云WAF&#xff08;Web Application Firewall&#xff0c;即Web应用防火墙&#xff09;应运而生&#xff0c;并以其强大的功能和优势&#xff0c;成为网络安…

GPT-4o:人工智能交互的新纪元

GPT-4o作为OpenAI最新发布的模型&#xff0c;标志着人工智能领域的一大飞跃&#xff0c;特别是在自然语言处理和交互体验上。本文将概述GPT-4o的主要特点、技术改进以及它如何改变我们与AI互动的方式。 GPT-4o的诞生背景 在GPT-4o之前&#xff0c;用户通过Voice Mode与ChatGPT…

Spring如何管理Bean的生命周期呢?

我们都知道&#xff0c;在面试的过程中&#xff0c;关于 Spring 的面试题&#xff0c;那是各种各样&#xff0c;很多时候就会问到关于 Spring的相关问题&#xff0c;比如 AOP &#xff0c;IOC 等等&#xff0c;还有就是关于 Spring 是如何管理 Bean 的生命周期的相关问题&#…

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介 1.1 数据集简介 数据集链接在这:高光谱数据集(.mat.csv)-科研学术 数据集包含下面三个文件&#xff1a; 文件中包含.mat与.csv,145x145x220, 其实主要使用avirissub.csv文件&#xff0c;在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下&am…

计算机网络-BGP基础概念

一、BGP的基本概念 BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1&#xff08;RFC1105&#xff09;、BGP-2&#xff08;RFC1163&#xff09;和BGP-3&#xff08;RFC1267&#xff09;&#xff0c;1994年开始使用…

企业微信群发群消息:策略、技巧与效果优化

在数字化营销日益盛行的今天&#xff0c;企业微信已成为企业与客户、员工之间沟通的重要桥梁。其中&#xff0c;群发群消息功能更是企业快速传递信息、提升沟通效率的关键工具。本文将深入探讨企业微信群发群消息的策略、技巧以及效果优化方法。 一、企业微信群发群消息的重要…

TiDB-从0到1-MVCC

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCC 一、MVCC Multi-Version Concurrency Control 多版本并发控制&#xff0c;其主要解决了读并发的问题。 其维持一个数据的多个版本使读写操作没有冲突。也就是说数据元素X…

oracle linux7安装oracle11g0204

1、平时需要修改 /etc/redhat-release文件为Red Hat Enterprise Linux 7,这次不需要了。 2、关闭selinx nano /etc/selinux/config 改为disabled 3、nano /etc/hosts 修改解析 在oracle服务器中增加 /etc/hosts中一个对应 192.168.1.10 CLOUD-MC-SQL1 4、修改系统文件 /…

虚拟机报错:VMX 进程已提前退出。VMware Workstation 无法连接到虚拟机。

解决报错&#xff1a;VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。 VMX 进程已提前退出。 解决方案&#xff1a;右键桌面图标进入VMware Workstation Pro的属性设置&#xff0c;兼容性–勾选“以管理员…

【windows】Total Uninstall:一款功能强大的完全卸载软件

软件介绍 Total Uninstall是一款专业的软件卸载工具&#xff0c;旨在帮助用户彻底地清除计算机上的应用程序&#xff0c;包括与应用程序相关的所有文件和注册表项。以下是Total Uninstall的一些主要功能和特点&#xff1a; 完全卸载&#xff1a;软件可以监视应用程序的安装过程…

【C++题解】1321. 时钟旋转(2)

问题&#xff1a;1321. 时钟旋转&#xff08;2&#xff09; 类型&#xff1a;字符串 题目描述&#xff1a; 时钟从时间&#xff1a;xx:xx&#xff08;xx时xx分&#xff09;&#xff0c;走到时间&#xff1a;xx:xx&#xff08;xx时xx分&#xff09;&#xff0c;时针共旋转了多…

uniapp一些问题解决

1.按钮边框如何去除&#xff1f; 参考博主&#xff1a;微信小程序按钮去不掉边框_微信小程序button去掉边框-CSDN博客文章浏览阅读1k次。最近在学uni-app&#xff0c;顺便自己写个小程序。左上角放了个button&#xff0c;可边框怎么也去不掉…原来微信小程序的按钮要去掉边框要…

新零售数据中台:打造智能商业运营的核心引擎_光点科技

随着数字化转型的浪潮席卷全球&#xff0c;新零售行业正在经历一场前所未有的革新。在这一过程中&#xff0c;“新零售数据中台”逐渐成为企业构建智能商业运营的核心引擎。本文将重点介绍新零售数据中台的概念、其在新零售中的作用&#xff0c;以及如何通过数据中台实现商业价…

npm yarn 更换国内源以及node历史版本下载地址【超简洁步骤】

npm 更换国内源 npm config set registryhttps://registry.npmmirror.com npm config set electron_mirrorhttps://registry.npmmirror.com/electron/yarn 更换国内源 yarn config set registry https://registry.npmmirror.comnode历史版本下载地址 https://nodejs.org/dow…

基于YOLOV8/YOLOV5的远距离停车场车位检测识别系统

摘要&#xff1a; 在本文中深入探讨了基于YOLOv8/v7/v6/v5的停车位检测系统&#xff0c; 开发远距离停车位检测系统对于提高停车效率具有关键作用。。本系统核心采用YOLOv8技术&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;以便进行性能指标对比。深入解释了YOL…

【QT环境配置】节约msvc2017灰色不可用问题

1. 问题 msvc2017不可用&#xff0c;2019、2022都同理解决。 2. 解决 第一步&#xff1a;打开控制面板->程序->程序和功能->找到自己安装的vs程序->鼠标右键后出现卸载更改->点击更改。 找到下面组件即可。&#xff08;msvc2019就找msvcv142&#xff09; …

SQL刷题笔记day5

SQL218题目 我的错误代码&#xff1a; select de.dept_no,de.emp_no,s.salary from employees e join dept_emp de on de.emp_no e.emp_no join salaries s on s.emp_no e.emp_no where de.dept_no not in dept_manager.dept_no #not in 好像不能直接这样用 这里报错 正确代…

宝兰德入选“鑫智奖·2024金融数据智能运维创新优秀解决方案”榜单

近日&#xff0c;由金科创新社主办、全球金融专业人士协会支持的“2024 鑫智奖第六届金融数据智能优秀解决方案”评选结果正式公布。凭借卓越的技术实力和方案能力&#xff0c;宝兰德「智能全链路性能监控解决方案」从90个参选方案中脱颖而出&#xff0c;荣誉入选“鑫智奖2024金…