基于双深度Q网络的智能决策系统研究
2022-03-16况立群贾炅昊郭广行
况立群,冯 利,韩 燮,贾炅昊,郭广行
(1.中北大学 大数据学院,山西 太原 030051;2.北方自动控制技术研究所,山西 太原 030006;3.太原师范学院 地理科学学院,山西 太原 030006)
0 引 言
决策的主要任务是对诸多影响因素进行综合分析,进而产生效益最好且所需付代价最小的可行方案。通常需要从多个角度来综合考量,仅仅依靠人力决策将面临着数据集庞大、模型设计复杂、预测准确性差、受人为因素影响大等问题。智能决策算法可有效解决上述问题,其可靠性高,受个人经验和思维能力等主观影响较小,面对庞大的数据计算问题通过计算机辅助决策也可迎刃而解。随着计算机技术的发展和决策算法的逐渐成熟,智能决策算法被广泛应用于医疗、教育、交通以及军事等各个领域,智能决策系统在诸多领域中发挥着越来越重要的作用。
传统的智能决策算法一般采用动态规划、决策树、遗传算法等理论方法,陈建凯提出了区间值属性的单调决策树算法,有效提高了单调分类问题的计算效率。王辉等人提出了一种基于动态规划的改进算法,提高了算法收敛速度和寻优能力。但在智能决策领域这些借助人工经验的经典算法智能化程度通常较低,而且遗传算法对新空间的探索能力有限,容易出现“早熟”问题;动态规划占据过多的空间,对计算机资源造成浪费;决策树受主观性影响较大,可能导致决策失误。
目前智能决策领域更多采用强化学习来驱动智能体决策行为,可有效弥补传统决策算法所面临的不足。雷莹等人开发出一种合作Markov决策系统,提出了一种寻找最优策略对的学习算法,智能体可交替执行行为,实现多智能体之间任务协同的决策演练。强化学习中的经典算法Q-learning是一种离线策略的学习算法,根据策略所选取的动作与当前环境相互交互,产生相应的奖励值以及下一步的状态来不断地更新Q表,得到更优的Q函数,从而探索出更优的应对环境新态势的决策方案。然而,在空间和时间多样化、复杂化的决策任务中,任务状态已经庞大到无法通过Q表进行存储,导致维度灾难问题。
阿尔法围棋是近几年由Google DeepMind开发的基于深度强化学习的人工智能围棋软件,其通过与自身进行上千万次的博弈来提升棋艺,击败了人类顶级围棋棋手,而且在对弈的过程中竟运用了许多创新招式。这为该文研究智能决策算法提供了新的思路,即研究基于深度强化学习算法的深度神经网络来解决维度灾难问题。该文通过虚拟的对抗演练系统对智能决策算法进行验证,智能体根据地图数据、环境数据以及敌方的兵力布置等信息,利用双深度Q网络的深度强化学习算法与环境相互交互,不断地试错学习,在尽量躲避敌方火力覆盖范围的情况下,短时间确定敌军目标,并以最优的策略压制、歼灭敌军,击毁敌军基地。该文应用于智能决策算法领域,为实施智能决策系统提供典型案例。
1 双深度Q网络算法
1.1 深度Q网络算法
强化学习中的经典算法Q-Learning虽然可以求出最优策略,但是无法解决维度灾难问题。该算法为了实现状态动作函数的不断迭代,将状态动作函数的值储存于内存中,但是计算机的内存空间又极其有限。假如在一个大小为50*50的地理场景中添加10个智能体,那么仅仅是智能体的位置就有约10种不同的情况,显然大多数计算机都无法存储如此巨大的状态表。
深度Q网络算法(deep Q network,DQN)是由Mnih等人将卷积神经网络与传统的强化学习中的Q学习算法相结合所提出的,使用神经网络来表示价值近似函数,将深度学习的概念融入强化学习中,采用价值近似函数去对状态价值函数Q进行近似估计,故而解决了Q-Learning算法的维度灾难问题。
1.1.1 DQN模型结构
DQN的模型结构如图1所示。
图1 DQN模型结构
该模型运用的是Q-Learning的一种变种训练深度卷积神经(CNN),算法模型的输入是初始状态信息,将该输入信息离散化后经过CNN的非线性变换,最终在输出层产生每个动作相应的Q值。
1.1.2 目标网络
DQN采用近似表示值函数的优化目标,将值函数参数化表示为Q
(φ
(S
),A
,ω
),每次迭代的优化目标Q值为:(1)
(2)
对式3中的参数ω
求偏导,得到的损失函数梯度为:(3)
DQN采用增加目标网络的方式降低了当前Q值和目标Q值的相关性,从而提高了算法稳定性。DQN训练流程如图2所示。
图2 DQN训练流程
1.1.3 记忆回放机制
与Q-Learning算法相比较,DQN还具备一个较大的优势,DQN采用记忆回放机制训练状态价值网络,因为状态之间的关联性较大,经验回放可以打破样本间彼此的关联性,所以可以使神经网络的训练更加收敛和稳定,可有效地提高学习效率。
1.2 双深度Q网络算法
由于DQN在进行值函数优化目标时,动作选择和策略评估都是基于目标值网络的参数,因此DQN算法在学习过程中常常会出现过高估计Q值的问题,即每次迭代选取的都是下一个状态中最大Q值所对应的动作。为了解决DQN算法在学习中估计值过高的问题,该文在DQN和双Q-learning算法的基础上提出一种双深度Q网络(double DQN,DDQN)算法,将动作选择和策略评估分开进行,使用当前值网络的参数来选择最优动作,使用目标值网络的参数来评估该最优动作,以便估计出更加准确的Q值,获得更稳定有效的策略。DDQN的优化目标Q值为:
(4)
该文设计的DDQN算法详细描述如下:
(1)初始化Q网络参数ω
及目标Q网络Q的参数ω
=ω
,并初始化所有状态和动作所对应的价值Q。初始化经验回放单元D。(2)fori
toT
,进行迭代。①初始化状态序列中第一个状态S,其特征向量为φ
(S
)。②将φ
(S
)作为Q网络中的输入,得到所有动作所对应输出的Q值,再通过∈-贪婪法选择对应的动作A。③在状态S下选择并执行当前动作A,得到下一个状态的特征向量φ
(S
)以及奖励R,判断是否为终止状态is_end。④将五元组{φ
(S
),A,R,φ
(S
),is_end}存入经验回放单元D中。⑤令S
=S
。⑥从经验回放单元D中采集m
个样本,计算当前目标Q值y
,其中j
=1,2,…,m
,则:⑧当i
%P
=1,则更新目标Q网络参数ω
=ω
。⑨判断S
是否为终止状态,若是终止状态则结束当前轮迭代,否则转到步骤②。1.3 算法参数设置
1.3.1 记忆回放单元的相关参数设置
该研究着眼于任务的复杂度,将记忆回放单元的大小设置为1 000,每次训练神经网络所用到的回放记忆单元的状态个数为50个。在每次获取到动作所对应的激励值后,系统将执行动作前的智能体状态、执行动作后的智能体状态、动作和奖励值插入记忆回放单元。若记忆回放单元已满,则弹出当前存储的最早的状态。每次训练神经网络时将随机在记忆回放单元中抽取50条记录以完成对神经网络的训练。
1.3.2 神经网络的初始化及更新
设隐藏层每层偏置b
的值为0.01,连接每层网络的矩阵为,该研究使用正态分布初始化神经网络的参数。隐藏层神经网络的深度和广度过大或者过小会使拟合的效果饱和或负增长,该研究根据当前任务的复杂度设置较为适中的神经网络大小,以便该神经网络在各种情况下都适用。后续实验中由于大多数任务所经历的状态数集中在10 000以内,故将隐藏层的第一层广度设置为2 500,之后每一层的广度依次递减,可有效节省计算时间和空间。2 虚拟智能对抗演练系统
为了验证双深度Q网络算法的有效性,设计了一套虚拟的智能对抗演练系统,己方作战单位智能体根据地图数据、环境数据以及兵力部署等信息,利用DDQN算法在作战环境交互试错中不断训练学习,在尽量躲避敌方火力覆盖范围的情况下,短时间确定敌军目标,并以最优的策略压制、歼灭敌军,击毁敌军基地。
2.1 系统总体架构
由于执行算法程序比较耗费计算机资源,采用客户/服务器模式可有效节省硬件开销,提高数据处理能力与算法执行效率,系统总体架构如图3所示。
图3 系统总体架构
客户端实现任务控制及决策推演结果折线图的显示。客户端编辑任务指令,提交任务后系统会将任务表单信息序列化,使用HTTP协议发送给服务端。服务端则进行数据反序列化,建立任务工作目录,并新建一个进程执行算法程序。算法决策过程同步更新到任务的工作目录下。客户端每隔3秒从服务器获取算法决策结果,以更新算法推演折线图。算法决策结束后,Unity3D程序根据客户端的态势信息以及服务端任务工作目录的决策数据对智能体训练结果进行可视化。
客户端任务录入采用数据绑定的方式,将View层和Model层的数据相互绑定,Model层的数据随着用户的键入而改变,同时重载JavaFx框架下的UnaryOperator类以实现对用户输入内容的限定,保证了系统的易用性与安全性。与此同时,系统采用动态创建控件的方式,以实现用户可以根据需要动态地添加多个任务对象的信息。服务端在接收到客户端传来的反序列化后的任务数据后,会更新任务记录表并创建以对应ID命名的文件夹,并持久化存储相关任务数据信息。
2.2 系统功能模块
智能决策系统包括任务管理模块、算法决策模块和可视化演示模块。任务管理模块实现客户端任务控制等功能;算法决策模块实现服务端创建工作目录、算法推演等功能,对输入的任务环境信息进行计算分析,最终训练得到一个具备高智能行为的智能体模型,并输出当前最优决策序列;可视化演示模块根据环境态势信息数据以及当前最优决策序列实现对算法推演结果进行可视化演示功能。系统功能模块如图4所示。
图4 系统功能模块
2.3 算法决策设计
采用DDQN算法对输入的数据进行处理后输出决策数据,在算法完成一次迭代后,程序会更新迭代次数文件以支持客户端显示当前迭代进度,若当前迭代结果为最优解,则更新存储算法推演结果的文件。系统决策训练的总体控制流程如图5所示。
图5 算法决策总控流程
其中单个智能体特训目的是在多智能体任务协同模型中,很难确保每个智能体均获取到正向奖励值的训练问题。系统每隔一定轮数便驱使单个智能体独立完成攻击任务,这样便尽可能地使每一个智能体都可以获得正向的激励。
与此同时,智能体探索特训是指系统每隔一定轮数会以较高的随机值训练智能体,以此使智能体探索更多未知的情况,从而迭代出更优的解法。
2.4 奖励函数设计
奖励函数的设计将直接影响智能体训练的优劣程度,设置合理的奖励参数对于智能决策系统尤为重要。
在本系统的决策任务中,当智能体对敌方基地实施攻击并成功时,奖励值为40 000,攻击失败奖励值为-1 000;当智能体对敌方作战单位实施攻击并攻击成功时,奖励值为500,攻击失败奖励值为-100;智能体机动过程中,若发生碰撞奖励值为-1 000;若所处位置为敌方作战单位可攻击范围内,奖励值为-1 000;智能体更靠近敌方基地,奖励值为100,否则奖励值为0。
2.5 对抗逻辑设计
系统将每个智能体定义为一个独立的训练对象,每个智能体具备单独的神经网络,不同的智能体共用同一套环境以确保可以协同作战。而敌方作战单位则采用固定脚本方式来控制其行为,通过调整敌方作战单位火力密度、抗毁伤能力、攻击范围以及地图数据等方法改变战场态势,达到智能体在不同的任务态势下进行训练的目的。
2.6 输入输出设计
该系统输入为地图、智能体、敌方作战单位等元素的初始状态数据,每个智能体的状态定义如表1所示。
表1 智能体状态数组定义
输出包括智能体动作数据文件及算法迭代结果文件。该系统中的动作分为智能体的移动和攻击动作。移动包括上、下、左、右、左上、右上、左下、右下八个动作,由编号0-7表示。攻击动作又分为两种,其一是对基地的攻击动作,其编号为8,其二是对敌方作战单位的攻击动作,编号从9开始,总个数为敌方作战单位的数量,分别对应智能体攻击敌方各个作战单位的动作。
算法完成一次迭代后会更新迭代次数文件以支持客户端显示当前迭代进度,若当前迭代结果是最优解,则更新当前最优步数的结果文件。
2.7 可视化演示设计
可视化演示程序根据任务管理客户端传来的数据对各个对象的属性进行初始化。若存在多个种类相同的对象,则调用Unity的Instantiate方法完成对象的复制与实例化。
智能体的移动采用Unity的Navigation寻路功能实现。Navigation寻路功能可以控制移动对象的转向、移动速度等,将小尺度的移动细节利用Navigation处理可以降低代码的复杂度,同时也会使演示动画更加流畅自然。
3 实验仿真结果
(1)任务信息。
通过客户端界面新建任务,可编辑地图初始信息。任务创建后点击单个任务,客户端会再次请求服务器,获取该任务详细信息,如图6所示。
图6 任务详细信息界面
(2)算法推演结果。
客户端每隔三秒会向服务器发送请求获取对应任务的演算情况,以刷新算法演算过程的迭代折线图。DQN算法训练折线图如图7(a)所示。
图7 DQN和DDQN算法训练折线图
相同的环境态势,更换DDQN算法重新对神经网络进行训练,DDQN算法训练折线图如图7(b)所示。
在初始态势相同的情况下,分别使用DQN算法和DDQN算法对神经网络依次进行训练,训练结束后,通过对两个算法的训练折线图进行比较,可以观察到DDQN算法训练迭代到200余次,步数稳定在40步左右,相反,DQN算法训练结果步数上下浮动较大,训练结果不能够有效收敛。实验结果显示,DDQN算法较DQN算法更稳定有效,更适用于该研究。
(3)可视化演示。
算法演算结束后,执行Unity程序对演算结果进行可视化,演示中第一人视角如图8所示。
图8 第一人称视角
4 结束语
该文研究了基于强化学习的智能决策算法,并在虚拟智能对抗演练系统中进行了验证。验证系统集成了客户/服务端、可视化演示和深度强化学习算法,智能体通过训练学习能够在短时间内确定目标,并以较快的时间压制、歼灭目标,同时避免在敌方火力覆盖范围内行动,有效降低了智能体的毁伤程度。该文设计的DDQN决策算法有望在策略游戏、对抗演练、任务方案评估等领域发挥作用。
同时,该算法还有进一步的完善空间,在多智能体任务协同中没有将整个训练环境视为一个训练对象,而是将每个智能体定义为一个独立的训练对象,使各个智能体共用同一个训练环境来达到任务协同的目的。这种方法虽然大幅提高了计算速度,但是会导致某些智能体训练不充分而使决策结果接近最优值却无法达到最优值。此外,对于复杂的任务环境,需要考虑针对于不同决策目标的诸多因素。