使用gym模擬強化學習環境
阿新 • • 發佈:2019-02-06
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的獎勵,直到車開到黃旗位置