HI,欢迎来到起点商标网!
24小时服务QQ:2880605093

训练游戏AI的方法、系统、存储介质及计算机设备与流程

2021-01-11 11:01:26|306|起点商标网
训练游戏AI的方法、系统、存储介质及计算机设备与流程

本申请涉及计算机技术领域,尤其涉及人工智能领域,具体涉及一种训练游戏ai的方法、系统、存储介质及计算机设备。



背景技术:

游戏ai(artificialintelligence,人工智能),是竞技类游戏中由计算机程序控制的拟人化角色。在设计或控制游戏ai时,并不是以其在游戏对战中胜利为单一目的。因此,广义上讲,只要在游戏过程中,能够给予游戏玩家以某种智能程度的错觉,使得游戏更能引人入胜、更具有挑战性和/或更好玩的拟人化角色都可以称为游戏ai。

游戏ai并不是一开始就具有高度智能,游戏ai的智能程度依赖于训练。现有训练游戏ai的方法通常有如下步骤完成:1)在多个线程上创建游戏ai的训练环境;2)由训练程序控制每个训练环境中的游戏ai,即对游戏ai发出指令,游戏ai在训练环境中执行这些指令;3)根据训练环境对指令执行结果的反馈,训练程序学习并更新算法;4)重复步骤1)至3),直至某个线程上的游戏ai获得胜利,重置该线程的训练环境,开始新一轮的训练。

然而,上述现有训练游戏ai的方法只能利用到单台计算机上的计算资源,而多线程处理还需要考虑线程同步问题,频繁的同步锁将降低运行效率。因此,现有训练游戏ai的方法效率较低,对于需要进行海量训练才能达到期望值的游戏ai,现有技术难以胜任。



技术实现要素:

本申请实施例提供一种训练游戏ai的方法、系统、存储介质及计算机设备,可以提高游戏ai的训练效率。

本申请实施例提供了一种训练游戏ai的方法,应用于服务器集群,所述服务器集群包括多台服务器,在所述多台服务器上运行着一个主进程和至少两个从进程,每个所述从进程分布于多台服务器中的一台服务器,所述主进程只存在于所述多台服务器中的一台服务器,所述方法包括:

所述主进程基于每次训练后的神经网络,向至少两个所述从进程发送用于指示游戏ai-j与所述游戏ai-j所处训练环境进行交互的动作指令,所述游戏ai-j为任意一个所述从进程对应训练环境中的一个游戏ai;

所述从进程向所述游戏ai-j发送所述动作指令,以指示所述游戏ai-j执行与所述游戏ai-j所处训练环境的交互;

所述从进程向所述主进程反馈所述交互的结果数据,所述交互的结果数据包括所述交互的标识、所述游戏ai-j执行所述交互后所述游戏ai-j获取的收益和所述游戏ai-j执行所述交互后所述游戏ai-j所处训练环境的状态;

所述主进程根据存储的训练数据集,持续对所述神经网络进行训练,直至预设条件得到满足后停止对所述神经网络的训练,所述训练数据集包括所有游戏ai与其所处训练环境交互的历史交互数据以及所述游戏ai-j与所述游戏ai-j所处训练环境交互的交互数据。

可选地,所述主进程根据存储的训练数据集,持续对所述神经网络进行训练,包括:根据所述训练数据集,求解所述神经网络的状态变更函数和收益函数;根据所述神经网络的状态变更函数和收益函数,采用强化学习算法求解所述神经网络的最佳状态估计值函数;基于所述最佳状态估计值函数,修改所述训练数据集中游戏ai获取的收益;将所述修改后的训练数据集用于对所述神经网络进行训练。

可选地,所述基于所述最佳状态估计函数,修改所述训练数据集中游戏ai获取的收益,包括:根据游戏ai所处训练环境为当前状态时所述神经网络的最佳状态估计值和游戏ai所处训练环境为下一状态时所述神经网络的最佳状态估计值,计算所述两个最佳状态估计值的偏差;将所述游戏ai获取的收益与所述偏差求和,得到所述训练数据集中修改后的游戏ai获取的收益。

可选地,所述神经网络包括行为选择网络和价值评估网络,所述主进程根据存储的训练数据集,持续对所述神经网络进行训练,包括:从所述训练数据集中随机选择一批训练数据,训练所述价值评估网络,所述训练数据包括游戏ai在即将执行所述行为选择网络输出的游戏ai与游戏ai所处训练环境的交互后获取的收益;基于所述价值评估网络输出的评价值,训练所述行为选择网络。

可选地,所述训练所述价值评估网络或训练所述行为选择网络,包括:根据近处方略优化算法,确定所述价值评估网络或所述行为选择网络中各个节点参数的梯度下降步长,使每次训练时梯度下降朝最优方向下降正确步长。

