用Python写出Gameboy模拟器,还能训练AI模型:丹麦小哥的大学项目火了

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 感觉用 Atari 游戏研究人工智能有点「不够接地气」?现在我们可以使用 Gameboy 模拟器了。
云栖号资讯:【 点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

感觉用 Atari 游戏研究人工智能有点「不够接地气」?现在我们可以使用 Gameboy 模拟器了。

1

对于很多 80 后、90 后来说,任天堂 Gameboy 代表了青春的很大一部分。很多我们耳熟能详的游戏都是最初搭载在这款 8 位游戏掌机上的,包括鼎鼎有名的《马里奥》、《塞尔达》系列。对于国内玩家来说,我们玩得最多的则应该是《口袋妖怪》系列了。

2

这款游戏机距离首次发布已过去了 30 年时间,不过人们对于它的热情却丝毫不减。昨天,一款利用 Python 编写的 Gameboy 模拟器在社交网络上吸引了人们的广泛关注。

3

爷的青春回来了?作者在 Reddit 上发出的帖子迅速获得了上千点赞。

该项目的作者之一 Mads Ynddal 宣布,PyBoy 的 1.0 版正式发布。

4

PyBoy 是什么?

简而言之,它是一个完全用 Python 从头开始编写的 Game Boy 模拟器,并且支持通过 API 编写脚本。研究者添加了类型定义,使其可以使用 Cython 编译软件,从而获得与用 C 和 C++编写的模拟器相媲美的性能。

特点

PyBoy 被设计成通过 Python 访问,因此支持并鼓励人们做实验研究,机器人和人工智能在作此尝试。研究者正在构建游戏特定的包装器,目前,包装器可让程序员与俄罗斯方块和超级玛丽进行交互,而不需要对 Game Boy 有深入的了解。可以参考该文档:https://docs.pyboy.dk

项目作者还想学习和尝试更多奇特的功能,根据大学项目的研究,他们向模拟器添加了倒回功能,也就是说,您可以在任何游戏中倒回时间。

PyBoy 模拟器架构

1990 年,任天堂为 Game Boy 申请了专利。下图展示了该专利中 CPU、RAM、盒带和显示屏之间的集成与连接。

5

Game Boy 专利中的架构图。

PyBoy 项目成员基于此在 Python 中为每个组件制定类(class),从而在「主机系统」上为「客户系统」搭建了基础(系统运行 Python)。该客户系统就是虚拟的 Game Boy 硬件,理论上它能够运行为 Game Boy 编写的每一个软件部分。

下图展示了 PyBoy 模拟器中所有类及其关系:

6

PyBoy 对强化学习的意义以及与其他环境的比较

这些年来,已有很多人开发过 Gameboy 模拟器,现在的电脑和手机上都有可运行的工具。为什么要用 Python 来写一款呢?当然是用来训练人工智能的。

7

想打游戏?Gameboy 对于现在的人来说恐怕有点「难以上手」。

最接近通用人工智能的方法——强化学习

通用人工智能这一概念指的是机器能够成功完成任意一件人类能够做到的智力型任务。目前我们对 AI 的研究距离这一目标还差很远的距离,吴恩达之前就表示过,深度学习做的仅是高维的「curve fitting」。

不同于那些依靠预先收集数据(甚至需要大量人工标记)的机器学习算法,强化学习是一种仅通过环境奖赏进行训练的算法,其工作机制类似于人体内部的多巴胺系统。强化学习是目前最接近于人类从经验中学习这一能力的机器学习算法,尤其适用于智能体需要根据其所处环境进行决策的情景。

下图展示了 RL 智能体是如何仅以游戏图像作为输入,来学习马里奥控制策略的。

8

为什么大量关于 RL 的研究都在 Atari 上进行,而不是其他更实际的问题?

  • 关于 RL 的研究使用 Atari 作为基准的原因主要有如下几点:
  • Atari 环境能够让我们使用相同的算法测试多个不同的环境,验证 RL 算法的通用性;
  • 由于输入仅为游戏图像,增加了问题的复杂性;
  • Atari 为研究人员提供了一个公认的测试平台,能够较为公平地比较不同算法之间的性能;
  • RL 需要大量的交互数据进行学习,在真实环境中实际测试之前,Atari 为算法的初期验证提供了一个安全、快速、低成本的测试平台。

下图为一些 Atari 环境的展示:

9

Atari、PySC2 之类环境与 PyBoy 对比

上一小节介绍了在 Atari 环境中训练 RL 智能体的诸多优势,然而随着 RL 的发展,这一相对较简单的环境逐渐不再适用于目前新的 RL 研究。不久之前,由 DeepMind 提出的 Agent57 在所有 Atari 环境中表现均超越了人类玩家平均水平,也预示着在 Atari 环境上的 RL 研究逐渐进入尾声。

更困难环境有诸如 DeepMind 与暴雪合作的 PySC2,需要智能体学会复杂的协同、对抗策略。虽然 AlphaStar 在这一环境中取得了令人瞩目的成果,但仍存在很多亟待解决的问题。以下为 PySC2 环境示意图。

10

