增强学习训练AI玩游戏
1.游戏简介
符号A为 AI Agent。
符号@为金币,AI Agent需要尽可能的接取。
符号* 为炸弹,AI Agent需要尽可能的躲避。
游戏下方一组数字含义如下:
Bomb hit: 代表目前AI Agent所接取的炸弹数。
Coin hit: 代表目前AI Agent所接取的金币数。
Iteration:代表游戏已经进行的帧数,案例正常游玩视频,250ms一帧。高速状态下帧频未知。
Game Play:每帧会随机产生一个炸弹和一个金币,或者只产生一个炸弹或金币。每帧AI agent可以行动一次, 以及所有的炸弹和金币下降一格。
当金币和炸弹到最后一格时会自动消失,此时不在参与AI Agent碰撞。
2.游戏展示
左为AI高速学习视频,右为AI正常游玩视频
3.实现原理
学习种类: 增强学习又称强化学习
学习细节:Q算法 + 值函数线性(参数)逼近,如果您还不知啥么是q算法,啥么是值函数,啥么又是线性参数逼近。那么我推荐您先看看一下资源。
A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
然后,我来给你讲讲什么是线性参数逼近。我们由浅入深,先探讨一下向量。在2维空间中,我们可以用两个正交的二维基向量i,j来任意二维向量v。写作v = x*i+y*j; 我们只需调整x,y,也就是调整基向量的权重参数,就可以表示不同的向量。同理,N维空间,我们也可以用N个正交的N维基向量表示任意N维向量。那么需要调整的权重也会相应的增加到N个。 回到函数的问题,我们是否可以用类似的方式,用N个基函数的和来表示一个复合函数,并且通过修改每个函数的权重参数来表示不同的复合函数。很明显,答案是可以的。 那么现在的问题是如何调整这些权重,使它表达的复合函数更接近我的目标函数?
进一步对于强化学习来说,我们不知道目标函数的具体样子。我们通过不断的实验得知函数的输入输出模式为 in:a0 out:b0; in:a1 out:b1.......
所以我们要建立一个函数f,使其的输入输出与我们的目标函数的输入输出匹配即可。完美的匹配所有输入输出怕是找不到,退而求其次,我们去寻找平均情况下最好的匹配,即允许构造函数f与目标函数t某些输入与输出存在差异,但总体上差距最小。在这里我们使用随机梯度下降。
Q(s, a) = φ(s, a)Tθ (θ是有多个权重构成的向量,我们要不断调整θ, φ(s, a)T则为基函数,返回值为向量 )
C = 1/2(Q+(s, a) - Q(s, a))2 =1/2 (Q+(s, a) - φ(s, a)Tθ)2
∂C/∂θ = -φ(s, a)(Q+(s, a) - φ(s, a)Tθ).
θ ← θ + β φ(s, a)(Q+(s, a) - Q(s, a)) β为调整步长。
4.游戏内状态编码
Game State:
本文 AI Agent 采取对其上方4*3区域进行二进制编码。0代表空位置,1代表空间被bomb或coin占据。那么4*3区域需要24bit的数据来表示coin 和 bomb,以本文为例,前12位代表bomb后12位代码coin。相同位置的bomb和coin可以同时为0,代表既没有bomb也么有coin,但不能同时为1,即二者不可重叠。
对其进行二进制编码的好处为可以把state抽象成为一个int数值,大大了减少了描述state所需的空间。当然监测区域越大状态空间就越大,那么Agent就越智能。
Game Action:
左移,右移,不动。
Feature base φ(s, a):
用于描述当前状态特征的基函数,在程序中它不返回一个12维向量,而是增加参数i,代表获取第几个特征,函数输入为状态s和指令a,特征函数φ(s, a,i)的返回值取值范围为 -1,0,1。
φ(s, a)的计算需要使用当前的状态s 和 当下要执行的action。
Feature base Weight θ :
θ也是12维向量,用以表示feature base中不同元素的权重。
Q value:
Q(s, a) = φ(s, a)Tθ, 这里是向量的点积,乘积的和。
5.具体实现方法
本游戏采用值函数线性参数化逼近,对动作状态值函数Q(s, a)进行线性参数话逼近。值函数近似多用于求解连续状态集或大规模状态集。因为state或action太多无法全部保存,所以需要抽象出一个函数,函数的参数为state和 action ,返回值为其分数。
最后我们的Q值函数可表示为:Q(s, a) = φ(s, a)Tθ,更新权重法则为:θ ← θ + β φ(s, a)(Q+(s, a) - Q(s, a)),
对于本文给出的小游戏,简单的使用随机梯度下降法可以对动作状态值函数进行线性近似。并可以取得较好的效果。
6.代码分享
相关代码,已上传
https://github.com/RonTang/QLearningForAiPlayGame/
需要的同学请自行获取。
7.未来展望&心语
研究机器学习只是笔者的业余爱好,故本文使用的最基本的强化学习算法,如有错误请耐心指正。如果读者想要进一步深入学习,不妨了解一下Google DeepMind的各种DQN,OpenAL刚刚出新的强化学习算法PPO。这些新的强化学习算法从效率和效果都有很大提高。当然,具体研究起来肯定是很复杂的,有兴趣的读者自己去研究吧。
作为一个游戏开发者,在适当的地方使用机器学习是很好的选择。谨记,我们做游戏是为了让玩家开心,不是为了让AI吊打玩家。至于人工智能学者总爱拿游戏做例子,一是为了方便向民间传播研究进度,刷存在感,拉投资。二是某些游戏的状态空间确实比较复杂。比如搞搞围棋,搞搞Dota2,搞搞星际2。
增强学习训练AI玩游戏的更多相关文章
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- 游戏AI玩伴,是“神队友”还是“猪队友”?
“一代英豪”暴雪迎来了自己的暴风雪. 2月13日,动视暴雪公布了2018年全年财报.财报显示,暴雪第四季度营业收入仅为28.4亿美元,低于华尔街分析师预期的30.4亿美元.在公布了财报业绩后,该公司又 ...
- Xdite:永葆热情的上瘾式学习法(套路王:每天总结自己,反省自己的作息规律,找到自己的幸运时间、幸运方法,倒霉时间、倒霉方法。幸运是与注意力挂钩的。重复才能让自己登峰造极,主动去掉运气部分来训练自己。游戏吸引自己的几个原因非常适合训练自己)good
版权声明 本文首发自微信公共帐号: 学习学习再学习(xiaolai-xuexi) 无需授权即可转载, 甚至无需保留以上版权声明: 转载时请务必注明作者. 以下是<共同成长社区>第 58 次 ...
- 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)
原文链接:http://blog.csdn.net/jinzhuojun/article/details/78508203 前段时间Nature上发表的升级版Alpha Go - AlphaGo Ze ...
- 增强学习 | AlphaGo背后的秘密
"敢于尝试,才有突破" 2017年5月27日,当今世界排名第一的中国棋手柯洁与AlphaGo 2.0的三局对战落败.该事件标志着最新的人工智能技术在围棋竞技领域超越了人类智能,借此 ...
- 【转载】 DeepMind用ReinforcementLearning玩游戏
原文地址: https://blog.csdn.net/wishchin/article/details/42425145 原文 : http://dataunion.org/?p=639 1.引言 ...
- DeepMind用ReinforcementLearning玩游戏
原文 : http://dataunion.org/?p=639 1.引言 说到机器学习最酷的分支,非Deep learning和Reinforcement learning莫属(以下分别简称DL和 ...
- AI:从游戏引擎--到AI
原文链接:http://blog.csdn.net/left_la/article/details/6358911#t9 这是我在Gameres上看到的一篇文章,文章很长,全文分为11个部分,看后感觉 ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
随机推荐
- swift的enum模式—对Alamofire入口的解析--数据结构与操作结合的模式
swift的枚举模式是数据结构与操作结合的模式 1.enum本质是一个类型,可以定义变量: 它定义的变量可以用到其它变量用的的任何地方:函数的输入.输出.成员变量.临时变量等: 这个变量还可以带有附加 ...
- Python自动化之跨域访问jsonp
这里提到了JSONP,那有人就问了,它同JSON有什么区别不同和区别呢,接下我们就来看看,百度百科有以下说明: ''' 1. JSON(JavaScript Object Notation) 是一种轻 ...
- [转]托管DirectX,从MDX到SlimDX的转换
开始迁移到托管DirectX SlimDX框架的,例如,MDX应用的帕特里克Murrisa地形的浏览器. 在托管DirectX代码所示,到新的代码,与SlimDX评论的形式. MDX迁移项目中Slim ...
- P1414 又是毕业季II
题目描述 彩排了一次,老师不太满意.当然啦,取每位同学的号数来找最大公约数显然不太合理.于是老师给每位同学评了一个能力值.于是现在问题变为,从n个学生中挑出k个人使得他们的默契程度(即能力值的最大公约 ...
- Manifest XML signature is not valid(安装ClickOnce签名未通过验证)
转载:http://stackoverflow.com/questions/12826798/manifest-xml-signature-is-not-valid 安装时,我的问题: PLATFO ...
- Missing artifact com.sun:tools:jar:1.5.0解决的方法
前一阵子下了最新的JavaEE版本号的eclipse,导入mavenproject之后,pom文件一直报Missing artifact com.sun:tools:jar:1.5.0.非常纳闷,to ...
- mysql where语句多条件查询是and和or联合使用bug
公司项目中有段功能是全局搜索框和下拉列表的联合查询,在联调开发中发现单独用下拉查询是正确的,单独用全局搜索框也是正确的,测试发现是sql语法有问题. 问题截图: 出现问题的核心还是在于搜索框是用于多个 ...
- vue中使用codemirror
https://blog.csdn.net/oumaharuki/article/details/79268498 别人的记载,写的很不错,还有下载的方法 以下是自己使用过的,做出来的例子: 做出来 ...
- 三星S5-PV210内存初始化
一.S5PV210时钟系统 时钟:一定频率的电信号. 时钟系统:基于CMOS工艺的高性能处理器时钟系统,集成PLL可以从内部触发,比从外部触发更快且更准确,能有效地避免一些与信号完整性相关的问题. ...
- SQL Server 2008 R2 Express Profiler
I successfully installed SQL Server Profiler 2008 R2 Profiler without uninstalling SQL 2008 R2 Expre ...