热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爷青回!GAN生成的超级马里奥关卡,可以永不通关的那种!

点击上方“视学算法”,选择加星标或“置顶”重磅干货,第一时间送达子豪发自凹非寺本文转载自:量子位(QbitAIÿ

点击上方“视学算法”,选择加"星标"或“置顶

重磅干货,第一时间送达

子豪 发自 凹非寺
本文转载自:量子位(QbitAI)

先来一波回忆杀~

《超级马里奥兄弟》的重度玩家们,可能已经发现了,这并不是原本32关里面的。

不过,如果你以为这是《马里奥制造》的杰作,那你就猜错了~这是AI利用GAN搞出来的!

利用GAN生成红白机游戏画面,并不是新鲜事,不过,这一次是可以无限延长的那种~

花样还不少:

只需用4个颜色通道表示对象

在游戏中,关卡数据以压缩格式存储,通常,每个对象用两个字节来描述位置和类型。

一个字节指定16x16网格中的xy坐标;第二个字节指定对象的类型。比如在第一关的场景中,仅用了12个字节来描述:

07 81 | 47 24 | 57 00 | 63 01 | 77 01 | C9 71

作者为了将关卡编码为16x16的图像,分别设置了4个独立颜色通道:

比如,第一关的截图,就可以表示成这样:

这样的编码方式,既能够涵盖足够多的对象,又不至于太过复杂。

并且,根据关卡中对象的排列方式进行分组,有利于模型进行学习并重现。比如,实心砖用于布置楼梯、砖块则通常水平放置。

此外,将所有对象组织成一个合理的方案,减少生成网络失误对输出结果的负面影响

比如用硬币代替砖块,影响非常小;而如果用管道或库巴来代替,就会出现问题。

开发者还找出了游戏的一些特点:

管道可以连接地面或一排浮动块;

方块通常用来构建各种尺寸的楼梯;

砖块和问题块,大多排在第3位和第7位;

其他角色一般会分成两三组。

接下来,作者使用TensorFlow作为后端,利用Keras来构建模型,并进行训练。

生成器通过输入的一组特征向量,来生成新的样本图像;鉴别器则区分是训练集中的真实图像,还是生成器伪造的。

随着遍历训练集的次数增加,生成效果也逐渐改善:

最终输出的结果,是这样的:

嗯,效果真的很不错~

想永不通关?用cGAN

现在,只需把一张张“截图”连接起来,你就会得到:

半个库巴、半个管道,以及半个马里奥……

怎么才能无缝拼接,得到连贯的关卡呢?

这就需要利用「有条件的GAN」,把前一个场景作为后一个场景的边界条件

就像这样:

可以看出,场景的左侧部分,是以第一行图像作为边界条件生成的。

具体来说,首先要在之前的基础上,向生成器输入一组16×4的图像,作为上一个场景的边界部分。

网络架构是这样的:

生成器在输入条件的限制下,生成16x16的图像,然后,把它们与16×4的输入图像进行拼接,再用拼接后的图像来训练鉴别器。

利用16×4图像的不断迭代,最终就能拼接成连续的场景,比如,经过40次迭代的结果:

“不想通关综合症”可能有救了!

开发者表示,虽然效果不是特别完美,但是已经具备了趣味性和可玩性~

是不是和那个“能玩一辈子的游戏”——《马里奥制造》有点像?它同样主打关卡制造,不过是玩家来手动设计。

马里奥制造2 (图源:游戏官网)

在发布关卡之前,作者必须通关一次,于是有些人就加入隐蔽的“作者通道”,偷个懒直达终点。

不少高手都曾被“马造毒图”难倒,当然如果玩家发现隐蔽通道,就能“偷鸡”通关~

这样“有趣又有毒”的关卡,不知道AI能否构建出来呢?

原文链接:
https://medium.com/@eway/using-a-generative-adversarial-network-to-author-playable-super-mario-bros-levels-223736bd4ce

点个在看 paper不断!



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
author-avatar
雨后彩虹fen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有