PyBoy 环境的难度可以说介于 Atari 与 PySC2 之间,它为我们提供了一个验证 RL 性能的新基准。在将 RL 应用于更复杂的实际问题之前,我们可以先在这一难度适中的环境中进行低成本、高效的测试。

就像特斯拉的人工智能和自动驾驶视觉总监 Andrej Karpathy 说的,「One should always try a BB gun before reaching for the Bazooka.」

PyBoy API 文档

11

简短示例

PyBoy 可以作为 Python 中的对象加载。所以它可以从另一个脚本进行初始化,并可以由该脚本控制和探测。看一下 gamewrapper_tetris.py 上一个粗糙的「机器人」,正在与游戏进行交互。当然,所有的外部组件都可以在 PyBoy 文档中找到。

对于一般的 Game Boy 文档,可以查看 Pan Docs,其中包含了每个主题的详细信息。

以下是从屏幕读取数据的简短演示,该代码也可以在 gamewrapper_mario.py 中找到:

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 的情况下运行上述代码,则将在下面得到图片和终端输出。值得注意的是,Mario 的形态显示为索引 0,1,16,17。

12

13

作者简介

该项目的作者 Asger Anders Lund Hansen、Mads Ynddal 和 Troels Ynddal 均来自丹麦。毕业于丹麦哥本哈根大学的 Mads Ynddal 表示,事实上这一 Gameboy 模拟器可以追溯到 2015 年他在大学期间的项目。

14

Gameboy 模拟器的的 1.0 版发布了,但对于开发者们来说还有很多事可以去做。项目研发者表示,目前可以推进的方向包括为模拟器加入声音、彩色、Gameboy 模拟连线,以及更多游戏的封装,当然还有在其之上训练神经网络的示例。

希望在人们的努力下,Gameboy 中的游戏也能重获新生。更重要的是,它现在还有了训练人工智能的任务。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址: https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-21
本文作者:机器之心
本文来自:“机器之心”,了解相关信息可以关注“机器之心”

相关文章
|
6天前
|
人工智能 算法 计算机视觉
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
89 61
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
|
15天前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
154 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
1天前
|
人工智能 物联网 开发者
Oumi:开源的AI模型一站式开发平台,涵盖训练、评估和部署模型的综合性平台
Oumi 是一个完全开源的 AI 平台,支持从 1000 万到 4050 亿参数的模型训练,涵盖文本和多模态模型,提供零样板代码开发体验。
91 43
Oumi:开源的AI模型一站式开发平台,涵盖训练、评估和部署模型的综合性平台
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
YuE:开源AI音乐生成模型,能够将歌词转化为完整的歌曲,支持多种语言和多种音乐风格
YuE 是香港科技大学和 M-A-P 联合开发的开源 AI 音乐生成模型,能够将歌词转化为完整的歌曲,支持多种音乐风格和多语言。
81 23
YuE:开源AI音乐生成模型,能够将歌词转化为完整的歌曲,支持多种语言和多种音乐风格
|
3天前
|
人工智能 编解码 语音技术
SpeechGPT 2.0:复旦大学开源端到端 AI 实时语音交互模型,实现 200ms 以内延迟的实时交互
SpeechGPT 2.0 是复旦大学 OpenMOSS 团队推出的端到端实时语音交互模型,具备拟人口语化表达、低延迟响应和多情感控制等功能。
70 21
SpeechGPT 2.0:复旦大学开源端到端 AI 实时语音交互模型,实现 200ms 以内延迟的实时交互
|
3天前
|
机器学习/深度学习 人工智能 API
Aligner:自动修正AI的生成结果,北大推出残差修正模型对齐技术
介绍北大团队提出的 Aligner 模型对齐技术,通过学习对齐答案与未对齐答案之间的修正残差,提升大语言模型的性能。
56 28
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
VideoWorld:字节开源自回归视频生成模型,支持输入视频指导AI生成视频!弥补文本生成视频的短板
VideoWorld 是由字节跳动、北京交通大学和中国科学技术大学联合推出的自回归视频生成模型,能够从未标注的视频数据中学习复杂知识,支持长期推理和规划任务。
124 8
VideoWorld:字节开源自回归视频生成模型,支持输入视频指导AI生成视频!弥补文本生成视频的短板
|
15天前
|
人工智能 编解码 自然语言处理
CogView-3-Flash:智谱首个免费AI图像生成模型,支持多种分辨率,快速生成创意图像
CogView-3-Flash 是智谱推出的首个免费AI图像生成模型,支持多种分辨率,快速生成高质量图像,广泛应用于广告、设计、艺术创作等领域。
48 6
CogView-3-Flash:智谱首个免费AI图像生成模型,支持多种分辨率,快速生成创意图像
|
15天前
|
人工智能 编解码
CogVideoX-Flash:智谱首个免费AI视频生成模型,支持文生视频、图生视频,分辨率最高可达4K
CogVideoX-Flash 是智谱推出的首个免费AI视频生成模型,支持文生视频、图生视频,最高支持4K分辨率,广泛应用于内容创作、教育、广告等领域。
176 5
CogVideoX-Flash:智谱首个免费AI视频生成模型,支持文生视频、图生视频,分辨率最高可达4K
|
9天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
70 9
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等