如题,本文主要介绍仿真环境Gym Retro的Python API接口 。 官网地址: https://retro.readthedocs.io/en/latest/python.html 本文环境配置:如何使用Python环境下的2D经典游戏仿真器(openai推
如题,本文主要介绍仿真环境Gym Retro的Python API接口 。
官网地址:
https://retro.readthedocs.io/en/latest/python.html
本文环境配置:如何使用Python环境下的2D经典游戏仿真器(openai推出的)retro库运行游戏"刺猬索尼克" (SonicTheHedgehog-Genesis)
==============================================
游戏状态的记录,示例代码:
import retroenv = retro.make(game='Airstriker-Genesis', record='.')
env.reset()
while True:
_obs, _rew, done, _info = env.step(env.action_space.sample())
if done:
break
运行后将游戏的过程保存为文件:Airstriker-Genesis-Level1-000000.bk2
游戏过程的记录只需要在环境生成函数 retro.make 中指定 record 参数即可。
注意:
游戏过程文件只保存了游戏开始时的状态及过程中的所有按键,所以要对过程记录文件进行游戏回放的话我还是需要有相应的游戏ROM文件的。
游戏记录的回放,示例代码:
import retromovie = retro.Movie('Airstriker-Genesis-Level1-000000.bk2')
movie.step()
env = retro.make(
game=movie.get_game(),
state=None,
# bk2s can contain any button presses, so allow everything
use_restricted_actions=retro.Actions.ALL,
players=movie.players,
obs_type=retro.Observations.IMAGE
)
env.initial_state = movie.get_state()
env.reset()
while movie.step():
keys = []
for p in range(movie.players):
for i in range(env.num_buttons):
keys.append(movie.get_key(i, p))
env.render()
observation, reward, done, info = env.step(keys)
print(keys)
print(observation)
print(reward)
print(done)
print(info)
由前文可知,
use_restricted_actions=retro.Actions.ALL 代表动作为 MultiBinary 类型,因此执行的动作形式大致为:
[True, False, False, False, False, False, True, False, True, False, False, False]
这个类型的。
其中,代码:
for p in range(movie.players):for i in range(env.num_buttons):
keys.append(movie.get_key(i, p))
就是从记录文件中取出当前步骤中不同player的动作(MultiBinary 类型),该动作是分别判断MultiBinary 类型不同位置对应的动作(env.num_buttons)是否被选择,具体代码为:
movie.get_key(i, p)