可选地,所述训练所述价值评估网络或训练所述行为选择网络,包括:根据确定方略梯度算法训练所述价值评估网络或所述行为选择网络,当向所述价值评估网络提供相同的输入时,所述价值评估网络输出相同,当向所述行为选择网络提供相同的输入时,所述行为选择网络输出相同。

可选地,所述方法还包括:判断游戏ai在当前时刻的下一时刻所处训练环境的真实状态与预测状态之间的差异;若所述差异大于预设差异阈值,则将所述游戏ai获取的收益增加与所述差异相应的附加。

本申请实施例还提供一种训练游戏ai的系统,包括服务器集群,所述服务器集群包括多台服务器,在所述多台服务器上运行着一个主进程和至少两个从进程,每个所述从进程分布于多台服务器中的一台服务器,所述主进程只存在于所述多台服务器中的一台服务器,所述主进程所在的服务器包括指令发送模块和网络训练模块,每一个所述从进程所在的服务器包括指令转发模块和反馈模块;

所述指令发送模块,用于基于每次训练后的神经网络,向至少两个所述从进程发送用于指示游戏ai-j与所述游戏ai-j所处训练环境进行交互的动作指令,所述游戏ai-j为任意一个所述从进程对应训练环境中的一个游戏ai;

所述指令转发模块,用于向所述游戏ai-j发送所述动作指令,以指示所述游戏ai-j执行与所述游戏ai-j所处训练环境的交互;

所述反馈模块,用于向所述主进程反馈所述交互的数据,所述交互的数据包括所述交互的标识、所述游戏ai-j执行所述交互后所述游戏ai-j获取的收益和所述游戏ai-j执行所述交互后所述游戏ai-j所处训练环境的状态;

所述网络训练模块,用于根据存储的训练数据集,持续对所述神经网络进行训练,直至预设条件得到满足后停止对所述神经网络的训练,所述训练数据集包括所有游戏ai与其所处训练环境交互的历史交互数据以及所述游戏ai-j与所述游戏ai-j所处训练环境交互的交互数据。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行如上任一实施例所述的训练游戏ai的方法中的步骤。

本申请实施例还提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,执行如上任一实施例所述的训练游戏ai的方法中的步骤。

从上述本申请实施例提供的技术方案可知,一方面,本申请的技术方案是以运行在多台服务器上的主进程和从进程来实现,不仅免去了多线程的方法需要频繁线程同步的问题,而且服务器集群强大的计算能力为海量的训练提供了效率保障;另一方面,主进程主要负责神经网络的训练,从进程主要负责指令的转发和训练环境数据的反馈,主进程和从进程之间的耦合较弱,由此亦能提高训练游戏ai的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的训练游戏ai的系统的结构示意图。

图2为本申请实施例提供的训练游戏ai的方法的流程示意图。

图3为本申请实施例提供的行为选择网络和价值评估网络的关系示意图。

图4为本申请另一实施例提供的训练游戏ai的系统的结构示意图。

图5为本申请实施例提供的以dqn为例的强化学习算法训练游戏ai的流程示意图。

图6为本申请另一实施例提供的训练游戏ai的系统的结构示意图。

图7为本申请另一实施例提供的训练游戏ai的系统的结构示意图。

图8为本申请实施例提供的计算机设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提供一种训练游戏ai的方法、系统、存储介质及计算机设备。具体地,本申请实施例的训练游戏ai的方法可以由计算机设备执行,其中,该计算机设备可以是服务器等设备,其可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。

请参阅图1,图1为本申请实施例提供的训练游戏ai的系统的场景示意图。该系统由主从结构的服务器集群组成,可以包括至少3个服务器、一个数据库103和网络104,其中,一个服务器作为主进程所在的服务器101,至少两个服务器作为分布从进程的服务器102,数据库103可以是独立于服务器之外但可以耦合至服务器的实体,也可以集成于服务器中,用于存储实施本申请的方法时产生的数据。网络104可以是无线网络或者有线网络,比如无线网络为无线局域网(wlan)、局域网(lan)、蜂窝网络、2g网络、3g网络、4g网络、5g网络等。

本申请实施例提供的训练游戏ai的方法可应用于如附图1示例的服务器集群,该服务器集群包括多台服务器,在多台服务器上运行着一个主进程和至少两个从进程,每个从进程分布于多台服务器中的一台服务器,主进程只存在于多台服务器中的一台服务器。请参阅图2,为本申请实施例提供的训练游戏ai的方法的流程示意图,主要包括步骤s201至步骤s204,详细说明如下:

步骤s201,主进程基于每次训练后的神经网络,向至少两个从进程发送用于指示游戏ai-j与游戏ai-j所处训练环境进行交互的动作指令,其中,游戏ai-j为任意一个从进程对应训练环境中的一个游戏ai。

