Week 2 让chrome dinosaur小游戏自动玩出高分的自动学习系统-IAMDinosaur(上)

想刷一个小游戏的高分,但是手动刷未免太单调,如何让电脑帮你完成这一切呢?

自动!374分!酷不酷炫!想不想学!

这一周要用的的开源项目是IAMDinosaur,地址是https://github.com/ivanseidel/IAMDinosaur

我们这周的任务不是深入了解原理,而是先用起来,要是用的好再想办法调参,达到我们的目的~~

1. 程序原理简介

程序采用遗传算法来逐步优化小恐龙的行为,跳过尽可能多的仙人掌,获得更高的分数。

程序的输入如下:

1)恐龙与下一个仙人掌的距离

2)下一个仙人掌的长度(仙人掌分大小的)

3)仙人掌的速度(其实是恐龙的速度)

程序的输出是一个0-1的数值:

1)<0.45:按“下”键。恐龙蹲下,然而只能卖萌 - -#

2)>0.55:按“上”键。恐龙跳起,可以躲避仙人掌

3)0.45~0.55:不动

程序采用神经网络,将实时输入的三个数值合成为一个0-1之间的输出,并根据输出的数值大小操作恐龙。游戏每一轮都训练12个神经网络,将恐龙最后跳过的仙人掌数目作为适应度函数,以此来调整每个神经网络,以期达到更高的分数。最初的神经网络具有末尾淘汰机制(加快初始训练速度),之后具有将神经网络crossover的机制,可以模拟杂交过程提高个体变异程度,防止个体陷入局部最优。

2. 安装

建议在linux下安装,win7的安装艰难且存在延迟过高的问题(见项目issue)。

我用的是ubuntu 14.04 LTS,安装贼容易:

1)sudo apt-get install nodejs nodejs-legacy npm

2) 将IAMDinosaur git clone下来

3) 在IAMDinosaur目录内 npm install

4) node index

5) 在chrome上开启chrome dinosaur game, 个人推荐这个离线版 http://www.trex-game.skipser.com/

5.5) chrome dinosaur game里有个bug:随着游戏多次进行,恐龙会逐渐向右漂移。

解决方法:在F12开发者视图中的Console内输入:

setInterval(function (){Runner.instance_.tRex.xPos = 21}, 2000)

6)激活终端页面,在屏幕上同时显示终端和chrome页面,按s开始训练

据说有些安装失败的原因是C++编译问题,请务必安装gcc/g++和sudo apt-get install build-essentials

3. 加速

当你发现,为什么自己的恐龙就只会傻傻的蹲下或者瞎跳呢?这和每个个体的初始化情况相关,一开始就有一个能跳过仙人掌的个体实在是运气爆棚。。

那么,为了节省时间,在按s开始训练前,可以按下选择要加载的个体(json文件形式),里面有一个ninja.json的文件,按回车选择后按s开始。

谁说我家的恐龙不会轻功来着~

当然,熟悉遗传算法的童鞋知道,可以通过调整参数的方式加速学习过程,下周就朝着这个方向努力吧!

原文地址:https://www.cnblogs.com/codingpenguin/p/6942336.html