说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

程序员游戏Style:亚特兰大极客使用机器学习玩转Flappy Bird

HTML文档下载 WORD文档下载 PDF文档下载
无限的重开始和撞柱子,这绝对不是程序员玩Flappy Bird该有的节奏。对于极客光环笼罩的人类,节奏绝对该是这样的:XX小时的重开始后,笨鸟完全停不下来了!

【编者按】Flappy Bird虽然下架了,但是相信仍有一大部分人还挣扎在它的阴影之下——游戏看似简单,但得分只在小两位数上徘徊,有时甚至是可怜的一位数。搜狗产品经理@光芊源更简单的分析了这个游戏会火的原因:用户往往抱着“可以拿高分”的心态,却总是因为“没注意”而失败。在回答中,网友@任杰还进行了适当的补充:1,Restart成本很低,秒秒钟的事情;2,平滑的难度曲线,再开始不会感到突兀。不管出于什么原因,Flappy Bird确实火了一把——不仅稳坐App Store和Google Play免费应用排行榜将近一个月,下载量高达5000万次,好评59万条,应用内平均每天广告收入更达5万美元。然而,这个火爆绝对是建立在无数玩家的“痛苦”之上,于是在几番高分无果的情况下,来自CAMPUS BUZZ的小伙SarvagyaVaish决定从自己的专业入手,使用机器学习玩转这头笨拙的小鸟。

以下为译文:

观看视频请访问原文

这是流行游戏Flappy Bird上的一次极客运动,尽管这个游戏已经在App Store和Google Play下架,但是网络上还流行着许多山寨应用,比如Flappy Bird Typing Tutor和Flappy Math Saga。在玩了几分钟这个游戏后,我看到了一个检验自己机器学习技巧的实践机会——让小鸟学会如何自己来玩游戏,而上面这个视频也证明了经过良好训练的Flappy Bird基本上已经可以完全躲避障碍。

机器学习过程

开始时我的选择是Android应用,计划使用Monekyrunner来获取画面和点击命令,然而Monekyrunner 1到2秒的画面捕捉时间完全满足不了我的最低需求。随后,我发现了@mrspeaker的游戏引擎、Omega500以及用于typing的Flappy Bird版本,这些都非常适合我们的用例,于是我就果断拆掉了它的typing组件并添加了一些Q Learning代码。

强化学习

这里有一些基本规则:智能体,也就是这里的Flappy Bird,在某个状态下总会执行一个特定的动作,而在状态发生改变后会得到相应的奖励。基于情况的不同,有许多不同的变体会被使用,比如:Policy Iteration、Value Iteration、Q Learning。

关于Q Learning的详细介绍可以点击这里,下面则是算法:


状态矢量空间

在这里一共设计了3个参数:1,小鸟与低管道的垂直距离;2,小鸟与下一个管道出口的水平距离;3,小鸟是否死亡。


行为

对每个状态,我设计了两个可能存在的行为:点击或者是什么都不做。

奖励

奖励完全依赖于“Life”参数,仍然存活则+1,失败则-1000。

学习循环

数组Q初始化为0,同时也总采取最佳操作,这些操作将最大化我的预期奖励。

第一步,观察Flappy Bird所处的状态,并执行可以最大化预期奖励的操作。让游戏引擎执行“tick”操作,随之Flappy Bird进入下一个状态s’。

第二步,观察s’及状态下的奖励,+1则表示小鸟还活着。

第三步,通过Q Learning规则来修改Q数组。Alpha的值被设置成0.7,因为我们需要一个确定的状态,也让学习的可能最大化;同时,Y和lambda都被设置成了1。

第四步,将当前状态设置为s’并重新开始。

结语

完整视频请访问原文

初步训练成功大约花了6-7个小时(得分150+),学习速度通过使用更多的例子来提升,最后将它们的经验贡献给同一个数组。另一个提升学习途径的方式是输入更好的学习数据。更多代码详情可见FlappyBirdRL GitHub页面。

原文链接: Flappy Bird hack using Reinforcement Learning(编译/仲浩 审校/毛梦琪)