在本申请实施例中,主进程主要负责对神经网络的训练,如后续步骤s204所述。训练后的神经网络在得到一个输入后,将输出一个动作,该动作就是当前时刻某个游戏ai可以与所处训练环境进行的交互。主进程通过进程之间的通信,例如,远程过程调用(remoteprocedurecall,rpc)的方式将该动作对应的动作指令发送给从进程。需要说明的是,本申请言及游戏ai所处训练环境是对游戏ai所交互的对象的统称,包括游戏场景下与游戏ai对战的游戏角色、游戏场景中的各种虚拟物,例如,障碍物、各种道具等,游戏角色可以是玩家操控的角色,例如各种英雄、魔法师、怪物等等,游戏角色甚至可以是已经训练成熟即智能程度达到要求的游戏ai,而游戏ai与该游戏ai所处训练环境的交互可以是该游戏ai发出的某个动作,例如,移动、跳跃、飞行、释放技能与游戏角色对战等。

步骤s202,从进程向游戏ai-j发送动作指令,以指示游戏ai-j执行与游戏ai-j所处训练环境的交互。

在本申请实施例中,每个游戏ai在程序中被实例化为一个对象,每个对象具有唯一的标识(id),并且,对象被分配了一个通信地址,在初始化期间,每个对象的标识和通信地址都注册给另一对象,程序中其他被实例化的对象也具有如游戏ai相类似的属性即也具有唯一的标识和ip地址。主进程向从进程发送动作指令,实际上也是主进程上的对象向从进程上的对象发送动作指令,例如,在本申请实施例中,主进程上一个被实例化的对象为gamecontroller(游戏控制者),多个从进程中,一个从进程上被实例化的对象是battlemanager(战场管理者),对象gamecontroller可以将神经网络输出的动作对应的动作指令发送至对象battlemanager。对象battlemanager根据动作指令中携带的对象标识和ip地址,将该动作指令发送至相应的游戏ai,以指示该游戏ai执行与该游戏ai所处训练环境的交互。

步骤s203,从进程向主进程反馈游戏ai-j执行与游戏ai-j所处训练环境的交互的结果数据,该交互的结果数据包括交互的标识、游戏ai-j执行交互后游戏ai-j获取的收益和游戏ai-j执行交互后游戏ai-j所处训练环境的状态。

在本申请实施例中,交互的标识用于说明游戏ai对该游戏ai所处训练环境执行了什么动作,游戏ai执行交互后该游戏ai获取的收益,是指该游戏执行了某个交互后获得的奖励(reward),该奖励是一个标量值,可以为负数、零或正数,其中,负数表示该游戏ai与其所处训练环境执行了一个错误的交互而得到的惩罚,说明该游戏ai在后续不应再与其所处训练环境执行该交互或者要修正与其所处环境的交互,正数表示该游戏ai与其所处训练环境执行了一个正确的交互而得到的奖赏,用于鼓励该游戏ai后续可以多多与其所处训练环境执行该交互,零则表示该游戏ai与其所处训练环境执行了一个赏罚不明的交互,得不到奖赏,也得不到惩罚,因此,若该游戏ai得到一个值为0的收益,往往处于“无所事事”或茫然不知所措的状态,这是要尽量避免的。

步骤s204,主进程根据存储的训练数据集,持续对神经网络进行训练,直至预设条件得到满足后停止对该神经网络的训练,其中,训练数据集包括所有游戏ai与其所处训练环境交互的历史结果数据以及游戏ai-j与游戏ai-j所处训练环境交互的结果数据。

在本申请实施例中,所有游戏ai与其所处训练环境交互的历史结果数据以及当前游戏ai-j与游戏ai-j所处训练环境交互的结果数据可以作为训练数据集,存储在一个称为“记忆库”的数据库或存储单元,这些结果数据是所有游戏ai与其所处环境交互的历史和当前反馈信息,包括某个交互后游戏ai获取的收益以及该游戏ai所处训练环境的状态,等等。

作为本申请一个实施例,主进程根据存储的训练数据集,持续对神经网络进行训练可以通过如下步骤s2041至步骤s2044实现:

步骤s2041:根据训练数据集,求解神经网络的状态变更函数和收益函数。

