Unreal Engine角色涌现行为开发教程
在本文中,我将讨论如何使用虚幻引擎、强化学习和免费的机器学习插件 MindMaker 在 AI 角色中生成涌现行为。 目的是感兴趣的读者可以使用它作为在他们自己的游戏项目或具体的 AI 角色中创建涌现行为的指南。
推荐:使用 NSDT场景设计器 快速搭建 3D场景。
1、涌现行为:What & Why?
首先介绍一些关于涌现行为的入门知识。
涌现行为是指未预先编程但响应某些环境刺激而有机发展的行为。 涌现行为对于许多(如果不是所有)生命形式来说是常见的,它是进化本身的一个功能。 这也是最近体现的人工代理的一个特征。
当采用涌现行为方法时,并不是严格地为 AI 编写特定的动作,而是让它们通过一些自适应算法“进化”,例如遗传编程、强化学习或蒙特卡洛方法。 在这样的设置中——行为不是在一开始就被预测到的,而是允许基于一系列在某种程度上依赖于机会的级联事件而“出现”。
为什么会选择使用涌现行为? 主要原因之一是涌现行为方法可以创建行为更类似于碳基生命形式的 AI 代理,更不可预测,并显示出更大的战略行为多样性。
为娱乐或人类互动而设计的各种具体化 AI 代理可以从突发行为中受益,从而显得不那么静态,对用户更具吸引力。 《自然》杂志最近的一篇期刊文章表明,机器人在响应时间和运动模式方面表现出更多的可变性,被认为更人性化。
涌现行为还可以克服使用传统编程方法创建的其他形式的人工智能无法克服的障碍。 通过允许 AI 发现开发人员未预见到的解决方案,代理可以探索比传统编程方法可能实现的更广泛的解决方案空间。 甚至有可能出现的行为方法可能会导致通用人工智能的产生,这是一种可以与人类所拥有技能的多样性相媲美的人工智能。
但是,并非所有情况下都适合使用涌现行为方法,如果想要创建非常具体的行为,例如精确和重复地模仿特定动物的行为,涌现行为技术可能不是最佳选择。 涌现行为不太适合不需要变化的重复性高保真任务。 这就是为什么人类和其他有机生命形式可能难以完成高度重复的任务的原因之一,我们天生就是多变的。
此外,在尝试复制特定行为时,可能很难重现导致该行为模式出现在现实世界中的相同偶然事件。 例如,可能有多种解决方案是某种生物适应或行为进化来实现的,其结果受偶然事件的调节。 因此,并非所有紧急方法都必然会得出相同的解决方案。 一个例子是趋同进化多次重现眼睛的方式,但不一定具有完全相同的形式。
涌现行为方法有利于创造多种行为,其中一些行为可能与真实动物的行为相似,但不太可能完全相同。 另一方面,可以预期使用这些方法会产生大量有趣且独特的行为。 例如,我们可以看看强化学习代理发现的穿越地形景观的各种运动方法。
创建涌现行为的第一步是决定要使哪种行为涌现以及该行为的目标是什么。 这在某种意义上是容易的部分。 下一部分稍微复杂一些,需要概述一些关于涌现的理论。
2、不同类型的涌现行为
当谈到涌现的主题时,开放式涌现和静态或“固定点”涌现之间存在区别。
在不动点涌现中,一开始可能会出现多种行为,但它们会逐渐收敛到一个单一的解决方案或策略,并且出现的数量会随着时间的推移而减少。 本质上,当使用行为来解决的问题存在静态全局解决方案时,就会发生这种情况。 考虑井字游戏:虽然采用强化学习或遗传算法等新兴技术的 AI 最初可能会在井字游戏中显示多种策略,但它会很快收敛到单一的主导解决方案 游戏。 此时不会出现进一步的出现或策略。
当我谈到涌现行为时,我相信人们在接近这个话题时通常会想到“开放式涌现”。 在这种涌现形式中,没有固定的解决方案,代理将不断地产生新的行为。 创建这种开放式涌现可能比创建固定点涌现更复杂,并且必须考虑创建它所必需的结构。
值得庆幸的是,最近在理解和开放式涌现编程方面取得了一些进展,特别是 Joel Liebo 和其他人在自动课程方面所做的工作。 在一篇开创性的论文“Autocurricula and the Emergence of Innovation from Social Interaction”中,作者列出了一些可以预期开放式涌现发生的条件。 下面的表格将有助于理解什么时候可以期待开放式涌现。
3、开放式涌现的秘诀
如果为行为或目标设定的解决方案非常大,因此,就所有意图和目的而言,涌现的数量在所检查的时间段内不会出现上限。 这不是真正的开放式涌现,因为可能存在全局解决方案,如果给定足够的时间,代理将发现并停止适应。
然而,在许多情况下,这可能会超出人类生命的时间跨度,因此从观察者的角度来看,涌现将是开放式的。 一个例子可能是国际象棋游戏,其中全局解决方案被认为存在于井字游戏中,但由于游戏的复杂性,这尚未被发现并且不太可能在我们有生之年被发现。
创造开放式涌现的另一个秘诀是采用依赖于不断变化的环境的行为或目标状态。 想一想地球上的碳基生命形式——由于行星气候条件,环境不断变化,确保动物必须始终适应才能生存,并且涌现水平没有上限。
开放式涌现的第三个秘诀是多代理场景,其中涉及合作或竞争,代理正在采用一些自适应学习策略。 在这种情况下,代理人必须适应其同伴或竞争对手的策略,这反过来又确保另一个人也必须适应,从而形成持续适应的反馈循环,一种进化军备竞赛。 虽然这可能导致出现,但它也可能导致重复行为的循环,无限循环,直到环境中的某些元素将它们推离循环。 它不是真正的均衡,因为行为或策略不是固定的,但循环本身变成了一种均衡。 确保环境足够复杂和动态是避免这些周期性行为或策略的一种方法。
4、开放式涌现演示
在以下使用虚幻引擎创建的示例中,我选择使用上面列出的第三个配方,一个涉及来自两个虚拟物种的种群的多代理场景。 我们称其中一只为犀牛,另一只为老虎。 两组探索他们的环境寻找“浆果”,它们在虚幻引擎游戏环境中以大型圆形物体的形式出现。
使事情变得更复杂的是,这些浆果斑块上随机分布着野鸟,它们可以尖叫,吓跑老虎和犀牛。 然而,如果一只老虎或犀牛与另一只个体组队一起接近浆果,它们就会吓得鸟儿安静下来。 他们现在可以获取浆果,但他们必须将浆果彼此分开。
除了这种合作行为之外,它们还有一种竞争行为,它们可以发出吼叫声(老虎)或开始跺脚(犀牛),吓跑对立物种的代理人,但也会消耗自己宝贵的能量。 在许多方面,这种情况复制了自然界中的动物和人类公司可用的一些合作和竞争权衡。
竞争或合作是最古老的问题之一,通过在虚拟代理中模拟这一点,我们可以深入了解导致各种竞争或合作结果的条件。 使用这样的虚拟代理,我们还可以产生许多与在动物王国甚至人类中可能观察到的相同的行为复杂性。 OpenAI 小组最近发表的一篇论文能够证明工具使用的涌现是玩捉迷藏游戏的 AI 角色之间多代理竞争的函数。
可以对任何自适应虚拟代理群体进行类似的操作,这些虚拟代理将在彼此之间玩游戏,其中收益取决于其他玩家的策略,并且环境会受到他们行为的影响。 目标可以是任何东西,只是代理必须有一些方法来接收有关其环境的反馈,包括竞争对手采取的行动以及改变自己的行动作为回应的能力。 这个目标是由玩家还是程序员设定的,在复杂性方面没有太大区别。 选择由玩家设置它可能会带来关于游戏叙事的有趣选项。 需要注意的重要一点——行为的目标是谁来选择并不重要,重要的是这满足了上述竞争或合作的要求。
但是涌现究竟是如何“涌现”的呢? 一种方法是使用强化学习或遗传算法。 在我们的例子中,我们有一群虚拟代理,它们使用随机变化的行为来查看目标状态是否受到影响。 代理然后优先考虑那些导致良好结果的行为。 在遗传算法中,这是通过种群中出现的一种交叉函数来完成的,其中随机出现的良好适应性得到保留,相对不太有用的适应性被丢弃。 这是由适应度函数决定的。 这不需要看起来像有性繁殖或任何类似的东西,因为现有的代理可以被它们适应的对应物无缝替换,而用户不会看到任何正在发生的交叉。 在我们的示例中,我们将使用强化学习,这是我在另一系列文章中广泛介绍的一种算法技术。
与遗传算法类似,强化学习依赖于大数法则,即给定足够多的随机行为,就会出现好的动作,并可以在未来优先考虑。 最初,智能体选择一系列随机动作,但如果它们导致智能体获得奖励,则该奖励的价值将归因于智能体为获得奖励而采取的动作,因此更有可能在未来重复这些动作 . 当这个随机动作的过程被充分重复时,那些与代理人获得奖励有因果关系的动作将与那些仅仅是偶然事件的动作区分开来。 这就是强化学习的核心所在,它是一种因果算法,可用于检测因果关系。
人们可以像这样想象这个过程。
对于这个项目,我使用了免费的 MindMaker 插件和 Stable Baselines 强化学习算法套件。 借助 MindMaker,我们可以使用 OpenAI Gym 格式轻松地在 Unreal Engine 游戏环境中部署各种 RL 算法。 这为在各种模拟环境中部署强化学习算法提供了一个通用结构。
5、总结与未来发展
上述简单设置导致不同数字物种的行为不太可能达到稳定平衡的情况。 鸟类在浆果斑块上的随机分布确保环境始终在变化,这反过来又不断改变代理人合作或竞争的潜在利益。 智能体本身的活动也会影响有鸟和没有鸟的浆果斑块的比例——随着更多的智能体相互合作,合作的动机就会减少,因为没有鸟的浆果斑块的比例会增加。
这个想法是,这些相互作用的力量创造了一个总是波动和不稳定的环境,推动战略适应。 鉴于我们的代理与环境互动的方式很少——他们无法诱捕他们的竞争或使用环境中的物体隐藏浆果,我们的范例不太可能产生像涌现工具使用这样有趣的东西。 然而,它确实避免了固定均衡,并创造了不断变化的合作和竞争策略组合。 这可以提供一组比通常出现在开放世界视频游戏中更有趣的行为。
因此,我相信涌现行为技术(例如此处概述的技术)很可能会主导下一代视频游戏 AI,从而创造出更加有趣和诱人的角色和行为库。
原文链接:虚幻引擎涌现行为开发 — BimAnt
相关文章:

