1. 程式人生 > >Reinforcement Learning policy evaluation實現以及OpenAI Gym介紹

Reinforcement Learning policy evaluation實現以及OpenAI Gym介紹

RL Policy Evaluation Python實現

根據UCL課程Lecture 3的4x4 grid求policy evaluation的方法,可以寫成如下實現:

states = [i for i in range(16)]
values = [0 for _ in range(16)]
actions = ["n", "e", "s", "w"]
ds_actions = {"n":-1, "e":1, "s":4, "w": -1}
gamma = 1.00

def nextState(s,a):
    next_state = s
    if (s%4 == 0 and
a == "w") or (s<4 and a == "n") or ((s+1)%4 == 0 and a == "e") or (s > 11 and a == "s"): pass else: ds = ds_actions[a] next_state = s + ds return next_state def rewardOf(s): return 0 if s in [0,15] else -1 def isTerminateState(s): return s in [0,15] def
getSuccessors(s):
successors = [] if isTerminateState(s): return successors for a in actions: next_state = nextState(s, a) # if s != next_state: successors.append(next_state) return successors def updateValue(s): sucessors = getSuccessors(s) newValue = 0
# values[s] num = 4 # len(successors) reward = rewardOf(s) for next_state in sucessors: newValue += 1.00/num * (reward + gamma * values[next_state]) return newValue def performOneIteration(): newValues = [0 for _ in range(16)] for s in states: newValues[s] = updateValue(s) global values values = newValues printValue(values) def printValue(v): for i in range(16): print('{0:>6.2f}'.format(v[i]),end = " ") if (i+1)%4 == 0: print("") print() def main(): max_iterate_times = 160 cur_iterate_times = 0 while cur_iterate_times <= max_iterate_times: print("Iterate No.{0}".format(cur_iterate_times)) performOneIteration() cur_iterate_times += 1 printValue(values) if __name__=='__main__': main()

OpenAI Gym

OpenAI Gym是一個用Python寫的強化學習的工具包【1】,包含一些關於強化學習的benchmark,比如Ataru 2600個遊戲,一些常用的介面【2】。強化學習假設有一個agent與environment進行溝通,每次agent進行一個action,agent就會接受environment的observation和Reward。RL就是要最大化reward,而且environment被POMDP進行建模。Gym主要關注於episodes的experience,比如下面的程式碼是一個episode,100個timestamp。每個episode必須以terminate state結束。下面的程式碼,就是從最開始的observation,然後選擇action,返回得到新的observation,reward,是否結束狀態,info表示環境的一些變化狀態資訊,用於debug,但是不能用於learning。下面的介紹更詳細。

ob0 = env.reset() # sample environment state, return first observation
a0 = agent.act(ob0) # agent chooses first action
ob1, rew0, done0, info0 = env.step(a0) # environment returns observation,
# reward, and boolean flag indicating if the episode is complete.
a1 = agent.act(ob1)
ob2, rew1, done1, info1 = env.step(a1)
...
a99 = agent.act(o99)
ob100, rew99, done99, info2 = env.step(a99)
# done99 == True  =>  terminal

對Environment進行了抽象,提供了抽象類,Agent有observation,reward,done這些介面,但是使用者可以自己實現step的函式來進行學習。

目前Gym裡面的Environment提供瞭如下的例子:經典的控制問題;Atari遊戲,Board game(比如圍棋);2D和3D的機器人。

Gym的安裝使用:【3】
安裝精簡版本:

git clone https://github.com/openai/gym
cd gym
pip install -e . # minimal install

安裝全部的版本:

pip install -e .[all]

執行environment:(OpenAI Gym裡面整合的)開啟以後發現很快就倒了,因為是隨機的action。

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action

Observation

通過呼叫env.step獲得observation(object,描述agent“看”到的representation),reward(float,通過action之後獲得的reward),done(boolean,是否結束當前episode),info(dict,用於debug的資訊)

下面的就是一個簡單的例子:根據observation,agent進行action,然後Environment收到action,然後反饋observation和reward給Agent。
這裡寫圖片描述

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        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

使用Environment的話,使用:

from gym import envs
print(envs.registry.all())

Spaces:

在描述action,observation的時候,使用含有Space的基類。

import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)

在Spaces描述中,有離散型(Discrete)和連續型(Box)。Box有env.observation_space.high和env.observation_space.low表示區間。

離散型用:spaces.Discrete(8)表示即可。

from gym import spaces
space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
assert space.contains(x)
assert space.n == 8

總結

