把 AI 人机炼成高玩,游戏 AI 技术实践指南,码住!

今天,为大家深入浅出地讲明白上亚运的经典 IP《梦三国 2》,到底应用了哪些来自网易数智的 AI 黑科技。看完你就会觉得:原来做 AI,我也行!

方案概述

游戏作为 AI 落地最佳的试验田,近年来已经产生了多个极具影响力的案例,如《星际争霸 2》中的 AlphaStar、《Dota2》中的 OpenAI Five 等,各大游戏厂商更是早早开始了 AI 实验室的布局。但与之相对的,国内还没有跑出特别标杆的游戏 AI 应用实践。随着 AI + 游戏落地案例越来越多,AI 在游戏中的商业价值亦成为海内外各大厂商的共识。

基于自研的分布式强化学习训练框架,为超大型 MOBA 游戏《梦三国 2》训练出高水平游戏 AI 智能体,满足游戏中迫切的陪玩、对决需求

游戏环境的开发

为了训练强化学习 AI 机器人,首先需要将游戏接入训练框架中,因此游戏本身需要开发一些额外的功能。

我们将需要开发的游戏环境称为 GameCore,其基本定义为:在游戏客户端基础上,添加了与 AI 服务器通信交互功能。通过 GameCore 将游戏状态发送给 AI,AI 收到状态后做出一次决策,决策返回至 GameCore 中并得到执行,如此往复。

由于训练阶段需要同时开启多个 GameCore,为满足大量 GameCore 同时训练的需求,必须使用大规模分布式训练框架

训练框架的接入

游戏 AI 的训练离不开模仿学习和强化学习,而这些都依赖于海量的数据、算力,以及高效的训练算法。分布式强化学习框架就是要提供这样一个高效的训练平台,支持游戏仿真环境并行采样,支持流水线式数据处理,支持高吞吐低延迟的模型预测以及支持多机多卡并行训练。

现有的开源强化学习框架比如 Ray(RLlib)、OpenAI Baselines、PyMARL 等,更多的是实验和研究性质,满足了强化学习算法探索、效果对齐等需求,特点是通用性强,算法可拓展性高,但面对真实的游戏场景往往不够实用。

为了解决以上问题,数智自研了分布式强化学习训推一体化框架 BrayBray 面向真实的游戏 AI 落地进行优化,在算法侧做减法,保证框架的简单易于上手,同时用模块化设计理念保证了框架的高可用。具体地,Bray 解决了以下几个痛点问题:

1. 统一训练和推理框架

游戏 AI 的研发上线往往经过训练和部署两个阶段,部署阶段的特征处理和模型推理逻辑是训练的子集,二者的代码可以复用。为了进一步降低训练到部署的迁移成本,保证迁移的正确性,Bray 在框架层面支持了训练到部署的无缝迁移

2. 规范化游戏 AI 的接入流程

一个游戏 AI 的接入涉及到游戏开发、算法对接、性能优化等,通过规范接入过程的流程和接口,Bray 实现了各个模块的并行接入、测试和验证,缩短了游戏 AI 的接入周期

3. 模块化设计和简单易用的 API

Bray 中明确定义了 Actor、Model、Buffer、Trainer 等概念,对应到 Python 中的类和模块,模块间充分解耦,让游戏接入、算法调优和性能优化可以独立进行。此外模块化设计保证了框架的高可拓展性,快速支持 SelfPlay 和 League 等多智能体训练

由于《梦三国 2》游戏环境在强化学习中属于经典的稀疏奖励问题(sparse reward), 即在一个完整的 episode 中,绝大部分 step 的 reward 为 0,这导致智能体(下称“agent”)从 init state(初始状态)开始的随机探索效率非常低,极大降低了训练效率。

我们首先使用状态完全随机初始化,如对于一个打野英雄,它可能会被直接传送到一个残血的野怪附近;从而极大提升有效样本在前期探索中的比例。

但这种方法无法解决的问题是,随着训练的迭代,agent 对某些初始状态的探索已足够充分,我们需要更加关注 agent 探索不够充分的状态,比如对于打野英雄,它很快就会学会刷野,但却要花费非常多的时间来学会如何 gank 及反野,因此我们进一步引入了加权随机初始化,具体地:

