zoukankan      html  css  js  c++  java
  • openAI的仿真环境Gym Retro的Python API接口(续1)—— 游戏过程记录及回放

    如题,本文主要介绍仿真环境Gym Retro的Python API接口 。

    官网地址:

    https://retro.readthedocs.io/en/latest/python.html

    本文环境配置:如何使用Python环境下的2D经典游戏仿真器(openai推出的)retro库运行游戏"刺猬索尼克" (SonicTheHedgehog-Genesis)

    ==============================================

    游戏状态的记录,示例代码:

    import retro
    
    env = 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 retro
    
    movie = 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)
    
    
    
    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    【WPF】给下拉列表ComboBox绑定数据
    【C#】POST请求参数含中文,服务器解析得到乱码
    CentOS下搭建SVN服务器
    MySQL之ALTER
    深入PHP内核之ZVAL
    关于zend_parse_parameters函数
    PHP数组
    shell中比较字符串大小,>和<前需要加上进行转义,否则会输出到文件了
    awk编程基础
    【读书笔记】《Python_Cookbook3》第一章:数据结构和算法
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/15259823.html
Copyright © 2011-2022 走看看