python 笔记 :Gym库 (官方文档笔记)
????????Gym是一個開發和比較強化學習算法的工具箱。它不依賴強化學習算法結構,并且可以使用很多方法對它進行調用。
1 Gym環境
????????這是一個讓某種小游戲運行的簡單例子。
????????這將運行 CartPole-v0 環境實例 1000 個時間步,在每次迭代的時候都會將環境初始化(env.render)。運行之后你將會看到一個經典的推車桿問題
import gym env = gym.make('CartPole-v0') env.reset() for _ in range(100):env.render()#提供環境env.step(env.action_space.sample()) #env.action_space.sample() 會在動作空間中隨機選擇一個#env.step會順著這個動作進入下一個狀態 env.close()1.1 動作是如何和環境交互的
與環境交互過程中,每一步環境都會返回四個值
| observation?(object) | 一個特定的環境對象,代表了你從環境中得到的觀測值。 例如從攝像頭獲得的像素數據,機器人的關節角度和關節速度,或者棋盤游戲的棋盤。 |
| reward?(float) | 由于之前采取的動作所獲得的獎勵總和。 |
| done?(boolean) | 決定是否重置環境,大多數,但不是所有的任務都被定義好了什么情況該結束這個回合。(舉個例子,前面所展示的這個倒立擺的小車離開地太遠了就結束了這個回合) |
| info?(dict) | 調試過程中將會產生的有用信息,有時它會對我們的強化學習學習過程很有用 |
程序的開始被叫做reset(),它會返回一個初始的觀測值,因此像比于前面的代碼,一個改良版的方式編寫代碼如下所示:
import gym env = gym.make('CartPole-v1') for i_episode in range(2):observation = env.reset()#初始話環境for t in range(100):env.render()#提供環境action = env.action_space.sample()#在可行的動作空間中隨機選擇一個observation, reward, done, info = env.step(action)#順著這個動作進入下一個狀態print(observation, reward, done, info)if done:print("Episode finished after {} timesteps".format(t+1))break env.close()''' [-0.02344513 -0.17659043 0.0043245 0.27116755] 1.0 False {} [-0.02697694 -0.37177384 0.00974786 0.5652113 ] 1.0 False {} [-0.03441242 -0.56703115 0.02105208 0.8609492 ] 1.0 False {} [-0.04575304 -0.7624334 0.03827107 1.1601765 ] 1.0 False {} [-0.06100171 -0.9580325 0.0614746 1.4646091 ] 1.0 False {} [-0.08016236 -1.1538512 0.09076678 1.7758446 ] 1.0 False {} [-0.10323939 -0.9598616 0.12628368 1.5127068 ] 1.0 False {} [-0.12243662 -1.1562663 0.1565378 1.8419967 ] 1.0 False {} [-0.14556195 -0.9631801 0.19337773 1.6017431 ] 1.0 False {} [-0.16482554 -0.7708017 0.2254126 1.3750535 ] 1.0 True {} Episode finished after 10 timesteps '''2 空間
????????在上面的例子中,我們一直在從環境的動作空間中采樣隨機動作。
【”action = env.action_space.sample()’】
????????每個環境都帶有一個 動作空間和一個觀察空間。 這些屬性屬于 Space 類型,它們描述了有效操作和觀察的格式:
import gym env = gym.make('CartPole-v1') print(env.action_space) print(env.observation_space)''' Discrete(2) Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32) '''?????????離散空間允許固定范圍的非負數,在'CartPole-v1'中,有效動作是 0 或 1。
print(env.action_space.start) #0 #離散動作空間的開始值print(env.action_space.n) #2 #離散動作空間中一共有幾個值????????框Box空間表示一個 n 維框,因此有效觀察值將是一個包含 n個數字的數組。
???????? 我們還可以檢查 Box 的邊界:
print(env.observation_space.low) print(env.observation_space.high) ''' [-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38] [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38] '''?Box 和 Discrete 是最常見的空間。 您可以從 它們中采樣或檢查某些東西是否屬于它:
from gym import spaces space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7} x = space.sample() print(x) print(space.contains(x)) ''' 5 True '''
? ??
?參考資料?Gym (openai.com)
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的python 笔记 :Gym库 (官方文档笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统笔记:决策树回归树
- 下一篇: Gym 环境汇总 (无mojoco版)