我们设计了一个打分函数,用于给每个初始状态打分,agent 对该状态的收敛度越高,分数便越低,该初始状态及分数会被存储在一个特殊的 buffer 中;在环境每次 reset 时,我们都会以一定的概率从 buffer 中以分值为权重采样出一个初始状态,由此,agent 可以更加专注于探索不充分的状态,训练效率得到极大提升。

风格多样性的微调

在过去的方法中,如果我们想让 agent 学会一种新的策略(风格),往往通过设计一套新的奖励函数来实现,并且过程中还需要根据 agent 实际表现对奖励函数的权重进行不断微调重新训练。

据此,我们采用了一种新的方法来避免耗费过多的时间在调整权重上,具体地:

我们为奖励函数的组成部分中,所有会影响策略风格的实体添加一个系数,比如推掉外层一塔便是一个实体;在每个 episode 开始时,我们为每一个 player 重置一套新的风格系数,并将风格系数添加至神经网络的输入中,由此让神经网络拟合风格系数与策略表现之间的映射关系,在模型收敛后,我们便可以通过观察每一组风格系数对应的策略来找到多组风格迥异的模型

为了满足不同段位玩家的体验,我们对 agent 的能力进行了难度分级,具体地:

我们希望不同难度 agent 的区分度主要表现在 agent 对游戏的理解能力及操作能力,即大局观和微操

据此,我们首先对神经网络的输入加入了层次噪声,来使得 agent 对局势判断出现误差,从而模拟不同段位玩家的大局观;进一步地,我们对神经网络的输出加入了分层延迟及扰动,从而模拟不同段位玩家的手速及微操能力。

最后,我们多组难度的模型投放到线上与真实玩家对战,选取天梯分稳定在某个段位的模型作为该段位的分级模型

强化学习方案优势

  • 通过让游戏 AI 智能体在每局比赛中都“精彩地输掉”,解决公平竞技游戏中“双方都想赢那谁来输”的问题

  • 为玩家分配更加贴近其真实水平的智能体,让玩家获得更真实的对抗体验,酣畅淋漓地获胜!

  • 通过优化训练方案,极大降低训练智能体需要的机器成本

戳我即可收获《网易数智年度技术精选》

《2023年度游戏安全观察与实践报告》戳我查看

《 2023 中国移动游戏私域运营指南 · 启动篇》

《网易数智游戏AI实践指南》更多干货内容,可以✉✉~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机系统基础(二)