強化學習中最主要的兩類物件是“個體”和“環境”,其次還有一些像“即時獎勵”、“收穫”、“狀態”、“行為”、“價值”、“策略”、“學習”、“控制”等概念。這些概念把個體和環境聯絡起來。通過理論學習,我們知道:

  1. 環境響應個體的行為。當個體執行一個行為時,它需要根據環境本身的動力學來更新環境,也包括更新個體狀態,同時給以個體一個反饋資訊:即時獎勵。
  2. 對於個體來說,它並不掌握整個環境資訊,它只能通過觀測來獲得其可以獲得的資訊,它能觀測到哪些資訊取決於問題的難度;同樣個體需要一定的行為與環境進行互動,哪些行為是被允許的,也要由個體和環境協商好。因此環境要確定個體的觀測空間和行為空間。
  3. 個體還應該有一個決策功能,該功能根據當前觀測來判斷下一時刻該採取什麼行為,也就是決策過程。
  4. 個體具有執行一個確定行為的功能。
  5. 智慧的個體應能從與環境的互動中學習到知識,進而在與環境互動時儘可能多的獲取獎勵,最終達到最大化累積獎勵的目的。
  6. 環境應該給個體設定一個(些)終止條件,即當個體處在這個狀態或這些狀態之一時,約定互動結束,即產生一個完整的Episode。隨後重新開始一個Episode或者退出互動。

gym庫的在設計環境以及個體的互動時基本上也是解決上述問題,但是它有它的規範和介面。gym庫的核心在檔案core.py裡,這裡定義了兩個最基本的類Env和Space。前者是所有環境類的基類,後者是所有空間類的基類。從Space基類衍生出幾個常用的空間類,其中最主要的是Discrete類和Box類。通過其init方法的引數以及其它方法的實現可以看出前者對應於一維離散空間,後者對應於多維連續空間。它們既可以應用在行為空間中,也可以用來描述狀態空間,具體怎麼用看問題本身。例如如果我要描述上篇提到的一個4*4的格子世界,其一共有16個狀態,每一個狀態只需要用一個數字來描述,這樣我可以把這個問題的狀態空間用Discrete(16)物件來描述就可以了。

個體主要通過環境的一下幾個方法進行互動:step,reset,render,close,seed,而這幾個都是公用方法,具體每一個方法實際呼叫的都是其內部方法:_step,_reset,_render,_close,_seed。此外這段描述還指出,如果你要編寫自己的環境類,也主要是重寫這些私有方法,同時指定該環境的觀測和行為空間。_close方法可以不用重寫。

_close方法可以不用重寫。

_step: 最核心的方法,定義環境的動力學,確定個體的下一個狀態、獎勵資訊、是否Episode終止,以及一些額外的資訊,按約定,額外的資訊不被允許用來訓練個體。

_reset: 開啟個體與環境互動前呼叫該方法,確定個體的初始狀態以及其他可能的一些初始化設定。

_seed: 設定一些隨機數的種子。

_render: 如果需要將個體與環境的互動以動畫的形式展示出來的話,需要重寫該方法。簡單的UI設計可以用gym包裝好了的pyglet方法來實現,這些方法在rendering.py檔案裡定義。具體使用這些方法進行UI繪製需要了解基本的OpenGL程式設計思想和介面[4]。

相關推薦

Reinforcement Learning policy evaluation實現以及OpenAI Gym介紹

RL Policy Evaluation Python實現 根據UCL課程Lecture 3的4x4 grid求policy evaluation的方法,可以寫成如下實現: states = [i for i in range(16)] val

[Reinforcement Learning] Policy Gradient Methods

上一篇博文的內容整理了我們如何去近似價值函式或者是動作價值函式的方法: \[ V_{\theta}(s)\approx V^{\pi}(s) \\ Q_{\theta}(s)\approx Q^{\pi}(s, a) \] 通過機器學習的方法我們一旦近似了價值函式或者是動作價值函式就可以通過一些策略進行控制,

Torch中的Reinforcement Learning的底層實現

強化學習已經成為大家關注的點,至少據我瞭解世界頂級名校CV的實驗室都在做這方面的工作。最近也在做相關的Research,正好遇到了在Torch中的RL實現,發現沒有什麼可以參考的中文資料,只能試著來解釋一下Torch中的RL實現。 原理篇 在Tor

Reinforcement Learning 的核心基礎概念及實現

2013 年倫敦的一家小公司 DeepMind 發表了一篇論文 Playing Atari with Deep Reinforcement Learning 。論文描述瞭如何教會電腦玩 Atari 2600 遊戲(僅僅讓電腦觀察遊戲的每一幀影象和接受遊戲分數的上升作為獎勵訊號)。結果很令人滿意,因為電腦比

