學習使用OpenAI Retro - E2 - Open-AI和NEAT教程
目录
- 介绍
- 安装 OpenAI Retro
- 创建环境
- 运行游戏
- 设置动作
- 观察游戏画面
- 获取回报和状态
- 更改奖励机制
- 安装 Python Neat
- 使用神经网络
- 结论
介绍
欢迎大家来到我关于如何使用 OpenAI Retro 和各种神经网络的教程的第二集。今天我们将从非常简单的环境交互开始,基本上向您展示如何使用 OpenAI 网络。虽然它非常简单,但我们会一步一步地讲解,并尽力让您理解每个函数的作用。之后,如果时间允许,我们将安装 Python Neat,并开始学习使用它。不过,这部分内容会更加复杂些,所以如果您还没看过上一集中有关如何设置 Retro Gym 环境的内容,我建议您回去看一下。当然,您也可以直接访问 OpenAI Retro GitHub 上的相关资源。在开始之前,我们需要返回到上次创建的教程文件夹,如果您按照上次的做法,那么就代表您创建了一个虚拟环境。接下来,我们要运行以下命令:source bin/activate
,这样就可以激活我们的虚拟环境了。您可以看到,我们在上一集已经安装好了 Gym Retro,并且还安装了其他相关组件。好了,到目前为止,这是我们要安装的全部内容。
安装 OpenAI Retro
要开始使用 OpenAI Retro,我们需要先导入 Retro 库,它是 OpenAI Gym Retro 环境的核心。导入 Retro 的方法非常简单,只需要一个命令即可。
import retro
接下来,我们需要创建一个环境,用来加载游戏和相应的状态。具体的创建方法如下。
env = retro.make(Game='Sonic the Hedgehog - Genesis', state='Green Hill Zone Act 1')
您可以在 Gym Retro 文件夹中找到游戏和状态的名称。打开文件夹之后,进入 retro/data
目录,在里面可以找到各种游戏环境。对于我们的示例,我们选择了 Sonic the Hedgehog 这个游戏,并指定了它的状态为 Green Hill Zone Act 1。如果您希望指定其他的状态文件,只需要将它们放入相应的文件夹并在命令中进行指定即可。
创建环境
一旦我们完成了环境的创建,接下来我们就需要开始运行游戏了。为了确保一切正常运行,我们可以先检查一下是否有错误。
env.reset()
如果没有显示任何错误信息,就表示环境创建成功。接下来,我们需要定义一个变量 done
,用于判断游戏是否结束。
done = False
运行游戏
游戏的运行是通过 step
函数实现的,这个函数会在每一帧中进行一次操作。这里,我们需要定义一个动作来控制游戏中的按钮。对于 Sonic the Hedgehog 游戏来说,有12个按钮可供我们使用。
action = env.action_space.sample()
这里的 env.action_space.sample()
函数可以随机生成一个有效的按钮操作。不过我们先不使用这个函数,而是先用它来测试一下是否能使游戏运行起来。运行以下命令,您会看到一系列的数字,表示随机生成的按钮操作。
print(action)
当按钮操作准备就绪后,我们就可以开始游戏的运行了。
observation, reward, done, info = env.step(action)
设置动作
在游戏中,我们可以通过绘制画面来观察游戏的运行情况。使用 render()
函数可以实现这个功能。
env.render()
这样,您就可以看到 Sonic 在游戏中的动态了。注意,我们当前使用的是随机操作,所以 Sonic 只会随机移动。如果您想直接指定操作,而不是使用随机操作,可以将操作赋给 action
变量,如下所示。
action = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
这是一个示例操作,让 Sonic 向右移动。运行以下代码,您可以看到 Sonic 开始向右移动,并在完成三次操作后停止。
for _ in range(3):
observation, reward, done, info = env.step(action)
env.render()
观察游戏画面
如果我们想要获取游戏画面作为观察对象,可以使用 observation
变量来实现。打印出 observation
,您将得到游戏画面的形状信息。
print(observation.Shape)
在 Sonic 游戏中,游戏画面的形状为 2243203,其中 224 表示高度,320 表示宽度,3 表示颜色通道数。接下来,我们可以打印出其他与游戏相关的信息,比如回报值、游戏是否结束等等。
print(reward)
print(done)
print(info)
更改奖励机制
在游戏中,我们可以通过修改奖励机制来调整游戏的难度。在 Sonic 游戏中,默认的奖励机制是根据得分来计算的。我们可以通过修改 Scenario 文件来更改奖励机制。让我们打开 scenario 文件 retro/data/stable/SonicTheHedgehog-Genesis.json
,将奖励机制更改为 X。这个奖励机制基于 Sonic 的水平位置。我们将奖励设置为 1,这样 Sonic 将会向右移动,并获得相应的回报。
安装 Python Neat
下一步,我们将安装 Python Neat,用它来运行神经网络。安装命令如下。
pip install neat-python
安装完成后,我们可以开始使用神经网络了。
使用神经网络
使用神经网络是获取 Sonic 的操作指令的一种常用方式。神经网络会输出一个包含12个按钮的操作向量。您可以根据神经网络的输出来控制 Sonic 的移动。这里只是简单介绍了一下神经网络的使用方式,具体的实现过程将在下一集中展开。
结论
在本教程中,我们学习了如何使用 OpenAI Retro 和神经网络来玩转 Sonic the Hedgehog。从设置环境到运行游戏,再到使用神经网络进行操作,我们逐步掌握了整个过程。希望这个教程对您有所帮助,并能够激发您继续深入学习的兴趣。在下一集中,我们将学习如何使用 Python Neat 运行神经网络,并进一步优化 Sonic 的操作。请继续关注!