Unity-ML-Agents-Example Learning Environments-环境解析

news/2024/11/7 22:47:04/

文档地址:https://github.com/Unity-Technologies/ml-agents/blob/release_19/docs/Learning-Environment-Examples.md

目录

1.Push Block

1.1 Behavior Parameters

1.1.1 为什么是70个变量,为什么是14条射线?

1.1.2 Float Properties 是什么意思?以pushblock环境为例。

2.Cooperative Push Block

2.1 Observation space

2.1.1 A single Grid Sensor

3.Dungeon Escape

3.1 Observation space

3.1.1 A Ray Perception Sensor

4.Soccer Twos

4.1 Agent Reward Function

4.1.1 一个回合可以有很多帧?

4.2 Behavior Parameters

4.2.1 这里的旋转属于离散动作?

4.2.2 每个射线可能检测的物体类型是哪些?

5.Worm

5.1 Behavior Parameters


1.Push Block

https://github.com/Unity-Technologies/ml-agents/blob/release_19/docs/Learning-Environment-Examples.md#push-block

1.1 Behavior Parameters

  • Behavior Parameters:
    • Vector Observation space: (Continuous) 70 variables corresponding to 14 ray-casts each detecting one of three possible objects (wall, goal, or block).
    • Actions: 1 discrete action branch with 7 actions, corresponding to turn clockwise and counterclockwise, move along four different face directions, or do nothing.

行为参数:

向量观察空间:(连续的)70个变量,对应于14个光线投射,每个光线投射探测三个可能物体(墙、球门或障碍物)中的一个。

这个环境的状态空间是一个连续的向量,有70个变量,每个变量对应一个射线探测到的物体的类型。这些射线是从智能体的位置向不同方向发出的,一共有14条射线。每条射线可以探测到三种不同类型的物体:墙、目标或障碍物。因此,状态空间的每个变量都表示了智能体在该射线方向上探测到的物体类型。

动作:1个离散的动作分支,有7个动作,对应顺时针和逆时针转动,沿四个不同的面部方向移动,或者什么都不做。

"Push block"是一个强化学习任务,其中有一个离散的动作空间,包含7个动作选项。这些动作是旋转推块的方向,向前、向后、向左、向右移动推块,以及不进行任何操作。其中,前四个动作选项表示在推块的四个表面方向上移动推块,以此来改变推块的位置和方向,进而完成任务。这些离散动作由一个动作分支来控制,每个动作选项的索引由0到6编号。

当智能体在推块子环境中时,它有以下7个离散动作选项:向左旋转、向右旋转、向前移动、向后移动、向左移动、向右移动和不采取任何动作,保持原地不动。这些动作将用于控制智能体在环境中移动和旋转,以便推动方块到目标位置。

1.1.1 为什么是70个变量,为什么是14条射线?

这个环境的设计者可能考虑到了以下几点:

①70个变量:一个常见的做法是将每个ray-cast检测到的三种物体分别用两个二进制变量表示(即用一个one-hot编码表示),比如[1, 0, 0]表示检测到了墙,[0, 1, 0]表示检测到了目标,[0, 0, 1]表示检测到了块。因此,14个ray-cast对应了14 * 3 = 42个变量。再加上每个ray-cast检测到的距离,也就是14个float类型的变量,所以总共是42 + 14 = 56个变量。此外,还可能会添加一些额外的信息,比如agent的位置和朝向,以及block的位置和朝向,这些信息也可能用到一些变量。因此,最终的变量数可能会超过70个。

②14条射线:14条射线的数量可能是根据设计者的经验和实验结果得出的。14条射线能够提供足够的信息,使得agent能够有效地完成任务,而不会增加过多的计算负担。当然,这个数量也可能会根据具体情况而有所变化。

1.1.2 Float Properties 是什么意思?以pushblock环境为例。

Float Properties是指可以用浮点数来调整的一些属性,用于调整场景中的物体的物理特性,例如摩擦系数、阻力等等。在Unity ML-Agents中,Float Properties通常用于定义Agent的观察空间和环境的状态信息。这些属性的值可以在训练前设置,并在训练过程中保持不变

