OpenAi 健身房:太多变数无法解开

问题描述 投票:0回答:3

我在 google collab 中为 Cartapole-v0 创建一个模型,但是在训练它时我遇到了太多变量来解包问题

pip install stable-baselines3[extra]
!apt-get install x11-utils > /dev/null 2>&1
!pip install pyglet > /dev/null 2>&1
!apt-get install -y xvfb python-opengl > /dev/null 2>&1
!pip install gym pyvirtualdisplay > /dev/null 2>&1

import tensorflow as tf
import os
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.evaluation import evaluate_policy

from pyvirtualdisplay import Display
display = Display(visible=0, size=(400, 300))
display.start()

environment_name = 'CartPole-v0'
env = gym.make(environment_name)

episodes = 5
for episode in range(1, episodes+1):
  state = env.reset()
  done = False
  score = 0

  while not done:
    prev_screen = env.render(mode='rgb_array')
    plt.imshow(prev_screen)
    action = env.action_space.sample()
    n_state, reward , done , info = env.step(action)
    score += reward
  print('Episode:{} Score:{}'.format(episode, score))
env.close()

env.step(1)

log_path = os.path.join('Training','Logs')

env = gym.make(environment_name)
env = DummyVecEnv([lambda: env])
model = PPO('MlpPolicy', env, verbose = 1 , tensorboard_log = log_path)

model.learn(total_timesteps=20000)

最后一行出现错误。

python machine-learning reinforcement-learning openai-gym
3个回答
0
投票

为了将来的证明,您应该注意,Gym 的所有开发都已转移到 Gymnasium。阅读更多这里

我做了以下更改以使其部分正常工作。

将环境更改为 CartPole v1,因为 v0 已过时

environment_name = 'CartPole-v1'

从环境中获得
step()
后,请勿调用
done = True
。那是UB。

#env.step(1)

更改渲染代码

这适用于

gym==0.23.1

prev_screen = env.render(mode='rgb_array')
plt.imshow(prev_screen)
plt.show()

这适用于

gym==0.26.2

env = gym.make(environment_name, render_mode='rgb_array')

在我的系统上运行的最终代码


import tensorflow as tf
import os
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.evaluation import evaluate_policy

from pyvirtualdisplay import Display

def main():
    display = Display(visible=0, size=(400, 300))
    display.start()

    environment_name = 'CartPole-v1'
    env = gym.make(environment_name)

    episodes = 5
    for episode in range(1, episodes+1):
      state = env.reset()
      done = False
      score = 0

      while not done:
        action = env.action_space.sample()
        n_state, reward , done , info = env.step(action)
        score += reward
        prev_screen = env.render(mode='rgb_array')
        plt.imshow(prev_screen)
        plt.show()
      print('Episode:{} Score:{}'.format(episode, score))
    env.close()

if __name__=="__main__":
    main()

请注意,我不知道您在

env.close()
之后想要做什么,并且我从这些行中得到了一些错误,因此您需要先解释一下。之后我会编辑我的问题。我希望这对你有帮助。

注意有这样的警告:

用户警告:您提供了 OpenAI Gym 环境。我们强烈建议过渡到体育馆环境。 Stable-Baselines3 会自动将您的环境包装在兼容层中,这可能会导致问题。

可能与这些行的错误有关

env = gym.make(environment_name)
env = DummyVecEnv([lambda: env])
model = PPO('MlpPolicy', env, verbose = 1 , tensorboard_log = log_path)

0
投票

根据您使用的

gym
gymnasium
的版本,代理-环境循环可能会有所不同。它声明需要解压太多值的原因是由于较新版本的
gym
gymnasium
一般使用:

n_state, reward, done, truncated, info = env.step(action)

因此解压 5 个值而不是 4 个值。

truncated
布尔值表示环境是否已结束,但当结束环境的原因不是因为代理而是因为环境时应用。这可能是代理进入无效/错误的游戏状态或超出环境中的时间/步骤限制。调整您的
env.step(action)
以解压 5 个值,或将
gym
(以及环境)降级到支持 4 个值的版本。


0
投票

我在 YouTube 教程中找到了这段相同的代码,并在最后一行代码中遇到了相同的错误;

model.learn(total_timesteps=20000)

对我有用的解决方案非常简单;使用新的

gym
库代替
gymnasium
。我认为该错误是由
gym
库中的一些已弃用的元素引起的,这些元素无法与新的
stable_baselines3
正常工作。

我已在下面添加了我的代码;请注意,这仅包括运行模型学习所需的代码行。这对我有用,没有任何错误或警告。

import os
import gymnasium
from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv

env_name = 'CartPole-v1'
log_path = os.path.join('Training', 'Logs')

env = gymnasium.make(env_name)
env = DummyVecEnv([lambda: env])  # Wrapping the environment -> vectorizing the environment
model = PPO('MlpPolicy', env, verbose=1, tensorboard_log=log_path)  # Creating the PPO model

model.learn(total_timesteps=20000)

另外,记得使用

CartPole-v1
而不是
CartPole-v0
;体育馆图书馆仍然会识别
CartPole-v0
,但最好更新到新版本的CartPole问题。

此外,一旦更新为

gymnasium
,在环境中执行步骤的代码必须重写如下。

n_state, reward, terminated, truncated, info = env.step(action) 
done = terminated | truncated 
© www.soinside.com 2019 - 2024. All rights reserved.