在本申请实施例中,神经网络的状态变更函数是某个游戏ai与其所处训练环境的交互(用a表示)、该游戏ai与其所处训练环境交互时该训练环境当前所处状态(使用s表示)以及该游戏ai与其所处训练环境交互后该训练环境后继状态(使用s’表示)的函数,用t(a,s,s’)表示,其值表明了在训练环境当前所处状态s下,游戏ai执行了与其的交互a之后,该训练环境变更为状态s’的概率,而收益函数r(a,s)的值表明了在训练环境当前所处状态s下,游戏ai执行了与其的交互a之后,该游戏ai获取的奖赏(若r(a,s)的值为负数,则“奖赏”实际成为惩罚)。从上述分析亦可获知,训练数据集中的一个训练数据实际是一个由a,s,s’和r组成的四元组,即训练数据=(a,s,s’,r),其中,r为收益函数r(a,s)的值。需要说明的是,神经网络的状态变更函数和收益函数,可以根据训练数据集,通过概率统计的方式求得。

步骤s2042:根据神经网络的状态变更函数和收益函数,采用强化学习算法求解神经网络的最佳状态估计值函数。

强化学习算法被称为试错算法,也是一种无师自通的学习过程,即游戏ai通过与训练环境交互,引起训练环境状态的改变,从训练环境那里得到该交互的收益(reward),目的是寻找最优的交互策略,即寻找到一个从训练环境的状态到游戏ai与该训练环境的交互的映射,以求得收益最大。在本申请实施例中,最佳状态估计值函数用v*(s)表示时,v*(s)具体为:

其中,r(a,s)和t(a,s,s’)的意义如前所述,而λ表示折扣因子。显然,最佳状态估计值函数的值即最佳状态估计值是使得r(a,s)与λt(s,a,s’)v*(s’)的和取得最大的值,当取得最佳状态估计值时,神经网络输出的交互a也是最佳动作策略。对于采用强化学习算法求解v*(s)属于现有技术,此处不做赘述。

步骤s2043:基于最佳状态估计值函数,修改训练数据集中游戏ai获取的收益。

具体而言,步骤s2043的实现可以是:根据游戏ai所处训练环境为下一状态时神经网络的最佳状态估计值和该游戏ai所处训练环境为当前状态时神经网络的最佳状态估计值,计算两个最佳状态估计值的偏差,将游戏ai获取的收益与偏差求和,得到训练数据集中修改后的游戏ai获取的收益,即,若用v*(s’)表示游戏ai所处训练环境为下一状态s’(即游戏ai所处训练环境当前状态s的后继状态)时神经网络的最佳状态估计值,v*(s)表示该游戏ai所处训练环境为当前状态s时神经网络的最佳状态估计值,r表示该游戏ai在其所处训练环境为状态时获取的收益,则训练数据集中修改后的游戏ai获取的收益为r'=r+[v*(s’)-v*(s)]。

步骤s2044:将修改后的训练数据集用于对神经网络进行训练。

若神经网络为深度强化学习(deepq-learning,dqn)模型,则将修改后的训练数据集用于对神经网络进行训练,实际上转化为对表达式[yi-q(si,ai;θ)]2求梯度,其中:

此处,i=1,2,…,k,k表示训练数据的数量。

游戏ai获取的收益被修改后,新的收益将作为修改后的训练数据集的一部分,用于对神经网络的训练。

在步骤s204的神经网络包括行为选择网络和价值评估网络时,作为本申请另一实施例,步骤s204可通过如下步骤s’2041和步骤s’2042实现,说明如下:

步骤s’2041:从训练数据集中随机选择一批训练数据,训练价值评估网络,其中,训练数据包括游戏ai在即将执行行为选择网络输出的游戏ai与游戏ai所处训练环境的交互后获取的收益。

如附图3所示,是本申请实施例提供的行为选择网络和价值评估网络的关系示意图。训练数据集来自于前述提及的“记忆库”,显然,“记忆库”的数据来源于训练环境反馈的信息,包括游戏ai在即将执行行为选择网络输出的游戏ai与游戏ai所处训练环境的交互后,该游戏ai获取的收益(reward)。价值评估网络用于评价行为选择网络输出的动作的优劣,该优劣采用游戏ai实施了该动作后获取的收益大小和/或多少来评估。价值评估网络输出的评价值可以为游戏ai执行了某个动作后,在将来能够得到的所有收益之和。若价值评估网络输出的评价值准确,则游戏ai执行的前后两个动作所获取的评价值之差应该等于后一动作获取的收益。基于此,可以调整价值评估网络全连接层的各个节点的权重,使得当输出的评价值与上一次输出的评价值之差逼近当前评估的动作所获取的收益。价值评估网络输出的评价值,应当正相关于游戏ai与游戏ai所处训练环境的交互后获取的收益,即,基于执行动作获取的收益来训练价值评估网络,使得价值评估网络输出的对于该动作的评价值能够与该动作获取的收益相一致,例如,获取的收益越高的动作,其评价值越高,反之,获取的收益越低的动作,其评价值越低。

步骤s’2042:基于价值评估网络输出的评价值,训练行为选择网络。

