基于神经网络的坦克大战决策模式学习 – WNJXYKのBlog
WNJXYK
Thanks to the cruel world.
WNJXYKのBlog
基于神经网络的坦克大战决策模式学习
基于神经网络的坦克大战决策模式学习

提前申明,本文程序基于Unity3D平台,使用“Tanks! Tutorial”开源素材包,代码均使用C#编写

强化学习

强化学习由智能代理(Agent)环境(Environment)两部分组成。

强化学习的过程中,还有这些变量:
1. Policy :Agent在特定时间从状态(State)动作(Aciton)的一个映射
2. Reward :动作(Action)作用于Environment后,返还给Agent的奖励
3. Value Function :当前奖励与后续奖励的综合

在强化学习的过程中,经历如下的过程:
1. Agent接受来自Environment的一个状态S_t,然后产生一个动作A_t
2. Environment接受这个动作A_t,改变当前的状态并做出评价R_t

也就是如图所示的一个过程:

这是一个简单的马尔可夫模型,简单来说就是未来的状态只取决于当前的状态,与过去的状态无关。
我们的目的就是得到价值估计函数(Value Function)最大。

Q-Learning 就是根据值迭代的思路进行的,在这个算法中我们的Q值(也就是价值估计)的更新方法为:

Q(S_t, A_t) \leftarrow Q(S_t, A_T) + \alpha(R_{t+1}, \lambda \max_a Q(S_{t+1}, a)-Q(S_t, A_t))

经过降维和简化,我们可以将其简化为:

Q(s, a) = w_1 s + w_2 a + b

这一个表达式与神经网络的神经元函数一致

BPNetwork

为了偷懒,我就直接从我之前做的PPT中截图了。

https://blog.wnjxyk.cn/wp-content/uploads/2018/07/BPNetwork.png
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/netwrok.png
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/backpush.png

训练思路

我们手写两三种功能简单的AI坦克,也就是说他们具有一定的Policy,然后根据已经写好的AI坦克的EnvironmentAgent产生的S_t, A_t使用BP神经网络进行学习。

因为在设计游戏的时候,环境有所简化,所以环境中是不存在障碍物的。所以S_t中的内容可以抽象到非常简单:
– 射击方向到敌人的cos
– 敌人设计方向到自己的cos
– 敌人是否在射程内
– 敌人的距离
– 生命值
– 武器是否在冷却中

同时,Action也设计的非常简单:
– 转动方向
– 移动速度
– 是否射击

综合展示

https://blog.wnjxyk.cn/wp-content/uploads/2018/07/TankSet.png

事先写好了两种不同的坦克,分别只会瞄准射击(红色)与逃跑(黄色)
1. 红色坦克射击
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/RedTankAI.gif
2. 黄色坦克逃跑:
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/YellowTankAI.gif
接下来我们可以观察一下由这两种预设坦克训练得到的橙色坦克的表现(训练前、射击、逃跑):
1. 训练之前:
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/SillyOrange.gif
2. 橙色坦克学会射击:
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/ShootOrange.gif
3. 橙色坦克学会逃跑:
https://blog.wnjxyk.cn/wp-content/uploads/2018/07/EscapeOrange.gif

相关资源

你可以到Web版TankAI处体验整个决策学习的过程。

你也可以参考我完成这个课程设计答辩时候的PPT:答辩PPT

相关代码计划放出

赞赏
https://secure.gravatar.com/avatar/f83b57c055136369e9feba5d6671d6b5?s=256&r=g

WNJXYK

文章作者

一个蒟蒻

发表评论

textsms
account_circle
email

WNJXYKのBlog

基于神经网络的坦克大战决策模式学习
提前申明,本文程序基于Unity3D平台,使用“Tanks! Tutorial”开源素材包,代码均使用C#编写 强化学习 强化学习由智能代理(Agent)和环境(Environment)两部分组成。 强化学习的过程中,还…
扫描二维码继续阅读
2018-07-20
<--! http2https -->