机器学习实战——训练你的 Flappy Pikachu

前言

皮卡丘又回来啦,由于上一周有些事情要处理,就没有写文章,真的很对不起大家。:(

不过这次笔者给大家带来了一个非常好玩的东西

看标题——机器学习实战——训练你的FlappyPikachu(皮卡丘)

那现在我们就开始让我们的皮卡丘变得越来越聪明吧!

##所有密码均为:yjoy

正文

在这里我们运用到的是一个名为神经演化(Neuroevolution)的算法。该算法的原理简单说就是通过不断地学习迭代,总结失败和成功,最终使机器变得越来越聪明。

这里是它相关的介绍

首先,我们先写一个FlappyPikachu的小游戏(代码网上一大堆)

这是笔者的游戏代码

开始学习

首先设置一些参数

        network:[1, [1], 1],    //神经网络的结构
        population:50,          //第一代数量
        elitism:0.2,            //后代的优秀率
        randomBehaviour:0.2,    //下一代的随机行为率
        mutationRate:0.1,       //突变率
        mutationRange:0.5,      //突变范围
        historic:0,             //最后一代
        lowHistoric:false,      //历史最低?
        scoreSort:-1,           //如何排序
        nbChild:1               //育种数

创建各种对象 神经元、神经网络层、神经网络等等 然后输入第一代,通过训练得到下一代

//创建第一代
    Generations.prototype.firstGeneration = function(input, hiddens, output){
        var out = [];
        for(var i = 0; i < self.options.population; i++){
            var nn = new Network();
            nn.perceptronGeneration(self.options.network[0],
                        self.options.network[1],
                                          self.options.network[2]);
            out.push(nn.getSave());
        }

        this.generations.push(new Generation());
        return out;
    }
    //YingJoy
//创建下一代
    Generations.prototype.nextGeneration = function(){
        if(this.generations.length == 0){
            return false;
        }

        var gen = this.generations[this.generations.length - 1]
                .generateNextGeneration();
        this.generations.push(new Generation());
        return gen;
    }
    //YingJoy
//添加基因信息到代中
    Generation.prototype.addGenome = function(genome){
        for(var i = 0; i < this.genomes.length; i++){
            if(self.options.scoreSort < 0){
                if(genome.score > this.genomes[i].score){
                    break;
                }
            }else{
                if(genome.score < this.genomes[i].score){
                    break;
                }
            }

        }
        this.genomes.splice(i, 0, genome);
    }
    //YingJoy

这是第一代皮卡丘,还没出门就撞水管了

然后通过一代又一代的迭代,我们得到的皮卡丘越来越聪明

开始训练时有许多皮卡丘,最后有1只最聪明的,下面是训练了28代得到的皮卡丘,基本保持不死了

这是一个示例,读者可以来体验一下,下面的按钮是改变运行速度

这是上面示例的代码(JS)

好了,到这里我们就得到了一只越来越聪明的皮卡丘啦。:)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

TensorFlow 1.0 正式发布

在刚刚过去的一年里,从语言翻译到对皮肤癌的早期检测和对糖尿病患者失明的防护,TensorFlow 对研究人员,工程师,艺术家,学生和其他各界人士在各领域的进步都...

34513
来自专栏人人都是极客

如何利用树莓派打造一款机器人

作者/刘端阳,清华大学aminer.org研究者社交网络系统的R&D,参与过智谷睿拓公司(已经被小米收购)的专利挖掘,在大数据征信领域创业过,出过一本叫做《树莓...

4337
来自专栏生信宝典

国外生信教程免费领 | 加拿大生信开源学习资源Bioinformatics.ca

之前给大家推荐过教育部首批490门“国家精品在线开放课程”,里面很多跟生物或编程相关的免费经典课程。除了国内这些开放的学习资源外,还有许多国外的免费资源,比如英...

1355
来自专栏量子位

这个深度学习Model Zoo,真的有点像动物园? | 来自一只新加坡蓝精灵

所以,他想给这些散落各地的模型,造一个整齐的家,人类就更容易找到自己心里的那个模型。

1241
来自专栏人工智能头条

资源 | 5月Python好文TOP 10新鲜出炉,精选自1000篇文章,你都看了吗?

1563
来自专栏悦思悦读

数据挖掘R_Python_ML(3): 用R实现一个简易推荐系统

推荐系统在现实生活中应用甚广,电商、社区、社交平台,无不充斥这各种各样的推荐。其实,推荐的原理很简单,无论是给人推荐物,还是给人推荐人,都是无外乎找到和被推荐者...

2756
来自专栏州的先生

从数据爬取到机器学习—标题党,你的标题值几何

1522
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/6/3

1. Judea Pearl上次在NIPS有一张令人唏嘘的照片,不过现在他又回来了,发了新书也给了一个访谈,说深度学习就像是curve fitting(我觉得没...

824
来自专栏人人都是极客

基于树莓派和Tensowflow的物体识别-brain

近来这篇文章很火:How to build a robot that “sees” with $100 and TensorFlow (作者是Lukas,Cro...

39610
来自专栏知晓程序

他构想了一个族谱小程序,就等程序员来实现了!

本文讲述的是一款解决人们想熟悉亲戚及亲戚之间关系需求的小程序,其主要的使用场景会围绕着微信的亲戚家族群组。

672

扫码关注云+社区