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:人形機器人站立問題。