在本申请实施例中,行为选择网络实际上是一个策略确定模型,用于决定输出何种动作,该动作也是后续游戏ai与其所处训练环境的交互。无论是行为选择网络还是价值评估网络,都可以是包含一个或多个全连接层的神经网络,至于每个全连接层包含多少节点,则可以根据具体的设计灵活选择。作为训练行为选择网络的参数,价值评估网络输出的评价值可以使得行为选择网络能够提升输出评价值高的动作的概率,而降低输出评价值低的动作的概率,进而在训练完成后,行为选择网络能够学会正确地输出游戏ai要执行的动作。因此,收益函数的设计可以决定训练出来的游戏ai的行为倾向。

至于对行为选择网络和价值评估网络的方法,本质上是逐步调整网络中各节点的权重,直至找到网络中各节点权重的最优解的过程。作为本申请一个实施例,训练价值评估网络或训练行为选择网络可以是:根据近处方略优化算法,确定价值评估网络或行为选择网络中各个节点参数的梯度下降步长,使每次训练时梯度下降朝最优方向下降正确步长。通过基近处方略优化算法训练价值评估网络或行为选择网络,能够选择梯度下降的正确的步长,不至于因为过大的步长导致直接跳过最优解,也不会因为过小的步长而导致训练速度过于缓慢而损失函数无法正常收敛,并且,基于近处方略优化算法训练得到的行为选择网络能够输出无限的动作空间。

作为本申请另一实施例,训练价值评估网络或训练行为选择网络还可以是:根据确定方略梯度算法训练价值评估网络或行为选择网络,当向价值评估网络提供相同的输入时,价值评估网络输出相同,当向行为选择网络提供相同的输入时,行为选择网络输出相同。作为随机策略算法的近处方略优化算法,即使向价值评估网络或行为选择网络提供相同的输入,这些网络的输出也不相同。因此,在基于随机策略算法来训练价值评估网络或行为选择网络时,不仅需要探索状态空间,还需要探索动作空间。与近处方略优化算法不同,在基于确定方略梯度算法来训练价值评估网络或行为选择网络时,若向价值评估网络或行为选择网络提供相同的输入,则该价值评估网络或行为选择网络的输出一定相同。也就是说,基于确定方略梯度算法来训练价值评估网络或行为选择网络时,不需要探索动作空间,而仅需要探索状态空间。因此,基于确定方略梯度算法执行的价值评估网络或行为选择网络训练的训练量将大幅降低。

如前所述,当游戏ai在执行某个动作即与其所处的训练环境做了一个交互后,若获取的收益(reward)是0,则该游戏ai在后续训练过程中就会处于“无所事事”或茫然不知所措的状态,这种状态是训练游戏ai过程中要极力避免的。因此,在本申请实施例中,上述本申请实施例提供的方法还包括:判断游戏ai在当前时刻的下一时刻所处训练环境的真实状态与预测状态之间的差异,若该差异大于预设差异阈值,则将游戏ai获取的收益增加与差异相应的附加量。上述方案是考虑到游戏ai越是对陌生的训练环境(游戏ai所处的训练环境的真实状态与预测状态差异越大,该训练环境对游戏ai而言越陌生),越不敢探索的事实,然而,这个客观事实又与训练游戏ai的初衷相违背。因此,当游戏ai在当前时刻的下一时刻所处训练环境的真实状态与预测状态之间的差异大于预设差异阈值时,将该游戏ai执行与其所处训练环境所获取的收益增加一个相应于该差异的附加量,使其尽可能避免为0,如此,可以鼓励游戏ai去探索未知的训练环境。

至于何时对神经网络停止训练,可以是预设条件满足后即停止,可以是损失函数收敛(损失函数为作为最优解的交互输出与实际的交互输出之间的差值,当该差值达到最小值时可以认为损失函数收敛),或者,训练停止条件也可以是游戏ai在游戏中的表现可接受,例如行为选择网络输出的动作总是能够获得最高的收益,价值评估网络的训练响应于行为选择网络的训练停止而停止,或者,对所有游戏ai训练的轮数或局数已经达到预设数字,等等。

上述本申请实施例提供的训练游戏ai的方法,一方面,本申请的技术方案是以运行在多台服务器上的主进程和从进程来实现,不仅免去了多线程的方法需要频繁线程同步的问题,而且服务器集群强大的计算能力为海量的训练提供了效率保障;另一方面,主进程主要负责神经网络的训练,从进程主要负责指令的转发和训练环境数据的反馈,主进程和从进程之间的耦合较弱,由此亦能提高训练游戏ai的效率。