Unreal Engine角色涌现行为开发教程
在本文中,我将讨论如何使用虚幻引擎、强化学习和免费的机器学习插件 MindMaker 在 AI 角色中生成涌现行为。 目的是感兴趣的读者可以使用它作为在他们自己的游戏项目或具体的 AI 角色中创建涌现行为的指南。 推荐:使用 NSDT场景设计器 快速搭建 3D场景。…...

vue处理一千张图片进行分页加载
vue处理一千张图片进行分页加载 开发过程中,如果后端一次性返回你1000多条图片或数据,那我们前端应该怎么用什么思路去更好的渲染呢? 第一种:我们可以使用分页加载 第二种:我们可以进行懒加载那我们用第一种方法使用…...

(三十三)Vue之消息订阅与发布
文章目录消息订阅与发布理解使用步骤改造TodoList为消息订阅与发布上一篇:(三十二)Vue之全局事件总线 消息订阅与发布 理解 这种方式的思想与全局事件总线很相似,一种组件间通信的方式,适用于任意组件间通信。 它包…...

Http中你必须知道那点事
1, HTTP 1.1 简介 HTTP概念 HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。如果想知道具体的格式,可以打开浏览器…...

ViewBinding使用入门
ViewBinding 参考资料: 新技术 ViewBinding 最佳实践 & 原理击穿 更多 ViewBinding 的封装思路 1. kotlin-android-extensions(KAE) 的问题 根据Google官方的说法, KAE存在以下问题: 污染全局命名空间不能暴露可空性信息仅支持Kotlin代码 kotlin在1.4.20中 开始废弃这…...