Reinforcement Learning Q-learning 算法學習-2

action 結果 最小 clas gamma -1 文章 距離 blog 在閱讀了Q-learning 算法學習-1文章之後。 我分析了這個算法的本質。 算法本質個人分析。 1.算法的初始狀態是隨機的,所以每個初始狀態都是隨機的,所以每個初始狀態出現的概率都一樣的。如果訓

增強學習Reinforcement Learning經典算法梳理3:TD方法

經典算法 get tail info detail 地址 category details 方法 轉自:http://blog.csdn.net/songrotek/article/details/51382759 博客地址:http://blog.csdn.net/s

how to study reinforcement learning(answered by Sergio Valcarcel Macua on Quora)

work asi -a recommend practical man glob alua iteration link: https://www.quora.com/What-are-the-best-books-about-reinforcement-learning

Playing Atari with Deep Reinforcement Learning

distrib xiv 遊戲模擬器 video value 行動 avi 動作 ade 這是一篇論文,原地址在: https://arxiv.org/abs/1312.5602 我屬於邊看便翻譯,邊理解,將他們記錄在這裏: Abstract:   我們提出了第一個

看DeepMind如何用Reinforcement learning玩遊戲

有效 重新 sco 而且 會有 服務 最優解 count body 原文地址:http://www.infoq.com/cn/articles/atari-reinforcement-learning 原文作者:作者簡介 尹緒森,Intel實習生,熟悉並熱愛機器學習相關內容

單例模式的三種實現 以及各自的優缺點

屏蔽 () 模式 避免 sync code 實例化 pan single 單例模式:單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。這個類稱為單例類。 單例模式有三種:懶漢式單例,餓漢式單例,登記式單例。 1.

mysql數據庫在Linux和windows下免安裝實現以及框架開發碰到的問題

自動啟動 過程 root mil 是否 call 啟動頁 同時 ice 2017年7月23號下午5:20分,上周我根據自己的實際情況,總結了mysql數據庫在windows系統下和linux系統下免安裝版本的實現,以及在項目開發中遇到的數據庫報錯,今天整理出來,以供日後學習

srtlen實現以及與sizeof的比較

signed 對象 字節 常量 包含 長度 ons 頭文件 object 這裏僅為個人整理,大部分來自百科 一、strlen函數 strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第

ReactiveSwift源碼解析(十一) Atomic的代碼實現以及其中的Defer延遲、Posix互斥鎖、遞歸鎖

讀取 rec 用法 互斥鎖 ive defer mic 步驟 問題 本篇博客我們來聊一下ReactiveSwift中的原子性操作,在此內容上我們簡單的聊一下Posix互斥鎖以及遞歸鎖的概念以及使用場景。然後再聊一下Atomic的代碼實現。Atomic主要負責多線程下的原子操

32位匯編第四講,幹貨分享,匯編註入的實現,以及快速定位調用API的數量(OD查看)

pre 賦值 應該 檢測 src 代碼位置 spa sid 在哪裏 32位匯編第四講,幹貨分享,匯編註入的實現,以及快速定位調用API的數量(OD查看) 昨天,大家可能都看了代碼了,不知道昨天有沒有在匯編代碼的基礎上,實現註入計算器. 如果沒有,今天則會講解,不過建議把

在STM32上實現NTFS之5:GPT分區表的C語言實現(2)GPT實現以及統一方式讀取磁盤分區

tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了   上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實

Deep Reinforcement Learning

log min net pmi action algo 學習資源 blog adding Reinforcement Learning--David Silver http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.h

SpringMVC 資源國際化實現以及常見問題

text com lis frame ssi 三種 ltm manage 地址 資源國際化可以很方便的實現web項目語言的切換,解決了web項目按需顯示不同語言界面的問題. SpringMVC 的資源國際化基於JDK的java.util.ResourceBundle實現,

論文筆記之:Collaborative Deep Reinforcement Learning for Joint Object Search

region format es2017 join sid col str bottom respond Collaborative Deep Reinforcement Learning for Joint Object Search CVPR 2017 Motiva

openai gym 環境配置】

port all post vid body ogr com pro flow https://github.com/openai/gym/issues/384 https://davidsanwald.github.io/2016/11/13/building-tenso

python__系統 : 異步實現以及GIL

一句話 port types call 參數 import AR python pool 創建進程的方式中有個 callback ,也就是回調. 看代碼: from multiprocessing import Pool import time import os de