来源:机器之心
正文约2853字,建议阅读7分钟。
本文介绍用Python编写的Gameboy模拟器在社交网络上引起了广泛的关注。
对于很多80后、90后,任天堂Gameboy代表着青春的一大部分。 我们熟悉的许多游戏最先出现在这款8位游戏手机上,包括著名的《马里奥》、《塞尔达》系列。 我觉得对于国内玩家来说,我们玩得最多的是《口袋妖怪》系列。
这款游戏机首次发布至今已有30年,但人们的热情丝毫没有减少。 昨天,用Python编写的Gameboy模拟器在社交网络上引起了关注。
爷爷的青春回来了吗? 作者在Reddit上发布的帖子迅速获得了成千上万的赞誉。
这个项目的作者之一Mads Ynddal宣布,PyBoy的1.0版正式发布。
什么是PyBoy?
简单来说,这是一个完全用Python从头开始编写的Game Boy模拟器,支持使用API编写脚本。 研究人员为了能够使用Cython编译软件而添加了类型定义,获得了与用c和c编写的模拟器相媲美的性能。
项目链接: https://github.com/baekalfen/py boy
特长
PyBoy被设计为通过Python访问,因此支持和鼓励实验研究。 机器人和人工智能正在进行这一尝试。 研究人员正在构建游戏特定的包装器。 现在,通过包装器,程序员可以与俄罗斯方块或超级玛丽进行交互,而无需深入了解Game Boy。 请参阅本文档: https://docs.pyboy.dk。
项目的作者想学习和尝试更多奇怪的功能。 根据大学项目的研究,他们在模拟器里增加了倒带功能。 这意味着任何游戏都可以让时间倒流。
PyBoy模拟器的体系结构
1990年,任天堂申请了game boy专利。 下图显示了本专利中处理器、RAM、盒式磁带和显示器之间的集成和连接。
游戏男孩专利的架构图。
PyBoy项目的成员在此基础上在Python中为每个组件创建了一个类( class ),并在“主机系统”上为“客户端系统”奠定了基础(系统运行Python )。 该客户端系统是虚拟game boy的硬件,理论上可以执行为game boy编写的所有软件部分。
下图显示了PyBoy模拟器中的所有类及其关系。
PyBoy对强化学习的意义及与其他环境的比较
这几年很多人开发了Gameboy模拟器,现在的电脑和手机都有可执行的工具。 为什么要用Python写呢? 当然是用来训练人工智能的。
你想玩游戏吗? game boy对现在的人来说可能有点“棘手”。
最接近通用人工智能的方法——强化学习
通用人工智能的概念意味着机器能成功完成任何人能完成的智力任务。 目前,我们对AI的研究离这个目标还有很大的距离。 吴恩达从以前开始就表示,深度学习做的只是高维的“curve fitting”。
与事先收集数据、甚至需要大量人工标记的机器学习算法不同,强化学习是一种只靠环境奖进行训练的算法,其结构与人体内部的多巴胺系统相似。 强化学习是目前最接近人类根据经验学习能力的机器学习算法,特别适用于代理需要根据其所处环境做出决策的场合。
下图显示了RL代理如何只将游戏图像作为输入来学习马里奥控制策略。
为什么很多关于RL的研究都是在Atari而不是其他更现实的问题上进行的呢?
在关于RL的研究中,以Atari为基准使用的理由主要有以下几点。
在Atari环境中,可以使用同一算法测试多个不同的环境,以验证RL算法的共性。 因为输入只有游戏图像,所以会增加问题的复杂性; Atari为研究者提供了公认的测试平台,能够更公平地比较不同算法之间的性能RL需要大量的交互数据进行学习,在实际环境中测试之前,Atari为了算法的初始验证是安全、快速的下图显示了几个Atari环境。
Atari、PySC2等环境与PyBoy的比较
上一节介绍了在Atari环境中训练RL代理的优点,但是随着RL的发展,这个相对简单的环境不再适用于现在的新RL研究。 不久前,DeepMind提出的Agent57在所有Atari环境下都超过了人类玩家的平均水平,这意味着Atari环境下的RL研究已经接近尾声。
更困难的环境包括DeepMind和暴雪的合作等PySC2,需要代理掌握复杂的合作、对抗措施。 阿尔法在这一环境中取得了令人瞩目的成就,但还有许多问题有待解决。 以下为PySC2环境示意图。
可以说PyBoy环境的难度介于Atari和PySC2之间,提供了验证RL性能的新标准。 在将RL应用于更复杂的实际问题之前,可以在这个难度较低的环境中进行低成本高效的测试。
正如特斯拉人工智能和自动驾驶视觉总监Andrej Karpathy所说,“oneshouldalwaystryabbgunbeforereachingforthebazooka .”
Github介绍安装方法吗?
如果已经配置了可以正常运行Python的环境,安装将非常简单。
要使用安装SDL2(sudoaptinstalllibsdl2-dev或brew install sdl2)的pip install Pyboy在包管理器中安装Pyboy,请使用终端$ py boy文件
frompyboyimportpyboypyboy=py boy ( Roms/gamerom.GB ) ) while not py boy.tick:pass此项目为macOS,raspberrypi ) raspbiaack
PyBoy API文档
如果用户需要创建自己的自动机或AI,则为pyboydocumentation ( https://baekalfen.github.io/py boy/index.html )支持的所有外部组件其中每个类及其使用方法都非常详细,在此不再赘述。 (如下图所示构成索引)
短样品
PyBoy可以作为Python的对象加载。 因此,可以从其他脚本初始化,并由该脚本控制和检测。 请看gamewrapper_tetris.py中粗糙的“机器人”。 我在和游戏交流。 当然,所有外部组件都位于PyBoy文档中。
在典型的Game Boy文档中,可以显示包含每个主题的详细信息的Pan Docs。
以下是从屏幕读取数据的简单演示,代码也位于gamewrapper_mario.py上。
importosimportsysfrompyboyimportpyboy, window event # makesusabletoimportpyboyfromthedirectorybelowfile _ path=OS.path.dirname ( file _ path ‘/. ‘ # checheckicheck else:print ( usage:python Mario _ boiler _ plate.py [ rom file ] ) exit(1)1) quiet=’– quiet ‘ in sys.argvpys window_scale=3,debug=not quiet, game _ wrapper=true ( py boy.set _ emulation _ speed (0) assert pyboy.cartridge_title )=) super Mario LAN ‘ Maran ‘ Maran an Rio.time _ left==400 assert Mario.world==1, 1 ) assertmario.fitness==0# a built-infitnessscoreforaidevelopmentlast _ fitness=0print ( Mario ) pyboy.send_innd ) ) )0for _ in range if Mario.lives _ left==1: assert last _ fitness==27700 assert Mario.fitness==17700 # loosing alive, means 10.000 pointsinthisfitnessscoringprint ( Mario ) breakelse:print ) mariodidn ) tdie ) exit(2)2) Mario.reset _ gan 在加载Mario Land ROM的状态下执行以上代码,可以获得以下图像和终端的输出。 值得注意的是,Mario的形态表示索引0、1、16、17。
作者简介
该项目的作者Asger Anders Lund Hansen、Mads Ynddal和Troels Ynddal来自丹麦。 来自丹麦哥本哈根大学的Mads Ynddal说,实际上这个Gameboy模拟器可以追溯到2015年大学时代的项目。
虽然Gameboy模拟器的1.0版已经发布,但对于开发人员来说还有很多事情可以做。 据项目开发人员介绍,目前可以推进的方向包括在模拟器中增加声音、色彩、game boy模拟连接以及更多游戏封装,当然也有在此基础上训练神经网络的例子。
希望在人们的努力下,game boy里的游戏也能脱胎换骨。 更重要的是,有训练人工智能的任务。
结束了
关注清华-青岛数据科学研究院官方微信公众平台“AI数据派”和姐妹号“数据派THU”,获取更多讲座福利和优质内容。