机器学习实战——训练你的 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 条评论
登录 后参与评论

相关文章

来自专栏专知

【下载】NLP绝佳入门经典图书《NLTK-Python自然语言处理》中英文版, 教程+代码手把手带你实践NLP算法

【导读】作为自然语言处理的经典图书教程,从输入法联想提示(predictive text)、email 过滤到自动文本摘要、机器翻译,大量的语言相关的技术都离不...

3405
来自专栏大数据文摘

视频更新|斯坦福CS231n深度学习与计算机视觉课时19-卷积神经网络的可视化与进一步理解(下)

1292
来自专栏磐创AI技术团队的专栏

关于TensorFlow九件你非知不可的事

【磐创AI导读】:本文内容是关于谷歌刚刚举行的Google Cloud Next 2018 大会中对TensorFlow方面新增功能和改动的几点总结。想要学习更...

451
来自专栏人工智能头条

谷歌邮件智能回复系统:基于RNN/LSTM构建

1564
来自专栏CreateAMind

重磅!强化学习进阶,前沿算法及应用梳理一览、有视频

923
来自专栏ATYUN订阅号

成为Beatbox大佬:AI助力将声音转化为节奏

为了帮助崭露头角的音乐家为他们的歌曲创造最佳节奏,来自日本AI创业公司的开发人员开发了一种名为Neural Beatboxer的深度学习系统,可将日常的声音转换...

923
来自专栏量子位

DeepMind推出更难的机器阅读理解数据集,要让AI读懂整本书

夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI 在机器阅读理解界的ImageNet——SQuAD挑战赛中,排在前几名的算法,都能拿到八十多分的成绩。...

3254
来自专栏量子位

摄像头训练的吃豆人,我还是没活几集 | TensorFlow.js

上个周末,面向JavaScript开发者的TensorFlow.js在TF开发者峰会上发布。

612
来自专栏书山有路勤为径

深度学习基石纳米学位

经历了4个半月,终于完成了Udacity的深度学习纳米学位,因为期间也在同时开展吴恩达的DeepLearning.ai,所以到后面进展慢了很多

762
来自专栏CSDN技术头条

谷歌邮件智能回复系统:基于循环神经网络构建

【编者按】Google将为其Gmail应用推出一项称为智能回复(Smart Reply)的新功能,这篇博文解析了Smart Reply的技术原理:建立在一对循环...

1885

扫码关注云+社区