直击GDC 2024 (二):网易智企首次揭秘篮球游戏AI智能体!

近几日,世界级游戏开发者盛会 GDC(Game Developers Conference)2024 正在美国举行。全球游戏行业的精英都汇聚于旧金山,共同探索前沿的游戏开发技术、洞察行业最新趋势,并互相交流对未来发展的深刻见解。

图片

(图示:Linkedin,Bandai 全球 CTO:Julien)

在 GDC 大会的机器学习峰会上,网易智企游戏行业部 CTO 陶建容带来精彩分享——《为“街球全明星”训练高拟人和高强度的篮球 AI 智能体》,这也是他第三次在 GDC 发表演讲,本次分享他首次公开展示了网易智企与上海瑞酷数码科技合作开发的篮球 AI 智能体,详尽地阐述了该智能体从设计、训练到实际部署的完整过程,并向全球游戏开发者展示了如何将游戏 AI 技术成功应用于实际场景。

图片

(图示:网易智企游戏行业部 CTO 陶建容)

本次演讲过程非常顺利,也获得 ML summit 两位负责人高度评价。演讲现场气氛活跃,众多听众积极参与,提出了一系列关于技术和应用方面的问题,陶建容也耐心地一一解答。他表示特别感谢项目组的每一位成员,以及网易智企的合作伙伴 RaccoonDigi,他们给予的极大支持是这次成功不可或缺的一部分!

图片

图片

 【陶建容】人物简介

网易智企游戏行业部 CTO,浙江大学计算机博士、高级工程师,浙江大学校外导师、香港中文大学(深圳)校外导师。负责网易智企游戏部技术研发和游戏 AI 商业化工作,面向游戏行业推出涵盖研发、美术、测试、运营等全链路的人工智能解决方案(游戏竞技机器人、游戏外挂防控、游戏智能匹配推荐、游戏智能 NPC、游戏虚拟形象、游戏美术工具等),致力于用人工智能技术赋能游戏行业降本增效,全面释放创作者的生产力,革新玩家游戏体验,申请 40 多项发明专利和 10 多项软件著作。在数据挖掘、人工智能、游戏等领域发表近 50 篇论文( KDD、AAAI、WWW、IJCAI、ACM MM、TKDE 等),获得 Ubicomp2016、CoG2020、SMDS2020 最佳论文奖,担任 ACM 信息与知识管理会议、ACM 数据挖掘与知识发现会议、IEEE 数据挖掘会议等程序委员会委员,担任 ACM 杭州分会执行委员会委员。相关研究成果在游戏行业多款游戏中投入应用(《逆水寒》、《倩女幽魂》、《天谕》、《永劫无间》、《魔兽世界》、《CS:GO》、《梦三国2》、《灌篮高手》等)。

满满干货,上周小智分享了部分一内容,这次将分享剩余精彩干货!

  1. 训练出拟人化和高强度的 AI 智能体
  2. AI 智能体的部署、测试和投放

第一期内容请查看👉 直击GDC 2024 (一):网易智企首次揭秘篮球游戏AI智能体|附全演讲技术干货内容!-CSDN博客

——————

03

训练出拟人化和高强度的 AI 智能体

通过细致观察并模仿专家的演示,AI 智能体能够学习并掌握恰当的行为与决策模式,另外,我们对 AI 进行深入训练,通过与专家示范进行比较和学习,逐步提升技能和表现。该过程让游戏 AI 智能体的行为更加拟人化,同时具备不同难度等级和高泛化能力。这不仅极大地增强了游戏的可玩性,也显著提升了游戏的市场竞争力。

1、行为拟人化

人类玩家在游戏中有三个重要特征:合作、合法动作和可控性。我们如何训练机器人具备这些特征呢?

团队合作:在输入上使用了前面提到的所有状态设计,包括 gamestates,basketballstates,playerstates,historystates 和 courtstates。我们通过卷积神经网络从 courtstates 感知篮球场上局势,通过 attention 注意力机制的设计来加强对球和球员当前以及历史状态的感知,促进队友之间的协作以及与对手的对抗。黄色部分重点强调了模型对 gamestates、自身状态以及对位人状态的关注。

在输出头上,除了 mainaction 还设计了 movedirection 以及 buttondirection,同时引入了 stagefusion module,让 AI 在不同 stage 下有独立的决策能力,最后结合 multi-taskloss 来训练加强 AI 的微操能力。

图片

(图示:GDC 机器学习峰会,网易智企演讲现场)

