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/
需要的同学请自行获取。