Android中的正则表达式Regex使用 优化Dalvik虚拟机的堆内存分配 Android标题栏进度指示器使用方法 Thread和Looper以及Handler和Message详解 Android开发必读 layout资源包含,android开发必读 Android本地化开发技巧 Android开发网将推出每天一类专题 ExifInterface使用,Android 2.0新增类 GraphableButton类实现Android UI开发 Android控件开发之ToggleButton原理 Android标题栏TitleBar全攻略 AsyncTask实例代码演示Android异步任务 重绘TextView类演示Android的Handler Android的SoundPool类使用与利弊 AsyncTask解决Android UI堵塞问题 Android自定义View实例AnalogClock源码 Android UI开发专题(五) Bitmap和Canvas实例 Android UI开发专题(四) View自绘控件 Android UI开发专题(三) 各种Drawable 提高Android开发效率-Eclipse快捷键大全 Android UI开发专题(二) 之绘图基础 Android UI开发专题(一) 之界面设计 Only the original thread that created a view hierarchy can touch its views的相关 Android上的Back键事件捕获 Android蓝牙API之BluetoothSocket类(2) Android蓝牙API之BluetoothSocket类 Android蓝牙API之BluetoothAdapter类(1) Android蓝牙API之BluetoothAdapter类(2) AndroidManifest.xml文件剖析 (三) AndroidManifest.xml文件剖析 (二) AndroidManifest.xml文件剖析 (一) 如果win98中的pws中不包括mts,能正常工作吗 ? 为何在BCB中用TDBimage 存取Mysql数据库的图象时出错:invalid blob size ? 如何实现全自动拔号(无用户交互) 请看这个sql语句,怎么错了? 请问,如何设置 键盘开机呀? 关于光驱 如何获取delphi中dbgrid的单元格的内容 问题征解,关于一个智力题的程序解法。 sos!!求救!!!java运行时环境设置的初级问题!各位大侠帮忙了!!!! :-(( 關于delphi6的ActionMainMenuBar组件和ActionToolBar组件 的菜鳥級問題?? 李维的电子商务篇的第二章的例子没法运行,这是为何? 谁能告诉我学VC的步骤和教材啊,还会加分啊 如何将一个可以滚动的窗口的全部内容转换为BMP保存起来(如:IE)?(提供线索就有分)欢迎参与成果供享!!! 请教关于VsPrint Oracle8i Enterprise Manager Release 2.1 相当于ORACLE8.1.几啊? 使用ListView如何操作数据 ★★★简单问题送100分★★★:如何打印框架容器里的的全部内容,包括mschart图表,label,combox等? 我的DW里加入FLASH特效时为什么中文会变成乱码?我给分的............ 我感到天昏地暗、日月无光、前途渺茫、无心睡眠、精神恍惚、双目痴呆相恋8年准备结婚的女友突然和别人结婚了!我受不了了!我快疯了! 请教有关IE5带的ActiveX控件Dhtmled.ocx的98下安装问题 程序员与高级程序员到底那个好过 关于 delphi的一点东东 access一个日期时间字段是短格式的,用什么SQL语句改成长格式的? 怎样才能在主页中显示自己的qq是否在线?????? 有没有平面按钮控件 Interdev6.0 IDE 环境下无法使用MSDN access一个日期时间字段是短格式的,用什么SQL语句改成长格式的?? 大家来帮帮我想想?应该怎么样来删除呢!!!! 各位用VB.net的兄弟,请问你们使得是 Beta1 还是 Beta2 ? 迷周星弛的请来签名啊! 如何操纵RichTextEdit控件??? 我得到GIF图像的这一点的值,怎样得到它的正确的RGB值? 我想请问在CHTML(compact html)中如何对页面进行刷新。 各位老大,你们是如何找到工作的? 在VB.net中,如何实现VB6中的 set A=createobject("XXXX.XXXX") 诸位大虾救命,如何在EDIT控件中判断DBCS字符 !!求救!!对时!!! 在VC中使用Crystal report 8的问题 如何编写c程序自动对GIF图片设置大小 请教:鼠标在windows桌面上按键是否会引发某个事件? 查看DLL的输出函数 menu的问题 web的组件由什么来编写? 嵌入式数据窗口,怎样可以动态往里插数据窗口??? 在DELPHI中如何调用NETBIOS的API函数 AddNew 怎么用?- 怎么办那,啊? 问题标题前的绿色的对号是什么意思?是不是表示问题已经解决? 怎么学VC啊,菜鸟的菜菜的问题啊。 关于打印比较 提取汉字的拼音 已知多项式2x的五次方+(m+1)x的四次方+3x-(n-2)x的平方+3 ,不含x的,求2m+n的值 当x*二分之一=y*五分之二时;y=( ) 求函数f(x)=3x^2-5x+2.x属于[0,2]的值域? 在多项式x的三次方-x+4-2x的三次方-2+3x的二次方+2x在多项式中x的3次方-x+4-2x的3次方-2+3x的2次方+2的x次方,( )与( ( )与( ( )与( )是同类项,合并结果是( (-五分之二x的2次方)的2次方·5y的2次方-(-二分之一x的2次方y)的2次方 函数y=(x^2-4x-5)/(x^2-3x-4)的值域是?.. 2(3X的平方减2x加4)减3(2x的平方加3x减1) 化简, 二分之一X÷三分之二=五分之二求x是多少 +求函数y=(5x-1)/(4x+2)x属于【-3,-1】的值域. (2x-3)的平方-(3x-2)的平方=0 x除以十二分之五,等于五分之三,x等于多少 求函数y=(x^2-4x+5)/(x^2-3x-4)的值域 (3x-2)(2x+3)-(x-1)的平方 已知x/x²-3x+1=2求x²/x的4次方+x²+1的值 3x的平方减5x减2分之1减3的差加2x方的和 3x平方+2x-2=3 已知X²-3X+1=0,求X的四次方+X的-4次方得值,X≠0 求函数y=3x+1/x-2的值域 2X平方+6X-1=3 X平方+3X-2=? 若x²-3x+1=0,则x²/x四次方+x²+1的值为___ 求函数Y=3x/(3x+1)的值域. 一个整式A减去-3x+2,再加x的二次方-x-7后得5x的二次方-2x-5,求这个整式A x+x分之一=2 求分式x的4次方—x的2次方+1分之3x的2次方的值 1.求函数 y=(1/3)^(-x^2+5x)的值域 2.函数y=(2/5)^(根号下7-3x+21.求函数 y=(1/3)^(-x^2+5x)的值域2.函数y=(2/5)^(根号下7-3x+2x方) 一个整式A减去—3x 2,再加x的平方—X—7后得到5x的平方—2x—5,求这个整式A. 使分式3x+6/x平方-4的值为整数的整数x的值有几个? 求函数的值域y=3x+2/x-1 2x的平方+5x+2 2x的平方-5x-3 2x的平方-3x-20 2x的平方+5x-7 要使分式3x+4/x-1的值为整数的正整数x= 已知函数f(x)=lg(2+x)+lg(2-x) 1.函数g(x)=[10^f(x)]+3x,求函数g(x)的值域.2.若不等式f(x)>m有解.求实数m的取值范围 280÷4X=14解方程, x为整数,且分式3x-1/x+3的值也为整数,求满足要求的所有x的和 若x 15分之4x(2分之1加O.8除以7分之8)等于几 若x的平方+3x+1=0,试求分式x的平方+1/x的平方 函数f(x)=(3x-1)/(3x+1)的值域最说出怎么算的注:是3的x次方 f(x)=(3^x-1)/(3^x+1) 二楼的SNOWHORSE70121,u为什么不等于1? (3x-1)除以3=1-(4x-1)除以6 如果x为整数,且分式(x的平方-1)分之(2x+2)的值为正整数,那么x的值为 6X的平方减5X等于2,用工式方法解 1除以3x-6=3除以4x-8 已知X为整数,且分式2X+2X\X的平方-1的值 解方程3分之2X-4分之1X=8分之5 20(X+5)=200 5y+1/6=9y+1/8-1-y/3 使分式(x+1)的3次方分之2X的平方-4X+2的值为整数的X的整数值有哪些 解方程:【x-20-12】乘4分之1=【x+12】乘16分之3 解下列一元一次方程;(5y)/6=(9y+1)/8×24-(1-y)×24 当x不等于零时,函数 y=3x+1/2x 的值域是 A.[-√6,√6]B.(-∞,-√6]∪(√6,+∞)C.(-∞,-√6]∪[√6,+∞) 解方程12分之x-20分之2x-1=3分之x+4-1时方程两边都乘 如果x等于5y(x、y均不等于0)那么x和y成什么比例,x:y等于什么比什么 1)y=x^2+3x-4:x^2+x+2 (2)y=x^2-5x+4:x^2-2x-8,x大于等于2小于等于3.求值域, 解方程x^3-13x-12=0 9y等于5y+120这个方程是多少 y=-x+1/2x-3(-2 15(x-12)-13x=1020 (5Y+1)/6=(9Y+1)/8-(1-Y)/3 (1)y=x^2+3x-4:x^2+x+2 (2)y=x^2-5x+4:x^2-2x-8,x大于等于2小于等于3.求值域 解方程:x-16分之3x=27.2 {11x-9y=12,-4x+3y=-5y,解方程 函数f(x)=3x的平方-5x+2.x∈[0,2]的值域是可以不用配方法求吗 有别的方法求出来吗? 解方程:2分之1:3分之1=4分之1:x . 3:x=9:27 . 6:25分之9=5分之4:x .x:12=4.2:3.5.有4题,要过程.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn