论文解析-基于 Unity3D 游戏人工智能的研究与应用

news/2025/2/12 19:35:22/

1.重写 AgentAction 方法

1.1 重写 AgentAction 方法

这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释:

①public override void AgentAction(float[] vectorAction)

这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受一个 float 类型的数组作为参数。

float newAction0 = Mathf.Clamp(vectorAction[0], -1, 1);

这行代码将 vectorAction 数组的第一个元素限制在 -1 到 1 的范围内,并将结果赋值给 newAction0 变量。

newAction0 = (newAction0 + 1) / 2;

这行代码将 newAction0 的值加1后除以2,相当于将其从范围 -1 到 1 映射到范围 0 到 1

float newForce = Mathf.Lerp(MinForce, MaxForce, newAction0);

这行代码使用线性插值函数 Mathf.Lerp,根据 newAction0 的值在最小力量值 MinForce 和最大力量值 MaxForce 之间插值,将插值结果赋值给 newForce 变量。

ShootBall(newForce);这行代码调用名为 ShootBall 的方法,并将 newForce 作为参数传递给它。它的作用是使用指定的力量值来发射一个球。

1.2 重写了 AgentAction 方法 是什么意思?

重写(override)是面向对象编程中的一个概念,它指的是在子类中重新实现(覆盖)父类中已存在的方法。

在这段代码中,AgentAction 方法是一个父类中的方法,通过使用 override 关键字,该方法在当前类中进行了重新实现。也就是说,当前类是一个子类,继承了某个父类,而 AgentAction 方法是在父类中定义的。通过重写该方法,子类可以根据自己的需求对方法的行为进行修改或扩展

在代码中的第一行,public override void AgentAction(float[] vectorAction) 表示当前类重写了父类中的 AgentAction 方法,而不是使用父类中原有的实现。重写方法可以提供自定义的功能或行为,以满足子类的特定需求。

2.重写 CollectObservations 方法

2.1 重写 CollectObservations 方法

这段代码也是重写了一个方法,具体来说是重写了 CollectObservations 方法

以下是对每行代码的解释:

public override void CollectObservations()这行代码声明了一个公共的、重写了父类的 CollectObservations 方法的方法。

float distance = Vector2.Distance(mBallVector2, mNetVector2);这行代码计算了一个向量 mBallVector2mNetVector2 之间的距离,并将结果赋值给 distance 变量。

distance = (distance - MinDis) / (MaxDis - MinDis);这行代码将 distance 的值从范围 MinDisMaxDis 映射到范围 0 到 1。它通过减去 MinDis,然后除以 MaxDis - MinDis 来进行映射。

AddVectorObs(distance);这行代码将 distance 添加到观察向量中。这个观察向量用于提供给机器学习模型关于环境状态的信息。

float height = NetTrans.position.y - HeightBaseTrans.position.y;

这行代码计算了一个高度值,即 NetTrans 对象的 y 坐标减去 HeightBaseTrans 对象的 y 坐标,并将结果赋值给 height 变量。

height = (height - MinHeight) / (MaxHeight - MinHeight);这行代码将 height 的值从范围 MinHeightMaxHeight 映射到范围 0 到 1。它通过减去 MinHeight,然后除以 MaxHeight - MinHeight 来进行映射。

AddVectorObs(height);这行代码将 height 添加到观察向量中,用于提供给机器学习模型关于环境状态的更多信息。

这段代码重写了 CollectObservations 方法,以生成两个观察向量:一个是关于机器人与目标的距离,另一个是关于目标距离地面的高度。这些观察向量会在机器学习过程中提供环境状态的信息,以辅助决策和学习。

3.重写 CollectObservations 方法

以下是对提供的代码的逐行解释:

public override void CollectObservations()这行代码声明了一个公共的、重写了父类的 CollectObservations 方法的方法。

AddVectorObs(HasMedicineState);这行代码将名为 HasMedicineState 的变量添加到观察向量中。HasMedicineState 可能是一个布尔值,用于表示是否持有药物。观察向量在机器学习过程中用于提供环境状态的信息。

AddVectorObs(transform.InverseTransformDirection(mAgentRig.velocity));这行代码将 mAgentRig 物体(代理体)的速度转换为局部坐标系中的方向,并将其添加到观察向量中。transform.InverseTransformDirection 用于将世界坐标系中的方向转换为相对于物体的局部坐标系中的方向。

