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

相关文章

来自专栏BestSDK

如何用深度学习来识别恶意软件

这是一个悲伤的故事,你可能经历过。 你又热又渴,看到桌子上有一瓶看起来像水的东西,来不及思考,揭开瓶盖喝了一大口。哦!漏!是油! 时间回到10秒前,我们重来一次...

3309
来自专栏机器人网

详解:无人机中超声波原理

近年来,消费类无人机越来越受欢迎,多用于拍摄震撼的片段、运送救援物资,多数无人机使用各种传感技术实现自主导航、碰撞检测。而你又是否知道,超声波传感尤其有助于无人...

1082
来自专栏机器人网

机器人真空夹具改用人造肌肉?

据外媒报道,在工厂中使用的机器人通常配备真空夹具,用于夹住平面物体。通常,这些夹具由压缩空气提供动力,但这具有一些缺点。然而,现在科学家已经开发出一种使用人造肌...

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

AAAI 2018 杰出论文出炉,两位中国留学生共同获奖

编辑 | 周翔 作为人工智能的顶级会议,AAAI 2018 将于 2.2~2.7 在美国路易斯安那州的新奥尔良举行。然而,大会还没开始,获奖信息就已经在网上传播...

37214
来自专栏人工智能快报

诊断皮肤癌,人工智能比医生更出色

一项由多国科学家联合完成的研究表明,基于卷积神经网络的人工智能在诊断皮肤癌方面已达到比人类医生更出色的水准。

1272
来自专栏量子位

解密600年前的秘密,科学家利用AI成功破译“伏尼契手稿”第一句

唐旭 编译整理 量子位 出品 | 公众号 QbitAI 1912年,一份残余240页、从头至尾由未知文字与奇异插图写成的手稿在罗马附近的一所耶稣会大学图书馆中被...

36713
来自专栏专知

NIH发布包含10600张CT图像数据库 为AI算法测试铺路

美国国立卫生研究院(NIH)最近发布了一个庞大的胸部X光数据库,现已公开近10600张CT扫描图像,以支持医疗人工智能算法的开发和测试。这个大型成像数据库被称为...

1092
来自专栏DT数据侠

你早高峰挤地铁的“姿势”,都被客流大数据记下了

经常乘坐地铁的你,每刷一次交通卡,都会产生一条客流记录。而在北京上海这样的大城市,每天的地铁客流有千万左右。这些海量的客流数据该如何进行分析解读?客流数据的背后...

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

冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)

编辑 | Katerina Donna 润色 | 鸽子 11月6日,由京东金融与红杉资本联合主办的首届“JDD-2017京东金融全球数据探索者大会”在751大罐...

3969
来自专栏思影科技

脑电研究:睡眠中的婴儿大脑预测发育情况

传统观点认为九个月大之后的婴儿才能建立真正词汇的语义长程记忆,之前都处在呀呀学语的原词状态。来自德国柏林洪堡大学的学者Manuela Friedrich等人探索...

2714

扫码关注云+社区

领取腾讯云代金券