合法动作:为了模拟人类行为,我们尤为关注 AI 行为的合法性,施加约束以确保 AI 在特定条件下采取合理动作,比如在球距离人 1.5 米范围内才能抢板,附近 1 米内有对手的时候才能挡拆,附近 0.5 米内有对手的时候才能卡位。如果没有这些约束,AI 可能会出现远距离抢断、盖帽等行为。

可控性:AI 行为频率过高或者过低都可能导致拟人性问题,如在防守时过度投入或过早尝试抢篮板等。通过调整主要动作损失权重,可以有效控制 AI 行为,避免过度或不足的问题,使 AI 行为更贴近人类实际表现。在训练期间,我们通过调整模型的主要动作损失权重来有效控制 AI 行为。例如,我们可以通过修改主要动作损失的权重来增加低频率动作(如闪电投篮、靠打和分球)的频率。

2、难度等级差异化

在游戏过程中,有些玩家可能是初学者,需要一个相对简单的对手,而有些玩家可能是高级玩家,需要具备挑战性的对手来提升游戏体验,所以我们需要让 AI 智能体为不同水平的玩家匹配合适的难度。

图片

在提升 AI 智能体难度等级方面,我们利用段位加权,高段位的权重更大,允许机器人从高段位玩家的行为中学习。此外,我们实施表现分加权,高分获得更大的权重,使机器人能够从表现良好的比赛中学习。

我们还结合了 Q-ball 加权技术来评估每个状态动作对对应的潜在价值,确保对游戏中的微观操作有着深刻的理解和应用。最后,我们采用了 GAIL 框架,这是一种融合行为克隆和强化学习的方法,通过融合这两种技术的优势,我们持续地提升 AI 智能体的实力,使其在游戏中的表现更加强大和精准。

在削弱 AI 智能体难度等级方面,我们通过使用低段位玩家数据、得分较低的比赛数据、选择一个更简单的模型、和相对简单的网络架构来进行削弱。此外,在部署阶段,我们引入部分不可观察或错误的观察作为输入,在输出中加入随机干扰,如方向和时间,选择次优的输出,以及通过禁用某些动作实施全局控制,限制命中率和得分,并降低决策频率。

图片

(图示:GDC 机器学习峰会,网易智企演讲现场)

3、高泛化能力

如果一个球员用一个模型,新球员上线就没有模型可用,也需要积累数据才能训练相应模型。所有球员共用一个模型可以让模型具备泛化能力,新球员上线可以使用共用模型,待新球员数据积累后,加训可以提升模型表现。如果我们在共用模型的基础上,在模型参数层区分 5 个不同的球员位置,除了具备泛化性还可以提升模型的强度和拟人性。同时所有球员共用一个模型,可以大幅减少模型占据的游戏包体大小,能够支撑后续模型做移动端部署。

通过共享模型参数层面区分等手段使 AI 机器人具备高泛化能力,适应不同的玩家和游戏环境,无缝地整合到游戏中,并提供一致的游戏体验。

首先,高泛化能力可以提高新球员的接受度和参与度。当新球员加入游戏时,可以使用已经训练好的共享模型,而不需要重新训练一个新的模型。这样可以节省时间和资源,并且新球员可以立即享受到高质量的游戏体验。随着新球员的数据积累,AI 机器人的性能可以进一步提高,为他们提供更具挑战性的对手。

其次,高泛化能力可以提高游戏的可玩性和竞争性。具备高泛化能力的 AI 机器人可以适应不同的游戏环境和玩家水平,提供适合不同玩家的挑战。无论是新手还是高级玩家,他们都可以享受到与 AI 机器人的对战,获得有趣和具有挑战性的游戏体验。

图片

最后,高泛化能力可以提高游戏的稳定性和可持续性。通过使用共享模型和高泛化能力的 AI 机器人,游戏开发者可以减少模型的包体大小,降低游戏的资源消耗,并提高游戏的性能和稳定性,这有助于提高游戏的用户体验,并吸引更多的玩家参与游戏。

04

AI 智能体的部署、测试和投放

当我们从训练阶段过渡到部署阶段时,我们仍然面临三个主要挑战。首先,是在移动设备上部署 AI 机器人;其次,是 AI 机器人的复杂测试过程;最后,是确定 AI 的投放策略。这些难题的解决以确保我们的 AI 机器人能成功部署和利用。

1、在移动设备上部署 AI 机器人

通过对比客户端部署和服务器端部署,我们发现在客户端部署没有网络延迟且不需要 AI 部署服务器资源成本。

图片

所以部署在客户端是最佳选择,而为了实现客户端部署,我们实现了三个部分:

