【Python】安装配置gym
gym是python中的一个强化学习环境,想要完整配置并跑起来坑还是比较多的。
下面记录一下Windows完整安装过程,Linux下过程基本类似。
1. 执行pip install gym直接安装的是0.26.2版本,网上常见的代码无法兼容,这里安装0.25.2版,并且安装对应的pygame。
执行:
pip install gym==0.25.2 pip install pygame==2.1.2
完成后常见的cartpole和mountaincar就可以执行了,下面给个显示例子并打印出所有可模拟的环境:
import gym from gym import envs import warnings import time warnings.filterwarnings("ignore") for env in envs.registry.all(): print(env.id) env = gym.make("CartPole-v1") #action_space_dim = env.action_space.n for i in range(3000): state = env.reset() while True: env.render() action = env.action_space.sample() next_state, reward, done, _ = env.step(action) if done: break
结果如下:
默认支持的环境还是比较少的,如果想要更多的环境,如atari,box2d或者mujoco需要做下面的操作。
2. 执行:
pip install swig
pip install gym[all]
3. 完成后可能会出现环境缺少ale_c.dll文件问题,这里给一个下载链接,下载后拷贝到C:\Users\xxx\AppData\Local\Programs\Python\Python37\Lib\site-packages\atari_py\ale_interface目录下。Linux一般没有这个问题,Windows也可能没有这个问题,没有遇到可以忽略。
4. 完成后执行下面命令下载Atari游戏Rom,执行AutoROM时有时可能会卡:
pip install autorom pip install --upgrade AutoROM AutoROM --accept-license
完成后这个C:\Users\xxx\AppData\Local\Programs\Python\Python37\Lib\site-packages\AutoROM\roms目录下应该有很多bin文件。
5. 显示atari环境代码:
import gym from gym import envs import warnings import time warnings.filterwarnings("ignore") env = gym.make('Pong-v0', render_mode='human') obs = env.reset() for i in range(1000): action = env.action_space.sample() obs, reward, done, info = env.step(action) time.sleep(0.01) env.close()
结果如下:
6. 安装mujoco相对比较会更坑一些。首先这里下载mujoco210版本,并且将文件拷贝到C:\Users\xxx\.mujoco\目录,形成C:\Users\xxx\.mujoco\mujoco210目录,并且配置Path环境变量到bin目录,重启电脑。
7. 然后安装mujoco_py,如果提前安装了,先执行pip uninstall mujoco_py删除掉。然后这里下载,源码安装。
安装前先搜到源码中dist.ext_modules部分,并改为下面代码:
dist.ext_modules = cythonize([self.extension],compiler_directives={'legacy_implicit_noexcept': True})
执行python setup.py install安装,安装完成后再执行pip uninstall mujoco_py,然后就可以了,至于为什么最后要再执行uninstall命令,我也不知道,反正这样就可以了。
8. 显示mujoco的测试代码:
import gym env = gym.make('Humanoid-v4') from gym import envs print(envs.registry.all()) # print the available environments print(env.action_space) print(env.observation_space) print(env.observation_space.high) print(env.observation_space.low) for i_episode in range(200): observation = env.reset() for t in range(100): env.render() print(observation) action = env.action_space.sample() # take a random action observation, reward, done, info = env.step(action) if done: print("Episode finished after {} timesteps".format(t+1)) break env.close()
结果如下:
9. 最后给出一些常见的gym环境,可能会有一些有版本问题,不过错误时有提示:
-
经典控制 Classic Control:
- Acrobot-v1:双摆杆倒立摆问题。
- CartPole-v1:杆车平衡问题。
- MountainCar-v0:小车爬山问题。
- Pendulum-v0:摆杆倒立问题。
- MountainCarContinuous-v0:连续动作的小车爬山问题。
-
Box2D:
- LunarLander-v2:着陆舱着陆问题。
- LunarLanderContinuous-v2:连续动作的着陆舱着陆问题。
- BipedalWalker-v3:双足行走机器人问题。
- BipedalWalkerHardcore-v3:更困难版本的双足行走机器人问题。
- CarRacing-v0:赛车游戏。
-
Atari:
- Pong-v0:乒乓球游戏 Pong。
- Breakout-v0:打砖块游戏 Breakout。
- SpaceInvaders-v0:太空侵略者游戏 Space Invaders。
- MsPacman-v0:吃豆人游戏 Ms. Pacman。
- Enduro-v0:汽车竞赛游戏 Enduro。
- BeamRider-v0:射击游戏 Beam Rider。
-
MuJoCo:
- HalfCheetah-v3:半身豹机器人问题。
- Hopper-v3:单腿机器人问题。
- Walker2d-v3:双足行走机器人问题。
- Ant-v3:蚂蚁机器人问题。
- Humanoid-v3:人形机器人问题。
- HumanoidStandup-v2:人形机器人站立问题。