NameError:未定义名称“ base” OpenAI Gym

mid*_*n98 6 reinforcement-learning openai-gym

[注意我正在使用xvfb-run -s "-screen 0 1400x900x24" jupyter notebook]

我尝试在OpenAI Gym中运行一组基本命令

import gym
env = gym.make("CartPole-v0")
obs = env.reset()
env.render()
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

...

~/Downloads/yes/lib/python3.7/site-packages/pyglet/gl/__init__.py in <module>()
    225     else:
    226         from .carbon import CarbonConfig as Config
--> 227 del base
    228 
    229 # XXX remove

NameError: name 'base' is not defined
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决此问题?

dav*_*ugh 8

解决您的问题需要正确组合系统依赖项和 python 依赖项。将此代码粘贴到 Colab 中的一个单元格中并运行它以安装所有依赖项(注意所使用的特定版本号)。

%%bash

# install required system dependencies
apt-get install -y xvfb x11-utils

# install required python dependencies (might need to install additional gym extras depending)
pip install gym[box2d]==0.17.* pyvirtualdisplay==0.2.* PyOpenGL==3.1.* PyOpenGL-accelerate==3.1.*
Run Code Online (Sandbox Code Playgroud)

最后一步是运行以下代码块以正确初始化虚拟显示器。下面的代码在后台创建了一个虚拟显示器,您的 Gym Envs 可以连接到该显示器进行渲染。您可以随意调整虚拟缓冲区的大小,但visible=False在使用 Xvfb 时必须进行设置。

此代码只需在每个会话中运行一次即可启动显示。

import pyvirtualdisplay


_display = pyvirtualdisplay.Display(visible=False,  # use False with Xvfb
                                    size=(1400, 900))
_ = _display.start()
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看以下博客文章

  • 运行命令后,我得到了“已成功安装 EasyProcess-0.3 PyOpenGL-accelerate-3.1.5 box2d-py-2.3.8 pyvirtualdisplay-0.2.5”。但是仍然收到“NameError:名称'base'未定义” (2认同)

Fra*_*ING 6

这对我来说是工作。(我刚刚遇到了同样的问题)

git clone https://github.com/openai/gym.git
cd gym
pip install -e .
Run Code Online (Sandbox Code Playgroud)

你也可以尝试一下,

conda install -c conda-forge pyglet
# pyglet==1.2.4?
Run Code Online (Sandbox Code Playgroud)

之前我用pip安装过gym,也许就是这个问题。


小智 -1

您可以从命令行运行该算法:

python -m spinup.run ppo --exp_name CartPole --env CartPole-v0
Run Code Online (Sandbox Code Playgroud)

在这里,ppo 是最接近的策略优化算法,但您可以运行任何您想要的算法。