为便于更好地实施本申请实施例的训练游戏ai的方法,本申请实施例还提供一种训练游戏ai的系统,如附图4所示,该系统包括主进程所在的服务器401、消息转发节点402、从进程所在的服务器403、404、…40n,即至少两个从进程所在的服务器,主进程所在的服务器401运行主进程,每一个从进程所在的服务器运行一个从进程。主进程所在的服务器401上的主进程实例化了一个称作gamecontroller的对象,每个从进程上实例化了至少三个对象即游戏ai对象(图中小椭圆框住的aihero)、训练环境对象(图中的battle,最大的椭圆所框住的部分)和游戏角色对象(图中小椭圆框住的hero)。每个对象皆有其对应的标识(id)和通信地址,每个对象在实例化后都向其他对象注册其id和通信地址等信息。

在众多的从进程上,其中一个从进程上实例化了一个较为特殊的对象即图中的battlemanager对象。battlemanager对象的特殊之处在于battlemanager对象负责管理训练环境,其可以与每个从进程上的对象进行通信,亦可以通过进程间通信,例如rpc方式与消息转发节点402进行通信,将来自于对象gamecontroller、通过消息转发节点402转发的动作指令发送至从进程上相应的对象,亦可以将对象游戏ai获取在执行了与其所处训练环境的交互后获取的收益以及该训练环境的状态等数据,通过消息转发节点402反馈至对象gamecontroller。battlemanager对象的另一特殊之处在于,其他对象所在的从进程均实时或者周期性地向其汇报该进程的负载。因此,battlemanager对象可以根据各个从进程的负载大小,总是选择负载最小的从进程作为训练环境(即battle对象)所在的进程或者在负载最小的从进程上创建训练环境即battle对象,从而实现了从服务器的负载均衡。battlemanager对象的第三个特殊之处在于,当对象gamecontroller获知训练某个游戏ai达到预设目标或者训练宣告失败后,对象gamecontroller向battlemanager对象发出销毁该游戏ai所处训练环境即battle对象的指令,battlemanager对象收到该指令后,销毁相应的battle对象,实现计算资源的回收。需要说明的是,battlemanager对象无论是创建一个训练环境(即battle对象)还是销毁一个训练环境,均不用频繁关闭该battle对象所在的从进程,从而能够高效、稳定地进行游侠ai的训练。

请参阅附图5,是本申请实施例提供的以dqn为例的强化学习算法训练游戏ai的流程图,说明如下:

步骤s501:启动主进程和从进程。

步骤s502:对象gamecontroller向对象battlemanager请求创建训练环境。

创建训练环境即创建battle对象,此处假设对象gamecontroller向对象battlemanager请求创建100个battle对象,则将有100个训练环境同时与对象gamecontroller通信并行训练。

步骤s503:通知训练环境创建完成。

当100个训练环境创建完成后,对象battlemanager向对象gamecontroller通知训练环境创建完成。

步骤s504:对象gamecontroller向游戏ai发出动作指令。

对象gamecontroller是在经步骤s507训练过的神经网络输出某个动作后,将该动作即游戏ai应该与其所在训练环境的交互对应的动作指令发送至消息转发节点,消息转发节点将该动作指令转发给对象battlemanager,对象battlemanager再根据动作指令携带的对象的id和ip等信息,发送至训练环境即对象battle,对象battle再将该动作指令发送给相应的游戏ai,或者,battlemanager直接将该动作指令发送给相应的游戏ai。

步骤s505:游戏ai执行动作指令。

游戏ai执行完动作指令后,其所处训练环境的状态将发生变化,同时,该游戏ai获取相应的收益,对象battle将该游戏ai与其所处训练环境的交互的标识、所处训练环境的状态以及该游戏ai获取的收益等数据,经对象battlemanager和消息转发节点后反馈至对象gamecontroller。

步骤s506:对象gamecontroller存储训练数据。

gamecontroller收到游戏ai与其所处训练环境的交互的标识、所处训练环境的状态以及该游戏ai获取的收益等数据后,将这些数据存储至记忆库,作为对神经网络进行训练的训练数据集。

步骤s507:对象gamecontroller对神经网络进行训练。

对象gamecontroller从记忆库中随机选出一批训练数据,更新神经网络,即对神经网络进行训练,具体训练方法可参阅前述实施例的相关说明,此处不再赘述。

步骤s508:对象gamecontroller判断对游戏ai的训练是否应该终止。

游戏ai的训练应该终止,条件时其智能程度已经达到预设要求,或者,对该游戏ai的训练宣告失败。若该游戏ai的训练的终止条件不满足,则转至步骤s504继续。

步骤s509:结束本局训练。

在某个游戏ai的训练终止后,记录其训练局数,对象gamecontroller向对象battlemanager请求销毁该游戏ai所处训练环境即对象battle。

步骤s510:对象battlemanager向对象gamecontroller通知训练环境已销毁。

