前言
毁灭战士 (Doom) 是由 ID Software 开发的第一人称射击游戏, 是第一人称射击游戏的开拓者. ViZDoom 是基于 Doom 游戏的人工智能研究平台, 主要针对的是深度强化学习的研究. ViZDoom 平台允许人工智能 Bot 使用游戏图像信息进行对战, 与传统游戏内置 Bot 的区别在于, 传统游戏内置 Bot 对整个游戏的信息都是知道的. 而基于人工智能的 Agent 获得的游戏信息和人是相同的, 需要不断地探索地图及执行相应的行动.
本节主要介绍 ViZDoom 中的两个场景: 射击场景, 使用了 Deep Q-learning 算法; 收集医药箱场景, 使用了 Policy Gradients 算法. 两个场景如下图所示:
在射击场景中, 怪物随机地出现在界面的一端, 智能体有左, 右移动和射击三个动作, 怪物只要被击中一次, 就会被杀死. 当怪物被杀死或执行 100 次行动后怪物还没被杀死, 则游戏结束. 当怪物被杀死, 智能体得到 101 奖励分数; 当执行射击后, 怪物没有被击中, 智能体得到 -5 分的奖励; 当执行向左或向右行动后, 怪物还在存活, 智能体得到 -1 分的奖励.
在收集医药箱的场景中, 整个地图是矩形的, 地面上是酸性的腐蚀液体, 液体会周期性地腐蚀智能体的生命值. 地图上随机分布着一些医药箱, 并且会时不时地出现一些新的医药箱. 智能体为了在地图上生存下去, 需要捡起医疗包, 恢复生命值. 当智能体死亡或时间到了, 游戏结束. 智能体有三个行动, 向左, 向右及前进. 每个行动后, 如果智能体生存下来, 获得 1 奖励分数, 如果死亡获取 100 惩罚分数.
本文主要基于 ViZDoom 中的两个场景, 讲解强化学习的基本思想, Q-Learning 算法, Deep Q-Learning 算法如何应用于射击场景及 Policy Gradient 算法如何应用于收集医药箱场景.
- # Q is our predicted Q value.
- self.Q = tf.reduce_sum(tf.multiply(self.output, self.actions_), axis=1)
- # The loss is the difference between our predicted Q_values and the Q_target
- # Sum(Qtarget - Q)^2
- self.loss = tf.reduce_mean(tf.square(self.target_Q - self.Q))
- Policy Gradient
来源: https://juejin.im/post/5b23799ff265da597a60fa61