机器学习实战——训练你的 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科技大本营的专栏

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

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

35414
来自专栏SAP最佳业务实践

从SAP最佳业务实践看企业管理(153)-仓储管理

储存保管的目标 (1) 空间的最大化使用。 (2) 劳力及设备的有效使用。 (3) 储存货品特性的全盘考量 即对储存货品的材积、重量、包装单位等品项规格及腐蚀性...

2536
来自专栏人工智能快报

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

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

1122
来自专栏量子位

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

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

34213
来自专栏腾讯位置服务

距离矩阵服务上线,实现最优派单及路径解决方案

继一对多的距离计算服务后,腾讯位置服务近日再次升级,推出更为强大的距离矩阵(多对多)距离服务。从计算性能上来看,多对多矩阵最高支持25×25矩阵(一次请求计算路...

1062
来自专栏JasonhavenDai

论文相关知识1.核心期刊2. A、B、C类3.相关概念4.阅读方法5.参考阅读

1.核心期刊 CCL,全国计算语言学学术会议 ACL,国际计算语言年会 NIPS,神经信息处理系统进展大会 SCI SCI即《科学引文索引》(Science ...

3265
来自专栏DT数据侠

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

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

820
来自专栏思影科技

AJP事件相关电位研究:精神分裂症患者听觉感觉处理缺陷的临床和认知意义

来自塞拉利昂精神疾病研究、教育和临床中心,旧金山VA医疗保健系统,加州大学旧金山分校精神病学系和加州大学洛杉矶分校的心理学系以及精神病学系、生物行为科学系的研究...

3426
来自专栏思影科技

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

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

2564
来自专栏机器人网

精彩机械动图:人类真是太聪明了

这一次酷炫动图将把目光转向人造机械的工作原理。 例行警告:图多杀猫,没有连上Wi-Fi的手机党请迅速关闭此页面! 伸出圆手 ? 原理:对于机器人而言,学会如何...

3967

扫码关注云+社区