强化学习找金币游戏Gym环境测试调试问题

强化学习找金币游戏Gym环境测试调试问题

  下图为机器人在网格世界找金币的示意图。该网格世界一共有8个状态,其中状态6和状态8为死亡区域,状态7为金币区域。机器人的初始位置为网格世界中任意一个状态。机器人从初始状态出发寻找金币。机器人进行一次探索,进入死亡区域或找到金币,本次探测结束。
  机器人找到金币的回报为1,进入死亡区域回报为-1,机器人在区域1-5之间转换时,回报为0。
  目标是找到一个策略使得机器人不管处在什么状态(1-5)都能找到金币。
强化学习找金币游戏Gym环境测试调试问题_第1张图片
  在《深入浅出强化学习:原理入门》一书中给出找金币游戏的Gym开发环境代码,grid_mdp.py文件中。如下:https://github.com/gxnk/reinforcement-learning-code

为自己强化学习代码在Gym中进行环境配置

  1. 第⼀步,将我们⾃⼰的环境⽂件(grid_mdp.py) 拷⻉gym安装⽬录/gym/envs/classic_control⽂件夹中(拷⻉在此⽂件夹中是因为要使⽤rendering模块)。
  2. 第⼆步,打开该⽂件夹(第⼀步中的⽂件夹)下的_init_.py⽂件, 在⽂件末尾加⼊语句:
    from gym.envs.classic_control.grid_mdp import GridEnv
  3. 第三步,进⼊⽂件夹的gym安装⽬录/gym/gym/envs,打开该⽂件夹下 的_init_.py⽂件,添加代码如下。 第⼀个参数id就是你调⽤gym.make(‘id’)时的id,这个id可以随便选取,源代码取名GridWorld-v0。
register(
    id='GridWorld-v0',
    entry_point='gym.envs.classic_control:GridEnv',
    max_episode_steps=200,
    reward_threshold=100.0,
    )

调试及报错解决

  经过以上三步就完成了注册。下⾯通过在Anaconda Prompt终端环境中测试环境效果。代码如下:

python
env = gym.make('GridWorld-v0')
env.reset()
env.render()

  一开始报错如下:

>>> env=gym.make('GridWorld-v0')
WARN: Environment 'gym.envs.classic_control.grid_mdp.GridEnv'>' has deprecated methods. Compatibility code invoked.
Traceback (most recent call last):
  File "", line 1, in <module>
  File "/home/wx/gym/gym/envs/registration.py", line 163, in make
    return registry.make(id)
  File "/home/wx/gym/gym/envs/registration.py", line 121, in make
    patch_deprecated_methods(env)
  File "/home/wx/gym/gym/envs/registration.py", line 181, in patch_deprecated_methods
    env.seed  = env._seed
AttributeError: 'GridEnv' object has no attribute '_seed'

  解决方法先是查看了https://blog.csdn.net/ITealover/article/details/82768589。在grid_mdp.py文件类定义的开头加入_seed函数定义:

def _seed(self, seed=None):
        self.np_random, seed = seeding.np_random(seed)
        return [seed]

  输入env = gym.make(‘GridWorld-v0’)后出现以下警告可以忽略:
WARN: Environment ‘’ has deprecated methods ‘_step’ and ‘_reset’ rather than ‘step’ and ‘reset’. Compatibility code invoked. Set _gym_disable_underscore_compat = True to disable this behavior.
  接着报错如下:

Traceback (most recent call last):
  File "", line 1, in <module>
  File "/home/tofugan/gym/gym/core.py", line 275, in render
    return self.env.render(mode, **kwargs)
  File "/home/tofugan/gym/gym/envs/registration.py", line 187, in render
    return env._render(mode, close=False)
AttributeError: 'GridEnv' object has no attribute '_render'

  查看https://blog.csdn.net/wx_hu/article/details/79322719得知:“这是由于Python版本的原因,你将grid_mdp.py文件中的reset和step函数定义改为def _step => def step 这种形式就可以了”,亲测有效。
  最终运行结果如下:
强化学习找金币游戏Gym环境测试调试问题_第2张图片

你可能感兴趣的:(游戏,python,强化学习)