Retrofit源码分析实践(七)【Retrofit ConvertFactory的功能实现】
Retrofit源码分析&实践系列文章目录 Retrofit源码分析&实践(一)【从使用入手分析源码】Retrofit源码分析&实践(二)【Retrofit 免费的api测试工具引入】Retrofit源码分析&实践(三)【Retrofit 代码框架搭建】Retrofit源码分析&实践(四)【Retrofit 实…...

介电常数常用测量方法综述
张扬1,徐尚志1,赵文晖2,龚增2,赵晓群1 1同济大学,上海 2上海市计量测试技术研究院,上海 在设计电路、天线、电容器等过程中经常会涉及所用材料的介电常数, 所以深入了解介电常数的相关概念对实际工作有重…...

重生之我是赏金猎人(三)-SRC漏洞挖掘-强行多次FUZZ发现某厂商SSRF到redis密码喷洒批量反弹Shell
0x00 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎大佬们点个star 最近BugBounty挖了不少,但大多数都是有手就行的漏洞,需要动脑子的实属罕见 而今天就遇到了一个非常好的案例,故作此文 0x01 对目录批量FUZZ,发…...

学会分享,学会生活,分享5款简单易用的软件。
分享是一种博爱的心境,学会分享,就学会了生活。 1.在线图片编辑工具——佐糖 佐糖是一款在线免费图片编辑工具,采用AI人工智能技术,自动识别图片,支持一键抠图,更换背景,移除水印等。另外还提…...