通过以上代码,CollectObservations 方法重写了父类中的方法,生成了两个观察向量。第一个观察向量包含了一个代表是否持有药物的状态信息。第二个观察向量包含了物体运动的速度信息,该速度信息已转换为局部坐标系中的方向。这些观察向量将为机器学习模型提供有关环境状态的信息。

3.1 我们常用的 PPO 算法,其输出动作向量值域在-1 到 1 之间 ?

常用的 PPO(Proximal Policy Optimization)算法的输出动作向量通常被限制在-1到1的值域范围内。这种限制是为了确保输出的动作在合理的范围内,以避免过大或过小的动作值。将输出动作值域限制在-1到1之间有助于稳定训练过程,并使得学习到的策略更容易在实际环境中执行。

在代码中,你可能会看到一些对输出动作向量进行范围映射的操作,例如使用 Mathf.Clamp 函数将动作向量的元素限制在-1到1之间。这样的映射操作可以确保输出动作在合理范围内,并符合使用 PPO 算法的通常约定。

注意:从官方的使用说明文档中可以了解到,不适合过度设计奖励方式,代理可能会在训练过程中找到奖励的“漏洞”,最终导致训练失败。

参考文献:

[1]朱杰. 基于Unity3D游戏人工智能的研究与应用[D].广东工业大学,2020.


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

相关文章

Unity随手问题记录(持续更新~~)

目录 1.将摄像机定位到模型实际中心点前边(防止有些模型中心点和实际模型中心位置偏移很大的情况) 2.获取当鼠标在RawImage上时,鼠标位置对应的图像坐标(简单粗暴方式) 3.设置脚本运行顺序 4.当plugins底下出现dll文件识别不到的情况&#xf…

Java的@Transactional(rollbackFor = Exception.class) 与 @Transactional() 有什么区别?

Transactional(rollbackFor Exception.class) 和 Transactional() 是 Spring 框架中用于事务管理的注解,它们有以下区别: Transactional(rollbackFor Exception.class): 使用了 rollbackFor 参数来指定在遇到指定类型的异常时进行事务回滚。…

【Linux】进程间通信之管道

进程间通信之管道 一、管道1、管道的基本使用2、管道的原理3、实例代码4、管道的特点 二、有名管道1、创建一个命名管道2、匿名管道与命名管道的区别3、命名管道的原理4、用命名管道实现server&client通信 一、管道 1、管道的基本使用 管道是Unix中最古老的进程间通信的形…

Day8 接口测试详解–接口概述、什么是接口测试、常用的接口测试工具、RESTFUL架构

Day8 接口测试详解–接口概述、什么是接口测试、常用的接口测试工具、RESTFUL架构 文章目录 Day8 接口测试详解--接口概述、什么是接口测试、常用的接口测试工具、RESTFUL架构1. 接口概述**1.1 什么是接口呢?****1.2 常见接口****1.3 使用接口的优点**2. 什么是接口测试?**2.…

MSP432学习笔记8:定时器A_PWM驱动舵机

开发板型号:MSP432P401r 今日得以继续我的MSP432电赛速通之路,文首提供本次学习实践项目文件。 注:我笔记实践都是从原始空项目工程文件开始配置的。 有道是 —_—_—_—_— “山无重数周遭碧,花不知名分外娇” “曲…

数据采集技术的实现原理有哪些?

数据采集技术是指通过各种手段和技术手段,从互联网、移动设备、传感器等各种数据源中获取数据,并将其存储、处理和分析,以便为业务决策和应用提供支持。本文将介绍数据采集技术的实现原理,包括数据采集的基本流程、数据采集技术的…

【图像水印 2022 ACM】PIMoG

【图像水印 2022 ACM】PIMoG 论文题目:PIMoG: An Effective Screen-shooting Noise-Layer Simulation for Deep-Learning-Based Watermarking Network 中文题目:PIMoG:深度学习水印网络中一种有效的截屏噪声层仿真 论文链接:https://dl.acm.o…

LeetCode 1110. 删点成林

【LetMeFly】1110.删点成林 力扣题目链接:https://leetcode.cn/problems/delete-nodes-and-return-forest/ 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去&#xff0c…