【数据应用案例】openFive dota5v5战胜人类

2024-09-06 04:08

本文主要是介绍【数据应用案例】openFive dota5v5战胜人类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@案例来源:@AI科技大本营 @AI科技评论 @论智

@案例地址:https://mp.weixin.qq.com/s/exvP4FucUfeOONsUkyTz7w;https://mp.weixin.qq.com/s/-llCCnFkDypVNiEh4yjNMg;https://www.jqr.com/article/000306

 

0. 背景:美国时间8月5日,open AI的5v5dotaAI “Open Five”2比1战胜了由主播、前职业选手组成的人类战队。

 

1. 目标:训练能在5v5比赛中打赢高水平人类选手的AI

 

2. 难点:

    1)强化学习能学习到“带来高反馈”的模式,但是游戏中影响胜利的因素很多,视野、团战、技能冷却中、分路、兵线等,人类也难以定义哪些因素对最终胜利起到决定性因素,为模型制定反馈规则较为复杂

    2)仅仅以最终胜负作为反馈的话,会带来反馈稀疏的问题

    3)5v5游戏中需要团队配合,包括核心辅助的角色划分,前中后期的资源分配等

    4)视野有限:必须在有限信息中进行决策

    5)高维、连续的观察空间和动作空间

    6)短期收益与长期收益的矛盾:打钱可以提高短期收益,但是队友推塔时自己还在打钱会降低推塔成功率,从而影响长期收益

 

3. 基本框架

    1)为每个英雄单独训练一个网络,网络为一个单层的、1024-unit 的 LSTM

    2)观察空间:通过dota的bot api获取实时的游戏信息,将世界视为 20000 个数字的列表

    3)动作空间:动作、动作在单元格网络中的X或Y坐标等,共8个值的列表

    4)训练:

        a. 使用“Rapid”通用 RL 训练系统,训练系统分为 rollout workers,运行游戏副本,智能体(agent),用来收集经验,优化器节点(optimizer nodes)执行跨 GPU 组的同步梯度下降。每次训练还包括分别对训练机器人以及样本机器人进行评估的组件,以及监视软件,比如 TensorBoard,Sentry 以及 Grafana。

        b. 使用128,000个preemptible CPU,256个P100 GPU。一天的训练量相当于人类不间断玩了180年游戏

        c. 为了避免“策略崩溃”,智能体在训练的时候,80% 的游戏都是自我对抗, 另外 20% 则是与过去的自己进行对抗

        d. 为了强制探索动作空间,在训练中对智能体的血量、移速、初始等级随机化,强迫其进行探索

 

4. trick

    1)增加表现行为(总财产、补刀数、击杀数、助攻数、死亡数)作为反馈指标

    2)引入人类对英雄的定位信息(如核心、辅助等):鼓励AI将表现指标“达到”人类的平均水平,而不是越大越好。如冰女是辅助英雄,补刀数低,助攻数高,当AI表现越接近人类在相同时间的平均值时,获得的奖励越高

    3)团队精神:设置一个“团队精神”超参数,平衡AI个体收益和团队收益之间的奖励权重

    4)探索与攻击肉山:在Open Five刚发布的时候,AI是不会主动去打肉山。但是在本次比赛中,AI频繁探索肉山视野(避免对手打肉山),并有了打肉山的行为。训练技巧是在训练中给肉山随机血量,那么AI探索肉山并遇见肉山随机到低血量的时候,很容易低成本获得高奖励,从而鼓励AI开始关注肜

    5)眼:训练AI买眼与插眼控制视野太过复杂(眼在游戏中是有限的稀缺资源,插眼需要对游戏未来数分钟局势的判断,同时插眼需要付出较高的时间成本和生命危险,因此计算插眼路线也十分困难),所以目前直接通过脚本的形式写入AI,让AI有眼的时候就买。眼会占格子,当AI格子满的时候,就会插眼(所以比赛中AI的眼位比较奇特)

 

 

这篇关于【数据应用案例】openFive dota5v5战胜人类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140959

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个