Redux 与 Vuex 的区别总结
Redux 工作流程 首先,用户(通过 view)发送 Action,发送方式就用到了 dispatch 方法。然后,Store 自动调用 Reducer,并传入俩个参数,当前 State 和 收到的 Action。而 Reducer 会返回新的 State。最后,Store 根据接收到的 State,判断是否发生变化。一旦发生变化,Store…...

QT(15)- QFile
1 函数 1.1 copy bool QFile::copy(const QString &newName) QFile::copy(const QString &newName) 是 Qt 中用于复制文件的函数,将 fileName() 所指向的文件复制到 newName 指定的新位置。 在复制文件之前,源文件会先被关闭。如果被复制的文…...

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的
GaiaX跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的Native动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》,带大家看看过去三年GaiaX的发展过程。 前言 GaiaX【https://github.com/alibaba/GaiaX】是由优酷应…...

python中adb shell相关操作
1、python 实现adb交互,进入adb shell后,如何再发送消息 os.popen("adb -s 192.168.1.100:5555 shell \"dmesg > /data/dmesg.log\"")进入进入adb shell,在执行 dmesg > /data/dmesg.log 2、python(或BAT脚本)自…...

python 之 资源使用与控制 resource模块
一、背景 2021年做可信计算时,由于甲方给的CPU利用率不能不能超过20%; 目的:我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行 我们的程序在CPU超过20%时,可以休眠几秒后继续运行 此时需要检测控制服务器的CPU资源使用信…...

蓝库云|8项关键让你看透企业「数字转型」,零代码是惊喜
各行各业都要面对的多方竞争力及不断上涨的经营成本,以及随着时代的发展,有不少企业纷纷推动数字化转型,考虑藉着应用现代化的数据和科技工具的结合,协助企业创造新的营运模式及收入来源,以提升自动化效率、优化客户体…...

