pg麻将胡了试玩平台 用Python写出Gameboy模拟器,还能训练AI模型:丹麦小哥的大学项目火了
机器心脏报告
机器之心编辑部
你是否觉得用雅达利游戏来研究人工智能有点“不够接地气”?现在我们可以使用Gameboy模拟器了。
对于很多80、90后来说,任天堂Gameboy代表了很大一部分年轻人。我们熟悉的很多游戏最初都是安装在这款8位游戏掌上游戏机上的,其中包括著名的《马里奥》和《塞尔达》系列。对于国内玩家来说,我们玩得最多的应该就是《口袋妖怪》系列了。
自这款游戏机首次发布以来,已经过去了 30 年,但人们对它的热情依然不减。昨天,一款用Python编写的Gameboy模拟器在社交网络上引起了广泛关注。
我的青春又回来了吗?作者在 Reddit 上的帖子很快获得了数千个点赞。
该项目的作者之一Mads Ynddal宣布PyBoy 1.0版本已经正式发布。
什么是 PyBoy?
简而言之,它是一个完全用 Python 从头开始编写的 Game Boy 模拟器,支持通过 API 编写脚本。研究人员添加了类型定义,允许使用 Cython 编译软件,从而获得与用 C 和 C++ 编写的模拟器相当的性能。
项目链接:
特征
PyBoy 被设计为通过 Python 访问,因此它支持并鼓励人们进行实验研究,机器人技术和人工智能正在尝试这样做。研究人员正在构建特定于游戏的包装器,目前允许程序员与俄罗斯方块和超级马里奥兄弟进行交互,而无需深入了解 Game Boy。你可以参考这个文档:。
项目作者还想学习和尝试更多奇特的功能,根据大学项目的研究,他们为模拟器添加了倒带功能,即可以在任何游戏中倒带时间。
PyBoy模拟器架构
1990年,任天堂为Game Boy申请了专利。下图展示了该专利中CPU、RAM、卡带和显示器之间的集成和连接。
Game Boy 专利的架构图。
基于此,PyBoy项目成员用Python为每个组件开发了一个类,从而为“主机系统”(运行Python的系统)上的“客户端系统”奠定了基础。这个客户系统是虚拟的 Game Boy 硬件,理论上它可以运行为 Game Boy 编写的所有软件。
下图展示了PyBoy模拟器中的所有类及其关系:
PyBoy 对于强化学习意味着什么以及它与其他环境的比较
这些年来很多人开发了Gameboy模拟器,现在已经有了可以在电脑和手机上运行的工具。为什么要用Python来写呢?当然是用来训练人工智能的。
想玩游戏吗? Gameboy对于现在的人来说可能有点“难用”。
最接近通用人工智能的方法——强化学习
通用人工智能的概念是指机器成功完成人类可以完成的任何智力任务的能力。我们目前对人工智能的研究离这个目标还很远。吴恩达之前说过,深度学习只做高维的“曲线拟合”。
与依赖预先收集的数据(甚至需要大量人类标记)的机器学习算法不同pg网赌软件下载,强化学习是一种仅通过环境奖励进行训练的算法,其工作原理与人体内部多巴胺系统类似。强化学习是目前最接近人类从经验中学习的能力的机器学习算法,特别适合智能体需要根据环境做出决策的情况。
下图显示了 RL 代理如何仅使用游戏图像作为输入来学习马里奥控制策略。
为什么如此多的强化学习研究是在 Atari 上进行的,而不是在其他更实际的问题上?
使用 Atari 作为 RL 研究基准的主要原因如下:
Atari环境允许我们使用相同的算法来测试多个不同的环境,验证RL算法的通用性;
由于输入只是游戏图像,因此增加了问题的复杂度;
Atari为研究人员提供了一个公认的测试平台,可以公平地比较不同算法的性能;
强化学习需要大量的交互式数据来进行学习。在实际环境中进行实际测试之前,Atari 提供了一个安全、快速、低成本的测试平台,用于算法的初步验证。
下图显示了 Atari 环境的一些示例:
Atari 与 PySC2 和 PyBoy 等环境的比较
上一节介绍了在 Atari 环境中训练 RL 智能体的许多优点。然而,随着强化学习的发展pg赏金大对决试玩版,这种相对简单的环境逐渐不再适合当前新的强化学习研究。不久前,DeepMind 提出的 Agent57 在所有 Atari 环境下的表现都超越了人类玩家的平均水平,这也预示着 Atari 环境下的 RL 研究正在逐渐接近尾声。
更困难的环境包括 PySC2,这是 DeepMind 和暴雪之间的合作,它要求智能体学习复杂的协作和对抗策略。尽管AlphaStar在这种环境下取得了令人瞩目的成果,但仍然存在许多问题需要解决。下图是PySC2环境示意图。
PyBoy环境的难度可以说介于Atari和PySC2之间。它为我们提供了验证 RL 性能的新基准。在将强化学习应用于更复杂的现实问题之前,我们可以在这种中等难度的环境中经济有效地测试强化学习。
正如特斯拉人工智能和自动驾驶视觉总监安德烈·卡帕蒂 (Andrej Karpathy) 所说,“在使用火箭筒之前,应该先尝试使用 BB 枪。”
GitHub简介
如何安装?
如果你已经配置了可以正常运行Python的环境,那么安装非常简单:
通过包管理器安装SDL2(sudo apt install libsdl2-dev或brew install sdl2)
使用 pip install pyboy 安装 Pyboy
您可以直接从终端 $ pyboy file.rom 或在 Python 脚本中使用 PyBoy:
from pyboy import PyBoy
pyboy = PyBoy('ROMs/gamerom.gb')while not pyboy.tick():
pass
该项目还支持 macOS、Raspberry Pi (Raspbian)、Linux (Ubuntu) 和 Windows 10。
PyBoy API 文档
如果用户需要创建自己的机器人或AI,可以在PyBoy文档()中找到所有支持的外部组件。各个类及其用法都非常详细,这里不再赘述。 (结构指标如下图)
简短的例子
PyBoy 可以作为 Python 中的对象加载。因此它可以从另一个脚本初始化并由该脚本控制和探测。看一下 gamewrapper_tetris.py,了解与游戏交互的原始“机器人”。当然,所有外部组件都可以在 PyBoy 文档中找到。
有关一般 Game Boy 文档,请查看 Pan Docs,其中包含每个主题的详细信息。
这是从屏幕读取数据的简短演示,代码也可以在 gamewrapper_mario.py 中找到:
import osimport sys
from pyboy import PyBoy, WindowEvent
# Makes us able to import PyBoy from the directory below
file_path = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, file_path + "/..")
# Check if the ROM is given through argvif len(sys.argv) > 1:
filename = sys.argv[1]else:
print("Usage: python mario_boiler_plate.py [ROM file]")
exit(1)
quiet = "--quiet" in sys.argv
pyboy = PyBoy(filename, window_type="headless" if quiet else "SDL2", window_scale=3, debug=not quiet, game_wrapper=True)
pyboy.set_emulation_speed(0)assert pyboy.cartridge_title() == "SUPER MARIOLAN"
mario = pyboy.game_wrapper()
mario.start_game()
assert mario.score == 0assert mario.lives_left == 2assert mario.time_left == 400assert mario.world == (1, 1)assert mario.fitness == 0 # A built-in fitness score for AI development
last_fitness = 0print(mario)
pyboy.send_input(WindowEvent.PRESS_ARROW_RIGHT)for _ in range(1000):
assert mario.fitness >= last_fitness
last_fitness = mario.fitness
pyboy.tick()
if mario.lives_left == 1:
assert last_fitness == 27700assert mario.fitness == 17700 # Loosing a live, means 10.000 points in this fitness scoringprint(mario)
breakelse:
print("Mario didn't die?")
exit(2)
mario.reset_game()assert mario.lives_left == 2
pyboy.stop()
如果您在加载了 Super Mario Land ROM 的情况下运行上述代码,您将获得下面的图像和终端输出。值得注意的是pg麻将胡了试玩平台,马里奥的形态显示为索引 0、1、16、17。
关于作者
该项目的作者是来自丹麦的 Asger Anders Lund Hansen、Mads Ynddal 和 Troels Ynddal。毕业于丹麦哥本哈根大学的 Mads Ynddal 表示,其实这个 Gameboy 模拟器可以追溯到他 2015 年上大学时的项目。
Gameboy 模拟器 1.0 版已经发布,但开发人员还有很多事情可以做。该项目开发人员表示,目前可以推进的方向包括添加声音、颜色、与模拟器的Gameboy模拟连接以及更多的游戏包,当然还有在其之上训练神经网络的示例。
希望在人们的努力下,Gameboy上的游戏也能获得新生。更重要的是,它现在担负着训练人工智能的任务。
在《机器之心》CVPR 2020第一期在线分享中,我们邀请了北京大学智能科学系的陈汉庭(论文第一作者)为我们分享了主题《Additive Neural Network: Do we real need multiplication in深度学习?” 》,欢迎广大读者报名学习。
我要评论