Float Properties是指在ML-Agents环境中定义的可以通过训练进行优化的连续浮点数变量

以pushblock环境为例,它包含了四个Float Properties,它们分别是:

①block_scale:方块沿x和z维度的缩放比例。

②dynamic_friction:地面材质对移动物体的摩擦系数。

③static_friction:地面材质对静止物体的摩擦系数。

④block_drag:空气阻力对方块的影响。

这些Float Properties可以在训练过程中进行优化,以提高智能体的性能和效率。在训练前,可以设置这些Float Properties的默认值和建议的最小/最大值范围。

2.Cooperative Push Block

2.1 Observation space

  • Observation space: A single Grid Sensor with separate tags for each block size, the goal, the walls, and other agents.

观察空间:单个网格传感器,每个块大小、目标、墙壁和其他代理都有单独的标签。

“Cooperative Push Block” 中的 observation space(观测空间)是一个单独的 Grid Sensor(栅格传感器),其中对于每个块大小、目标、墙壁和其他代理,都有单独的标签来表示其信息。这意味着智能体可以通过 Grid Sensor 感知周围环境,并将感知到的信息编码为一个向量,然后传递给决策策略进行推理和决策。

Cooperative Push Block游戏中,Observation Space有一个Grid Sensor,它会为每个不同大小的方块、目标、墙壁和其他代理分别设置标签。这个Grid Sensor可以帮助Agent感知环境中的物体位置和状态,从而作出合适的决策。

2.1.1 A single Grid Sensor

"A single Grid Sensor" 意为 "一个网格传感器",是指一种常见的观测空间类型,在强化学习中常用于表示网格世界(grid world)中的状态。这种传感器会将整个网格世界划分为若干个格子,并为每个格子分配一个标签,表示该格子的状态或属性,比如墙、道路、目标等。通过对这些格子的标签进行编码,可以将整个网格世界的状态表示为一个二维矩阵,作为智能体的观测空间。这种观测空间适用于需要对环境进行精细建模的任务,例如机器人导航、游戏等。

3.Dungeon Escape

3.1 Observation space

  • Observation space: A Ray Perception Sensor with separate tags for the walls, other agents, the door, key, the dragon, and the dragon's portal. A single Vector Observation which indicates whether the agent is holding a key.

观察空间:一个光线感知传感器,为墙壁、其他代理、门、钥匙、龙和龙的入口分别贴上标签。指示代理是否持有一个键的单个向量观察。

而Dragonfly游戏的Observation Space则包含一个Ray Perception Sensor,它分别为墙壁、其他代理、门、钥匙、龙和龙的传送门设置不同的标签。这个Ray Perception Sensor可以帮助Agent感知环境中的障碍物、其他代理的位置、任务目标的位置等信息,从而作出合适的决策。此外,Observation Space还包括一个单一的Vector Observation,用于表示Agent是否拿着钥匙,这可以为Agent的决策提供更多的信息。

3.1.1 A Ray Perception Sensor

Ray Perception Sensor 是一种在 Unity ML-Agents 中用于感知三维环境的传感器类型,它可以从 Agent 的位置发射射线,并返回射线的碰撞信息。相较于 Grid Sensor,它可以更加精细地感知环境中的物体,并能够感知到更多的信息,比如其他智能体的位置、速度、方向等。Ray Perception Sensor 可以通过设置不同的 Tags 来感知特定类型的物体,例如墙壁、门、道具等。在 Cooperative Push Block 中,使用 Ray Perception Sensor 来感知环境中的墙壁、其他智能体、门、钥匙、巨龙和巨龙的传送门。

4.Soccer Twos

4.1 Agent Reward Function

  • Agent Reward Function (dependent):
    • (1 - accumulated time penalty) When ball enters opponent's goal accumulated time penalty is incremented by (1 / MaxStep) every fixed update and is reset to 0 at the beginning of an episode.
    • -1 When ball enters team's goal.