(五)、编辑页面-发布长文-富文本编辑【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,edit页面 1.1 新建edit页面 1.2 从本地相册选择图片或使用相机拍照。 uni.chooseImage(OBJECT) 1.3 直接上传文件到云存储。 uploadFile(Object object) 1.4 从富文本编辑器获取编辑器内容 editorContext.getContents(OBJECT) 首页富文本编辑器初始化完成时…...

你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式
你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式😎前言🙌大小端介绍🙌什么大端小端呢?:大小端存储的标准定义:大端和小端存在的意义经典的面试题目🙌总结撒花💞&a…...

从零开始的数模(二十六)单因素方差分析
目录 一、概念 1.1相关概念 1.2用途 1.3数据要求:独立性/正态性/方差齐性 1.4步骤 编辑1.5专业名词 二、基于python的单因素方差分析 2.2单因素方差分析的作用 一、概念 1.1相关概念 单因素方差分析是一种常用的统计分析方法,它用于比较一个因…...

C++变量类型
目录 一、c中的变量定义 二、c中的变量声明 三、c中的左值和右值 一、c中的变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示&…...

win10 安装 vs2015(社区版本)以及opencv-4.5.5
一、下载vs2015以及opencv-4.5.5从https://msdn.itellyou.cn/ 网站下载vs2015(社区版本)从https://opencv.org/releases/网站下载opencv-4.5.5二、安装vs2015和opencv-4.5.5解压后双击exe安装文件,完成安装(默认)双击下…...

867. 转置矩阵
给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2&a…...

Datawahle组队学习——妙趣横生大数据 Day1
妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …...

网友眼中越老越吃香的行业,果然是风向变了!
越老越吃香的行业,一直都是被热议的话题。对于年轻人来说,找到一个适合自己的并且具有前景的工作,不是一件容易的事情。 最近,看到有人在平台上问相关的问题,本着认真看一看的态度点进去,却差点被热评第一…...

为什么时间序列预测这么难?本文将给你答案
机器学习和深度学习已越来越多应用在时序预测中。ARIMA 或指数平滑等经典预测方法正在被 XGBoost、高斯过程或深度学习等机器学习回归算法所取代。 尽管时序模型越来越复杂,但人们对时序模型的性能表示怀疑。有研究表明,复杂的时序模型并不一定会比时序…...

STC15系列单片机通过串口多字节数据读写EEPROM操作
STC15系列单片机通过串口多字节数据读写EEPROM操作📌相关篇《STC15系列单片机EEPROM读写示例》 ⛳手册勘误信息注意事项 ⚡在手册上面描述STC15F2K60S2及STC15L2K60S2系列单片机内部EEPROM还可以用MOVC指令读,但此时首地址不再是0000H,而是程…...

计算机网络-ip数据报
在图中,网络层包含了四种协议:ARP、IP、ICMP、IGMP,由上下关系表明,ARP为IP协议服务,IP为ICMP和IGMP服务。 IP数据报格式 此处不区分数据报和分组的概念:当数据部分过长时,将数据部分拆分&…...

从零开始学C
以下是 该如何学习C语言的【思维导图】以及部分重点知识点的【博客链接】。其实C语言并不难,难的是没有人去教,没有耐心去学。不知道从哪下手学习,我将C的知识点做成一个思维导图,以供迷茫的小白参考,哪里不会…...

【云原生】手把手带你从零开始搭建kubernetes最新版本实战
文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...

trivy os软件包扫描原理分析
具体可以基于之前的博客来做 基于trivy获取基础镜像 参数修改一下: cliOpt.ListAllPkgs true 结果中会带有如下格式的结果: "Results":[{"Target":"192.168.1.94:443/test22/centos:7 (centos 7.9.2009)","Clas…...

算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ
算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…...