当某个游戏ai所处训练环境销毁后,对象battlemanager向对象gamecontroller发出训练环境销毁的通知。对象gamecontroller判断所有游戏ai的训练局数或轮数是否达到预设数字,若达到,则停止训练,否则,流程转至步骤s502继续,即对象gamecontroller再次向对象battlemanager请求创建训练环境battle。

请参阅6,为本申请实施例提供的训练游戏ai的系统的结构示意图。该训练游戏ai的系统可以包括服务器集群,该服务器集群包括多台服务器,在多台服务器上运行着一个主进程和至少两个从进程,即主进程所在的服务器601和至少两个从进程所在的服务器602(图中仅示意出两个从服务器),主进程所在的服务器601运行主进程,每一个从进程所在的服务器602运行一个从进程,主进程所在的服务器601包括指令发送模块603和网络训练模块604,每一从进程所在的服务器602包括指令转发模块605和反馈模块606,其中:

指令发送模块603,用于基于每次训练后的神经网络,向至少两个从进程发送用于指示游戏ai-j与游戏ai-j所处训练环境进行交互的动作指令,其中,游戏ai-j为任意一个从进程对应训练环境中的一个游戏ai;

指令转发模块605,用于向游戏ai-j发送动作指令,以指示游戏ai-j执行与游戏ai-j所处训练环境的交互;

反馈模块606,用于向主进程反馈交互的结果数据,其中,交互的结果数据包括交互的标识、游戏ai-j执行交互后游戏ai-j获取的收益和游戏ai-j执行交互后游戏ai-j所处训练环境的状态;

网络训练模块604,用于根据存储的训练数据集,持续对神经网络进行训练,直至预设条件得到满足后停止对神经网络的训练,其中,训练数据集包括所有游戏ai与其所处训练环境交互的历史结果数据以及游戏ai-j与游戏ai-j所处训练环境交互的结果数据。

可选的,网络训练模块604可以包括第一求解单元、第二求解单元、修正单元和第一训练单元,其中:

第一求解单元,用于根据训练数据集,求解神经网络的状态变更函数和收益函数;

第二求解单元,用于根据神经网络的状态变更函数和收益函数,采用强化学习算法求解神经网络的最佳状态估计值函数;

修正单元,用于基于最佳状态估计值函数,修改训练数据集中游戏ai获取的收益;

第一训练单元,用于将修改后的训练数据集用于对神经网络进行训练。

可选的,修正单元包括计算单元和求和单元,其中:

计算单元,用于根据游戏ai所处训练环境为下一状态时神经网络的最佳状态估计值和游戏ai所处训练环境为当前状态时神经网络的最佳状态估计值,计算两个最佳状态估计值的偏差;

求和单元,用于将游戏ai获取的收益与偏差求和,得到训练数据集中修改后的游戏ai获取的收益。

可选的,上述神经网络包括行为选择网络和价值评估网络,网络训练模块604可以包括第二训练单元和第三训练单元,其中:

第二训练单元,用于从训练数据集中随机选择一批训练数据,训练价值评估网络,其中,训练数据包括游戏ai在即将执行行为选择网络输出的游戏ai与游戏ai所处训练环境的交互后获取的收益;

第三训练单元,用于基于价值评估网络输出的评价值,训练行为选择网络。

可选的,第二训练单元或第三训练单元包括第一确定单元,用于根据近处方略优化算法,确定价值评估网络或行为选择网络中各个节点参数的梯度下降步长,使每次训练时梯度下降朝最优方向下降正确步长。

可选的,第二训练单元或第三训练单元包括第二确定单元,用于根据确定方略梯度算法训练价值评估网络或行为选择网络,当向价值评估网络提供相同的输入时,价值评估网络输出相同,当向行为选择网络提供相同的输入时,行为选择网络输出相同。

请参阅7,为本申请实施例提供的训练游戏ai的系统的另一结构示意图。图7与图6在区别在于主进程所在的服务器601还可以包括判断模块701和收益修正模块702,其中:

判断模块701,用于判断游戏ai在当前时刻的下一时刻所处训练环境的真实状态与预测状态之间的差异;

收益修正模块702,用于若游戏ai在当前时刻的下一时刻所处训练环境的真实状态与预测状态之间的差异大于预设差异阈值,则将游戏ai获取的收益增加与该差异相应的附加。

上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。

本申请实施例提供的训练游戏ai的系统,一方面,本申请的技术方案是以运行在多台服务器上的主进程和从进程来实现,不仅免去了多线程的方法需要频繁线程同步的问题,而且服务器集群强大的计算能力为海量的训练提供了效率保障;另一方面,主进程主要负责神经网络的训练,从进程主要负责指令的转发和训练环境数据的反馈,主进程和从进程之间的耦合较弱,由此亦能提高训练游戏ai的效率。