第一个是 C# SDK 的设计和开发,可以让 AI 嵌入到游戏客户端中;第二个是让我们训练出的模型可以高效的运行到移动手机端,这里使用了阿里巴巴开源的移动端推理库 MNN;第三是实现移动端推理的分配机制,不让那些 CPU 和内存高负载以及程序在后台运行的移动设备进行模型推理,尽量把推理任务公平分配到其它可用的玩家移动设备上。

图片

2、AI 机器人的复杂测试过程

AI 机器人的复杂测试过程包括高性能测试、拟人性测试和兼容性测试。

高性能测试涉及对不同阵容的 AI 机器人进行测试,以确保其在特定条件下的胜率达到要求。例如,在镜像阵容下,一个 AI 带领两个行为树必须以超过 90% 的成功率战胜三个行为树。在同样的阵容下,三个 AI 必须以 100% 的胜率击败三个行为树。此外,三个 AI 在与三个铂金段位的真实玩家对战时,AI 机器人必须有超过 75% 的胜率。我们需要对不同的阵容进行 High-performanceTesting,5 个球员就有 6 个不同的有效阵容。

图片

类人测试涉及有经验的玩家进行手动测试,以确保 AI 机器人展示出必要的行为,如正常移动、技能使用和防守跟防等。同时,也要减少或消除一些不良行为,如控球时间过长、聚集和偶尔的传球错误等。此外,还进行离线的图灵测试,以确保 AI 智能体的行为达到与玩家无法区分的水平。

图片

图片

图片

兼容性测试涉及评估 AI 机器人在不同配置的设备上的表现。这包括测试多款高中低端的 iOS 和 Android 设备模型,以确保 AI 机器人在不同设备上的顺利运行和正常行为。测试重点包括包体的顺利下载和安装、AI 在运行时的稳定性、防止程序崩溃、AI 机器人的正常行为以及 UI 的正确显示。

图片

材料展示了非常丰富的兼容性测试报告。测试过程中也发现了 iPhone6S 存在 AI 反应迟钝的问题,原因是机型配置低导致模型推理延迟。

图片

3、AI 智能体的投放策略

我们在不同的日期使用不同的 AI 机器人投放,进行 A/B 测试,通过关注如日均在线时长等指标从而找出最佳投放策略:预测实时玩家胜率并动态调整 AI 机器人的难度,帮助我们优化玩家体验,并确保 AI 机器人为所有技能水平的玩家提供引人入胜的挑战。

图片

会后,自由交流的社交时间,陶建容与 EA、Riot、Ubisoft 等顶尖游戏公司的 AI 领域专家进行了深入的交流,以下是社交时刻👇

图片

图片

AI 技术的更新迭代正引领游戏行业迈入一个无限可能的新时代,不管是游戏内容制作、游戏体验提升,还是游戏营销以及游戏运营等,AI 技术正深入应用于游戏产业链的各个环节!AI 浪潮势不可挡,小智坚信,在未来,游戏世界和 AI 的融合还会有更多可能性。

这次的分享就到先这里啦,小智也会持续挖掘更多 GDC 2024 精彩内容,大家敬请期待!

 


大家可以点赞收藏、关注我!获取更多精彩内容~

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

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

相关文章

校园跑腿小程序源码系统多校园版 跑腿达人入驻接单 带完整的安装代码包以及系统部署教程

在数字化时代的浪潮中,校园生活的便捷性和高效性成为了广大师生的共同追求。为了满足这一需求,罗峰给大家分享一款适用于多校园的跑腿小程序源码系统——校园跑腿小程序源码系统多校园版。该系统不仅提供了完整的安装代码包,还附带了详尽的系…

你以为的富贵包其实是脂肪瘤 整形外科医生为你科普脂肪瘤

脖子后面长的包都是富贵包吗?西安国际医学中心医院整形外科门诊主任冯登超曾接诊过一位七旬老人,他的颈部后方有一个直径约13厘米的巨大肿块,核磁共振检查提示右侧劲后皮下软组织内巨大囊性肿块。“他们以为是富贵包,实际上是脂肪…

C语言:给结构体取别名的4种方法

0 前言 在进行嵌入式开发的过程中,我们经常会见到typedef这个关键字,这个关键字的作用是给现有的类型取别名,在实际使用过程中往往是将一个复杂的类型名取一个简单的名字,便于我们的使用。就像我们给很熟的人取外号一样&#xff…

【大模型基础】什么是KV Cache?

哪里存在KV Cache? KV cache发生在多个token生成的步骤中,并且只发生在decoder中(例如,decoder-only模型,如 GPT,或在encoder-decoder模型,如T5的decoder部分),BERT这样…