代理奖励函数(依赖):
(1 -累积时间惩罚)当球进入对手的球门时,累积时间惩罚在每次固定更新时增加(1 / MaxStep ),并在一个回合开始时重置为0。
-1当球进入球队球门时。

在这个语境中,"accumulated time penalty" 是指累计的时间惩罚,用来约束智能体在尝试射门的过程中不能太耗时。当智能体每次在执行射门动作的时候,如果它没有将球射进对手的球门,那么会被罚一定的时间惩罚。该时间惩罚会在每次 FixedUpdate() 被更新并累加,其数值为 (1 / MaxStep)。MaxStep 是智能体每个episode中能够执行的最大step数。当球进入对手的球门时,这个时间惩罚被重置为 0,下次执行射门时再次进行累加。"1 - accumulated time penalty" 这个表达式的作用是使智能体的奖励随着时间的推移而逐渐减少,因为智能体越快射进对手的球门,就能获得越多的奖励。

这段代码中,有一个名为accumulated time penalty的变量,表示累积的时间惩罚,其初值为0。每个固定更新周期,也就是一帧结束后,如果球进入了对手的球门,那么accumulated time penalty会增加(1 / MaxStep)的值。MaxStep是指在一个episode(一次完整的学习周期)中允许的最大步数。同时,在每次新的episode开始时,accumulated time penalty会被重置为0,以准备开始一个新的学习周期。1 - accumulated time penalty代表的是当前episode中的奖励,也就是在当前学习周期中,尽量减少时间惩罚,以获得更高的奖励。

4.1.1 一个回合可以有很多帧?

一个回合通常包含了多个连续的帧。在训练过程中,每个帧都可以看作是一个训练样本。Agent在每个帧中根据观察到的环境信息做出决策,然后执行相应的动作,从而对整个回合进行控制。一般情况下,每个帧之间的时间间隔很短,通常在几毫秒或者几十毫秒的范围内。

4.1.2 一个回合可以有很多步?

一个回合可以有很多步。在机器学习中,一个回合通常是指一个代理与环境进行交互,直到完成一个任务或达到终止条件。每个步骤代表一个代理从环境中接收到一组观测值,并采取一些操作来影响环境状态的过程。一个回合中的步骤数量取决于任务的复杂程度以及代理与环境之间的交互方式。在某些情况下,一个步骤可以是代理接收到一个观测并执行一次动作,而在其他情况下,一个步骤可能需要多次动作才能完成。

4.2 Behavior Parameters

  • Behavior Parameters:
    • Vector Observation space: 336 corresponding to 11 ray-casts forward distributed over 120 degrees and 3 ray-casts backward distributed over 90 degrees each detecting 6 possible object types, along with the object's distance. The forward ray-casts contribute 264 state dimensions and backward 72 state dimensions over three observation stacks.
    • Actions: 3 discrete branched actions corresponding to forward, backward, sideways movement, as well as rotation.
    • Visual Observations: None

这段代码描述了一个行为决策模型的参数设置,包括了观察空间和行为空间的设置。具体来说:

  • 观察空间:使用了一组336维向量,包括11个射线的方向和距离信息,每个射线可以检测6种可能的物体类型。其中,11个射线是前向分布在120度范围内,3个射线是向后分布在90度范围内,每个射线都可以检测物体距离和类型。前向射线贡献了264个状态维度,后向射线贡献了72个状态维度,加起来总共是336个维度。此外,还使用了三个观察堆栈,对观察结果进行了累积。
  • 行为空间:使用了3个离散动作,分别对应向前、向后、向侧面的运动以及旋转。
  • 视觉观察:没有使用任何图像数据作为观察输入。

4.2.1 这里的旋转属于离散动作?

是的,这里的旋转被视为离散动作,因为它是通过在固定角度上执行离散旋转操作来实现的,而不是通过连续旋转来实现的。

4.2.2 每个射线可能检测的物体类型是哪些?

每个射线可以检测到6种可能的物体类型之一,加上空值,共7个值。此外,还有一个额外的值,表示探测到物体的距离。因此,每个射线可以有8个值。

