高考考试网
当前位置: 首页 高考资讯

怎么用python做小游戏(还能训练AI模型:丹麦小哥大学项目火了)

时间:2023-07-03 作者: 小编 阅读量: 2 栏目名: 高考资讯

昨天,一款利用Python编写的Gameboy模拟器在社交网络上吸引了人们的广泛关注。作者在Reddit上发出的帖子迅速获得了上千点赞。该项目的作者之一MadsYnddal宣布,PyBoy的1.0版正式发布。虽然AlphaStar在这一环境中取得了令人瞩目的成果,但仍存在很多亟待解决的问题。所以它可以从另一个脚本进行初始化,并可以由该脚本控制和探测。

机器之心报道

机器之心编辑部

感觉用 Atari 游戏研究人工智能有点「不够接地气」?现在我们可以使用 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/PyBoy

特点

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

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

PyBoy 模拟器架构

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

Game Boy 专利中的架构图。

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

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

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

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

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

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

通用人工智能这一概念指的是机器能够成功完成任意一件人类能够做到的智力型任务。目前我们对 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,需要智能体学会复杂的协同、对抗策略。虽然 AlphaStar 在这一环境中取得了令人瞩目的成果,但仍存在很多亟待解决的问题。以下为 PySC2 环境示意图。

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

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

Github 介绍

如何安装?

如果已经配置了一个能够正常运行 Python 的环境,那么安装会非常简单:

通过软件包管理器安装 SDL2(sudo apt install libsdl2-dev 或是 brew install sdl2)

使用 pip install pyboy 安装 Pyboy

可以直接从终端 $ pyboy file.rom 使用 PyBoy 或者在 Python 脚本中使用:

from pyboy import PyBoypyboy = PyBoy('ROMs/gamerom.gb')while not pyboy.tick(): pass

该项目同时支持 macOS, Raspberry Pi (Raspbian), Linux (Ubuntu), 以及 Windows 10.

PyBoy API 文档

如果用户需要创建一个自己的机器人或者是 AI,可以在 PyBoy Documentation (https://baekalfen.github.io/PyBoy/index.html) 找到所有用以支持的外部组件,其中各种类及其用法都非常详细,这里不再一一赘述。(如下图结构索引)

简短示例

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

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

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

import osimport sysfrom pyboy import PyBoy, WindowEvent# Makes us able to import PyBoy from the directory belowfile_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.argvpyboy = 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 developmentlast_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。

作者简介

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

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

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

    推荐阅读
  • 吃什么枸杞对肝脏好(想要养护肝脏健康)

    蛋白质作为人类生命活动物质基础,在肝脏保持健康时可以合成蛋白质,但合成的量无法满足机体需求。膳食纤维是人体需要的营养物质之一。有害物质排泄出来,减轻肝脏代谢压力,有保护该器官的作用。另外,维生素A还有其他作用,可以促进免疫球蛋白的合成,机体抵抗力正常发挥,可以有效对抗病原体入侵,从而预防疾病。

  • 家长如何鼓励即将高考的孩子(家有高考生高考迫近)

    其中最中意的要属今年爆火的“晨光小分贝中性笔”,之所以叫“小分贝”是因为它按笔的时候不会发出声音,这样考生的思路就不会被打扰,除此之外,这款笔还顺滑好用,超黑速干,不脏卷,写出来的字因比别的笔更黑更亮,而显得更有精神。

  • 世界十大无解谜团之一(世界上十个永远解不开的谜团)

    宇宙边缘是否存在在人类文明产生的时候,人们就在开始产生了对宇宙的向往,类似我国的三星堆文明,玛雅文明等,都发现了和宇宙相关的发现,随着现代科技的发展,人类对宇宙的探索已经进步了很多,但是随着对宇宙的认识越来越多,新的问题就出现了,比如关于宇宙的边缘存在与否,这个问题已经越发的不可理解,因为人类在宇宙中实在是太过于渺小。

  • 小学生改课文(小学语文教材改音)

    下面希望有你要的答案,我们一起来看看吧!小学生改课文原作者:希希陌上行这几年孩子读小学,给孩子检查语文作业和古诗背诵时,发现小学语文教材里有些常用词和古诗词里的读音发生了改变。常用词改读的如“呆板”原来读“áibǎn”,现在改读“dāibǎn”,“说服”原来读“shuìfú”,现在改读“shuōfú”。古诗词改读的也有很多,有些为读起来押韵保留古读音的,现在都改成了今音。

  • 钓泥鳅怎样打窝,可以选择哪些饵料,常用钓法有哪些

    钓泥鳅一般不用打窝,若非要打窝可用鱼粉、猪血粉、蚕蛹粉、米糠、麦麸、菜饼、商品饵等打窝。钓泥鳅常用的钓法有手竿钓、篮子钓和竹笼钓等。除此之外,红虫、蛆虫等鲜活的虫饵钓泥鳅的效果也非常好。

  • 网情维护怎么做(辞职后的老陈后悔了)

    看见老陈发布辞职消息的那天,还真有点儿想不明白,他为什么这么做。老陈的说法是为了不连累单位,可见他的无奈。老陈的这次辞职,无意间助长了多少恶势力的威风。如果有,请让老陈穿着警服回来继续坐在镜头前,告诉所有人,邪不压正。别说老陈,正常人有几个能受得了这个诱惑。老陈是公职人员,也是个正常人,也会有七情六欲。老陈是一个善良的老实人,玩不明白流量。正如一网友所说,当年看老陈就哭,后来怎么不见了。

  • 宝马730鼓风机怎么拆(拆解方法介绍)

    宝马730鼓风机怎么拆首先找到鼓风机的准确位置,就在副驾驶储物格后面。已将两个杯架取出,4个螺丝拧回原处以免丢失。物箱的六条螺丝是内六花的,拆掉后可轻松取下,此时要注意储物箱后面的4条线速,仔细将其与箱体分离方可拿走储物箱。需记下位置以便顺利复原。风机拆卸相对简单,只要反时针旋转即可将风机取下来,注意图中的小耳朵需要轻微的从卡位出退出来,否则风机不能反时针退出。

  • c2驾照和c1驾照的区别是什么(c2驾照和c1驾照的区别)

    c2的准驾车型包括:车长不小于5米的轻型自动挡普通载货汽车,或者车长不小于4米的小型自动挡普通载客汽车,或者车长不小于4米的自动挡车。C2驾照培训费用要比C1驾照的培训费用贵出几百元。费用的差别主要是由于C2自动挡教练车数量比较少,使用过程中维修费用比较高,且相对于手动挡汽车来说,自动挡车型平均油耗较高,教学成本更高。

  • 兰花什么时候换盆好(春季冬季换盆好)

    以下内容希望对你有帮助!第一个是春天3-4月份的时候,第二个是秋天9-10月份的时候。这两段时间天气温暖,植株生长速度较快,所以比较适合换盆。不建议在夏季或者冬季换盆,但如果花盆太小或者不够透气,严重影响到植株生长,那么需要及时于于温暖的室内更换,以保证植株能健康生长。

  • 我的世界海龟蛋怎么获得(海龟蛋获取方法详解)

    我的世界海龟蛋怎么获得海龟蛋是一种能够孵化出幼年海龟的蛋。使用附有精准采集魔咒的工具可以获得海龟蛋。当喂食海草给两只海龟时,其中一只海龟会在沙子中挖洞,并在几秒钟后产下含有1-4个蛋的海龟蛋方块。一个方块中最多可放置4只海龟蛋。僵尸、僵尸村民、尸壳和僵尸猪人会主动寻找并踩踏海龟蛋,直到海龟蛋全部被打碎为止。