增强学习训练AI玩游戏

1.先睹为快

正常游玩视频

高速游玩视频

高速学习视频

2.游戏简介

符号A为 AI Agent。

符号@为金币,AI Agent需要尽可能的接取。

符号* 为炸弹,AI Agent需要尽可能的躲避。

游戏下方一组数字含义如下:

Bomb hit: 代表目前AI Agent所接取的炸弹数。

Coin hit:   代表目前AI Agent所接取的金币数。

Iteration:代表游戏已经进行的帧数,案例正常游玩视频,250ms一帧。高速状态下帧频未知。

Game Play:每帧会随机产生一个炸弹和一个金币,或者只产生一个炸弹或金币。每帧AI agent可以行动一次, 以及所有的炸弹和金币下降一格。

当金币和炸弹到最后一格时会自动消失,此时不在参与AI Agent碰撞。

Learning Way:增强学习(之前博文已有分享)

Algorithm:Q算法(之前博文已有分享)

Game State: 本文 AI Agent 采取对其上方4*3区域进行编码。0代表没有,1代表有。那么4*3区域需要24bit的数据来表示coin 和 bomb。

当然监测区域越大状态空间就越大,那么Agent就越智能。

Game Action:左移,右移,不动。

3.具体的实现方法

3.1用hash table

用state和action特征码组合为一个唯一key,用该key为索引存储其分值。通过学习不断扩充和修改table中的数据。一段时间后table数据趋于稳定。


3.2值函数的近似

可以使用另一种方法,动作状态值函数的近似。值函数近似多用于求解连续状态集或大规模状态集。因为状态或action太多无法全部保存,所以需要抽象出一个函数,函数的参数为state和 action ,返回值为其分数。对于本文给出的小游戏,简单的使用随机梯度下降法可以对动作状态值函数进行线性近似。并可以取得较好的效果。


4.深度强化学习

这个可能是未来的方向吧。 比如DeepMind的DQN。神经网络可以逼近任意复杂的值函数。这样强化学习可以学的任意复杂的规律。当然,具体研究起来肯定是很复杂的。有兴趣的读者自己去研究吧。


相关代码,已上传

https://github.com/RonTang/QLearningForAiPlayGame/

需要的同学请自行获取。


猜你喜欢

转载自blog.csdn.net/zjq2008wd/article/details/53045855