根据给出的描述,“11个射线探测器朝向前方,分布在120度之内,并且3个射线探测器朝向后方,分布在90度之内”,每个探测器可以检测到以下六种可能的物体类型中的一种或者为空道具、墙、地板、边界、球员和球。因此,每个射线可以检测到这些物体类型中的一种或者空。整个向量观察空间由11个向前的射线和3个向后的射线共同组成,因此总的向量观察空间的维度为336。

11个向前的射线探测器 x (6种可能的物体类型+1个空置+1个距离) x 3个观察堆栈 + 3个向后的射线探测器 x (6种可能的物体类型+1个空置+1个距离) x 3个观察堆栈

5.Worm

5.1 Behavior Parameters

  • Behavior Parameters:
    • Vector Observation space: 64 variables corresponding to position, rotation, velocity, and angular velocities of each limb plus the acceleration and angular acceleration of the body.
    • Actions: 9 continuous actions, corresponding to target rotations for joints.
    • Visual Observations: None

这段内容是描述一个名为Behavior Parameters的Unity组件的设置。其中,Vector Observation space指定了一个64维的向量观测空间,它包含了Worm模型每个肢体的位置、旋转、速度、角速度以及身体的加速度和角加速度等信息。

Actions指定了9个连续的动作空间,对应于每个关节的目标旋转角度。

Visual Observations表示此环境没有可视化的观测空间,也就是说,该模型不需要从环境中获取图像或视频等可视化信息。

其中,每个“limb”(即蠕虫的每个肢体部分)的位置、旋转、速度和角速度都会对应4个变量,因为它们可以在三个轴上移动和旋转。蠕虫的身体加速度和角加速度也会对应两个变量。因此,每个limb对应4*3+2+2=16个变量,共有4个limb,总共为16×4=64个变量。

在Worm环境中,每个关节可以旋转,而且旋转的角度可以连续变化。因此,每个关节的旋转需要一个连续的值来表示目标旋转角度,而Worm有9个关节,所以需要9个连续动作空间来表示每个关节的目标旋转角度。


http://www.ppmy.cn/news/53127.html

相关文章

推荐 7 个超牛的 Spring Cloud 实战项目

个 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅…

python 从外部直接传递参数 调用某个函数 打印一下外部参数

为了从外部传递参数给 Python 程序,并调用一个特定的函数,我们可以使用 Python 的内置库 argparse。在这个例子中,我们将创建一个名为 example.py 的 Python 文件,该文件包含一个名为 print_args 的函数,该函数将接收并…

基于springboot的前后端分离的案列(一)

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例&#xf…

linux系统中利用QT实现串口通信的方法

大家好,今天主要和大家分享一下,如何使用QT中的串口通信方法。 目录 第一:资源简介 第二:应用实例的具体实现 第三:程序运行效果 第一:资源简介 在开发板的资源中出厂系统中,默认已经配置了两…

Microsoft Sensitive Label部署方案

目录 前言 一、目标 二、建立完整的Azure信息保护环境 三、部署Microsoft Sensitive Label 3.1 执行缺省配置</

TEB算法实现步骤

以下是TEB算法的基本步骤&#xff1a; 初始化机器人的起始姿态和目标姿态。 根据机器人的动态约束和环境中的障碍物生成一系列候选路径。 对于每个候选路径&#xff0c;计算其路径长度和与目标姿态的距离。 根据路径长度和距离&#xff0c;对候选路径进行排序&#xff0c;选…

【三十天精通Vue 3】第十七天 Vue 3的服务器渲染详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 服务器端渲染概述1.1 服务器端渲染的概念1.2 Vue 3…

Ubuntu更新软件下载更新与移除

目录 一、更新软件源 二、下载与安装软件 三、如何移除软件 四、Ubuntu商店下载软件 一、更新软件源 更新Ubuntu软件源的操作步骤&#xff0c;更新软件源的目的就是&#xff0c;将在Ubuntu官网的软件源更改到本地&#xff0c;也就是国内的软件源&#xff0c;这样的话下载安…