1.数值数据的表示 为什么采用二进制? 二进制只有两种基本状态,两个物理器件就可以表示0和1二进制的编码、技术、运算规则都很简单0和1与逻辑命题的真假对应,方便通过逻辑门电路实现算术运算 数值数据表示的三要素 进位记数制(十…

计算机缺少d3dcompiler_43.dll无法继续执行代码怎么修复

打开游戏或许软件程序时候,我们会经常遇到各式各样的问题,比如找不到d3dcompiler_43.dll无法继续执行代码就是非常常见的问题,今天我叫大家如何解决遇到d3dcompiler_43.dll丢失问题,也详细介绍d3dcompiler_43.dll文件是什么与丢失…

加油卡APP开发,汽车加油省钱新模式

随着社会生活水平的提高,汽车已经成为了家家户户的出行工具,汽车加油也就成为了居民日常出行必不可少的开销。为了让居民享受到更加便利、优惠的加油体验,加油卡APP由此产生,不仅方便了用户,也给汽车加油市场提供了更加…

Qt常用技巧代码分享

写在前面:首先Qt主要是面向于界面设计,界面有些布局以及用法很多,可以不会写代码,但是要知道Qt可以实现这个功能,然后一点点去寻找学习,问AI也好,百度也好都可以,总比Qt可以实现某些布局功能,但是你不知道怎么去实现这些功能要好得多。俗话说的好,可以不会,但是不能…

跨境电商新趋势:海外盲盒小程序的市场机遇

随着全球经济的深度融合和消费者需求的日益多元化,跨境电商作为一种新型的国际贸易模式,正在以前所未有的速度发展。而在这一浪潮中,海外盲盒小程序凭借其独特的商业模式和强大的市场潜力,正逐渐成为跨境电商领域的新宠。本文将探…

双目摄像头测距

Opencv双目校正函数 stereoRectify 详解 参数说明: 输入参数: cameraMatrix1:左目相机内参矩阵 distCoeffs1:左目相机畸变参数 cameraMatrix2:右目相机内参矩阵 distCoeffs2:右目相机畸变参数 imageSize&…

检索增强生成RAG系列6--RAG提升之查询结构化(Query Construction)

在系列3文档处理中,我们着重讲解了文档解析,但是我们说的文档都是大部分是非结构化的文档或者说它就是以一个文档的形式存储。而现实中我们很多有价值的数据可能以结构化(关系型数据库、图形数据库等)或者半结构(关系型…

基于X86+FPGA+AI的切割机控制、六轴机器人控制方案

一、智能设备控制 应用场景 智能制造(Intelligent Manufacturing, IM)是一种由智能机器和人类专家共同组成的人机一体化智能系统,它在制造过程中能进行智能活动,诸如分析、推理、判断、构思和决策等。通过人与智能机器的合作共事,去扩大、延…

从零到百万用户的扩展之路

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/design-system 设计一个支持数百万用户的系统是极具挑战性的,它是一段需要持续优化和不断改进的旅程。在这篇博客中,我们将构建一个支持单个用…

开发数字药店APP实战:互联网医院系统源码详解

本篇文章,笔者将深入探讨如何开发一个功能完善的数字药店APP,并详细解析互联网医院系统的源码实现。 一、数字药店APP的需求分析 应具备以下基本功能: 用户注册与登录 药品搜索与浏览 在线下单与支付 订单管理 健康咨询与远程医疗 个人…

人脉社群平台微信小程序系统源码

🌟【解锁人脉新纪元:探索人脉社群平台小程序】🌟 🚀【开篇:为什么我们需要人脉社群平台小程序?】🚀 在这个快节奏的时代,人脉不再是简单的名片交换,而是通往成功与机遇…

发电机保护屏的作用及其重要性

发电机保护屏的作用及其重要性 发电机保护屏是电力系统中的重要组成部分,它负责监测和控制发电机的运行状态,确保发电机在正常运行和故障情况下都能得到及时、准确的保护。负责监测和控制发电机运行状态,确保及时准确的保护。它由显示屏、控制…

Nacos 2.x 系列【18】多网卡 IP 配置

文章目录 1. 前言2. 服务端3. 客户端 1. 前言 个人电脑或者服务器,存在多网卡环境时,Nacos 可能会存在IP不正确问题。 2. 服务端 Nacos 服务在启动的时候需要选择运行时使用的IP或者网卡,在启动时,可以看到打印了IP&#xff1a…

2024年【四川省安全员A证】试题及解析及四川省安全员A证模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员A证试题及解析根据新四川省安全员A证考试大纲要求,安全生产模拟考试一点通将四川省安全员A证模拟考试试题进行汇编,组成一套四川省安全员A证全真模拟考试试题,学员可通…

如何在 Odoo 16 中将按钮添加到所有表单视图的操作按钮

在 Odoo 中,操作按钮是关键组件,允许用户触发与特定表单视图相关的特定操作或工作流。这些按钮策略性地放置在用户界面中,可简化操作并提高用户效率。它们可以自定义以执行各种任务,例如创建记录、更新信息或启动特定流程。 操作…

万界星空科技服装行业MES系统解决方案

据调查,我国大多数服装厂目前存在两大问题: 第一,是生产设备先进,但管理模式落后,仍采用手工管理模式,未实现信息化; 第二,仍有大量的人工站,短时间内难以用设备代替&a…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写,它是一种文件保存格式,具有以下特点和相关信息: 一、定义与用途 定义:XPF文件用于保留文档的固定布局,包括文本、图片以及其他文档元素的确切位置。…

软件工程实验

实验环境和需求 用户可以对相片进行按类别管理,用户可以设定不同的类别,然后上传照片到相应的类别中,并能进行照片的删除,注释 运行 运行并访问 localhost 8090,图片在数据库中的信息是D:/upgrade 后面的内容 se…

Emacs之解决:java-mode占用C-c C-c问题(一百四十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…