相应的,本申请实施例还提供一种计算机设备,该计算机设备可以为服务器。如图8所示,图8为本申请实施例提供的计算机设备的结构示意图。该计算机设备800包括有一个或者一个以上处理核心的处理器801、有一个或一个以上计算机可读存储介质的存储器802及存储在存储器802上并可在处理器上运行的计算机程序。其中,处理器801与存储器802电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

处理器801是计算机设备800的控制中心,利用各种接口和线路连接整个计算机设备800的各个部分,通过运行或加载存储在存储器802内的软件程序和/或模块,以及调用存储在存储器802内的数据,执行计算机设备800的各种功能和处理数据,从而对计算机设备800进行整体监控。

在本申请实施例中,计算机设备800中的处理器801会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器802中,并由处理器801来运行存储在存储器802中的应用程序,从而实现各种功能:

主进程基于每次训练后的神经网络,向至少两个从进程发送用于指示游戏ai-j与游戏ai-j所处训练环境进行交互的动作指令,其中,游戏ai-j为任意一个从进程对应训练环境中的一个游戏ai;从进程向游戏ai-j发送动作指令,以指示游戏ai-j执行与游戏ai-j所处训练环境的交互;从进程向主进程反馈游戏ai-j执行与游戏ai-j所处训练环境的交互的结果数据,该交互的结果数据包括交互的标识、游戏ai-j执行交互后游戏ai-j获取的收益和游戏ai-j执行交互后游戏ai-j所处训练环境的状态;主进程根据存储的训练数据集,持续对神经网络进行训练,直至预设条件得到满足后停止对该神经网络的训练,其中,训练数据集包括所有游戏ai与其所处训练环境交互的历史结果数据以及游戏ai-j与游戏ai-j所处训练环境交互的结果数据。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

可选的,如图8所示,计算机设备800还包括:触控显示屏803、射频电路804、音频电路805、输入单元806以及电源807。其中,处理器801分别与触控显示屏803、射频电路804、音频电路805、输入单元806以及电源807电性连接。本领域技术人员可以理解,图8中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

触控显示屏803可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏803可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(lcd,liquidcrystaldisplay)、有机发光二极管(oled,organiclight-emittingdiode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器801,并能接收处理器801发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器801以确定触摸事件的类型,随后处理器801根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏803而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏803也可以作为输入单元806的一部分实现输入功能。

在本申请实施例中,通过处理器801执行游戏应用程序在触控显示屏803上生成图形用户界面,图形用户界面上的虚拟场景中包含至少一个技能控制区域,技能控制区域中包含至少一个技能控件。该触控显示屏803用于呈现图形用户界面以及接收用户作用于图形用户界面产生的操作指令。

射频电路804可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。

音频电路805可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路805可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路805接收后转换为音频数据,再将音频数据输出处理器801处理后,经射频电路804以发送给比如另一计算机设备,或者将音频数据输出至存储器802以便进一步处理。音频电路805还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。

输入单元806可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

电源807用于给计算机设备800的各个部件供电。可选的,电源807可以通过电源管理系统与处理器801逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源807还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

尽管图8中未示出,计算机设备800还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

由上可知,本实施例提供的计算机设备,一方面,本申请的技术方案是以运行在多台服务器上的主进程和从进程来实现,不仅免去了多线程的方法需要频繁线程同步的问题,而且服务器集群强大的计算能力为海量的训练提供了效率保障;另一方面,主进程主要负责神经网络的训练,从进程主要负责指令的转发和训练环境数据的反馈,主进程和从进程之间的耦合较弱,由此亦能提高训练游戏ai的效率。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种训练游戏ai的方法中的步骤。例如,该计算机程序可以执行如下步骤:

主进程基于每次训练后的神经网络,向至少两个从进程发送用于指示游戏ai-j与游戏ai-j所处训练环境进行交互的动作指令,其中,游戏ai-j为任意一个从进程对应训练环境中的一个游戏ai;从进程向游戏ai-j发送动作指令,以指示游戏ai-j执行与游戏ai-j所处训练环境的交互;从进程向主进程反馈游戏ai-j执行与游戏ai-j所处训练环境的交互的结果数据,该交互的结果数据包括交互的标识、游戏ai-j执行交互后游戏ai-j获取的收益和游戏ai-j执行交互后游戏ai-j所处训练环境的状态;主进程根据存储的训练数据集,持续对神经网络进行训练,直至预设条件得到满足后停止对该神经网络的训练,其中,训练数据集包括所有游戏ai与其所处训练环境交互的历史结果数据以及游戏ai-j与游戏ai-j所处训练环境交互的结果数据。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种训练游戏ai的方法中的步骤,因此,可以实现本申请实施例所提供的任一种训练游戏ai的方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种训练游戏ai的方法、系统、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。

此文章来源于网络,如有侵权,请联系删除

tips