详解Python面向对象编程(一)

类和对象 面向过程——怎么做? (1)把完成某一需求的所有步骤、从头到尾,逐步实现 (2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数 (3)最后完成的代码&a…

3.3 数据定义 数据库与系统概论

目录 3.3.1 模式的定义与删除 1. 定义模式 2. 删除模式 CASCADE(级联) RESTRICT(限制) 3.3.2 基本表的定义、删除与修改 表的定义 2.数据类型 3. 模式与表 4. 修改基本表 5. 删除基本表 3.3.3 索引的建立与删除 1. …

开发者的瑞士军刀:DevToys

DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…

2024-简单点-pandas

pandas pandas to numpy 尽量不用.values提取数据 numexpr 和 bottleneck加速 布尔操作 describe 自定义describe .pipe df.apply 行或者列级别函数级别应用

pod name 传到容器内部环境变量

背景: 部署skywalking需要管理k8s的pod,需要一个参数-Dskywalking.agent.instance_name 要将podname传递给这个参数 -Dskywalking.agent.instance_name{PODNAME} 通过configmap和secret都无法传递。 在容器里通过这两个命令都可以获取到podname 但在env里这样设置或…

模仿羊羊~消消乐

慎玩!随机生成、不保证能消完哦! 游戏试玩: 链接: https://pan.baidu.com/s/1IwtOd__8Ca0bSouMP8kEzw 提取码: 6yhd

docker配置镜像加速后容器和镜像消失

一、问题描述 根据阿里云给docker配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://gt6j98xi.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl rest…

力扣面试150 Pow(x, n) 快速幂 负指数

Problem: 50. Pow(x, n) 解题方法 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: O ( l o g 2 n ) O(log_{2}n) O(log2​n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public double myPow(double x, int n){if (x 0.0f)return 0.0d;long b…

最长上升子序列问题

题目&#xff1a;1014. 登山 思路 First 这题也可以看作最长上升子序列&#xff0c;只不过这个序列有三种情况。 先上升&#xff0c;后下降先上升&#xff0c;不下降不上升&#xff0c;直接下降 其实这三种情况我们可以归纳为一种情况&#xff1a;先上升后下降。先上升不下…

C++之多态(二)

一.抽象类 纯虚函数&#xff1a;在虚函数后面加上0就是纯虚函数 作用&#xff1a;纯虚函数规范了派生类必须重写&#xff0c;另外纯虚函数更体现出了接口继承 抽象类定义&#xff1a; 包含纯虚函数的类叫做抽象类&#xff08;也叫接口类&#xff09;&#xff0c;抽象类不能…

Scikit-Learn K近邻分类

Scikit-Learn K近邻分类 1、K近邻分类1.1、K近邻分类及原理1.2、超参数K1.3、K近邻分类的优缺点2、Scikit-Learn K近邻分类2.1、Scikit-Learn K近邻分类API1、K近邻分类 K近邻是一种常用的分类算法。K近邻在机器学习知识结构中的位置如下: 1.1、K近邻分类及原理 K近邻(K-Near…

GoogLeNet论文学习笔记

题目&#xff1a;Going deeper with convolutions 下载地址&#xff1a;GoogLeNet论文 代码&#xff1a;GoogLeNet代码 GoogLeNet在2014年的ISCRC分类比赛中第一名。 创新点 引入Inception结构&#xff08;融合不同尺度的特征信息&#xff09;&#xff1b; 使用1*1的卷积核…

AI:Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略

AI&#xff1a;Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略 目录 Nvidia官网人工智能大模型工具合集的简介 1、网站主要功能包括: Nvidia官网人工智能大模型工具合集的使用方法 1、SDXL-Turbo的使用 2、GEMMA-7B的…

全志A33编译踩坑!

领导给了个新sdk。然后开编。 编译的标准流程是这样 cd lichee ./build.sh config 这还得了&#xff0c;每次都选很烦&#xff08;虽然只需要选一次&#xff09;&#xff0c;于是新写法是这样 ./build.sh -p sun8iw5p1_android -k linux-3.4 -b evb 果断提示 ERROR: inv…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置&#xff08;Intellij IDEA - Settings - Plugins &#xff09;

vue-cli5多入口项目分项目编译打包并部署nginx

项目准备 假设有两个项目A和B&#xff0c;我们希望访问localhost:9000/projectA来访问项目A&#xff0c;访问localhost:9000/projectB来访问项目B. 项目结构 项目配置 vue.config.js var projectname process.argv[3] function getEntry() {var entries {}if (process.en…