1. 程式人生 > >使用gym模擬強化學習環境

使用gym模擬強化學習環境

Classic control

CartPole
環境描述:運載體無摩擦地支撐杆子。
動作:2個動作:施加-1和+1分別對應向左向右推動運載體
狀態:4個,x:位置;x_dot:移動速度, theta:角度 theta_dot:移動角速度
獎勵:每一步杆子保持垂直就可以獲得+1獎勵
終止條件:杆子的搖擺幅度超過了垂直方向15度或運載體偏移初始位置超過2.4個單位
這裡寫圖片描述
使用gym庫的API獲取動作個數和狀態個數:

import gym

env = gym.make('CartPole-v0').unwrapped
print(env.action_space)  # 輸出動作資訊
print(env.action_space.n) # 輸出動作個數 print(env.observation_space) # 檢視狀態空間 print(env.observation_space.shape[0]) # 輸出狀態個數 print(env.observation_space.high) # 檢視狀態的最高值 print(env.observation_space.low) # 檢視狀態的最低值

輸出:

Discrete(2)
2
Box(4,)
4
[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]
[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]

視覺化環境:

import gym
import time
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    time.sleep(0.1)
    for t in range(1000):
        env.render()  # 環境展示
        time.sleep(0.1)
        print(observation)
        action = env.action_space.sample()  # 隨機從動作空間中選取動作
observation, reward, done, info = env.step(action) # 根據動作獲取下一步的資訊 if done: print("Episode finished after {} timesteps".format(t+1)) break

MountainCar
環境描述:car的軌跡是一維的,定位在兩山之間,目標是爬上右邊的山頂。可是car的發動機不足以一次性攀登到山頂,唯一的方式是car來回擺動增加動量。
動作:有3個動作:向前、不動和向後
狀態:2個,位置position和速度velocity。position的值在最低點處為-0.5左右,左邊的坡頂為-1.2,右邊與之相對應的高度位置為0,小黃旗位置為0.6。
獎勵:每次移動都會得到-1的獎勵,直到車開到黃旗位置
這裡寫圖片描述