本系列文章的目的是要實現乙個可以自動尋找迷宮路徑的機械人,我們將會使用強化學習的方法訓練乙個機械人,它最終能夠在乙個迷宮中找到正確的路徑,最終到達出口,而不會掉到坑里。我們要使用到的強化學習方法為q learning,它是最簡單的一種強化學習方法。本系列將包含兩篇文章。
在這第一篇文章中,我們將首先針對要實現的專案進行乙個描述,來提出我們的問題,然後針對q learning做乙個詳細的解釋,而在第二篇文章,我們將實際操練起來,實現q learning演算法,從而訓練出乙個可以自動尋路的機械人。
1. 專案描述
假設我們有下圖這樣乙個迷宮,在迷宮中,我們的機械人是那個紅色的圖示,s代表迷宮的入口,迷宮中有一些坑(圖中的h - hole),當機械人掉下去以後就會摔壞,需要重新開始遊戲,圖中的f就是普通的地面,機械人可以正常的站在上邊並從上邊通過,我們的目的是,讓機械人能夠自動的尋找一條不掉到坑里的路徑,能夠到達迷宮出口g位置。
幸運的是,python裡邊有乙個現成的庫已經幫我們把迷宮遊戲做好了,我們將專注於實現乙個強化學習機械人來玩這個迷宮遊戲。
gym庫就是幫我們提供迷宮遊戲的庫,它是乙個專門供人們學習強化學習的庫,裡邊帶來很多經典的遊戲或問題,可以通過強化學習解決,我們用到的迷宮就是其中之一,大家可以在 這個鏈結找到迷宮遊戲的描述。另外,確保我們的環境中安裝了gym庫。
pip install gym
2. q learning
q learning是一種model-free的強化學習方法,所謂的model-free指的就是ai agent(也就是我們的機械人)並不知道迷宮的模型是什麼,不會對環境進行任何建模,而它的行動都是基於它觀察到的狀態(state),以及它通過不斷的學習所學習到的針對這種狀態如何更好的執行動作(action)的知識。
2.1 基本概念
q learning中有乙個重要的概念,它是reward的,你可以這麼想象,有乙個裁判以上帝視角在看機械人在迷宮中的不斷的嘗試,機械人每走一步,他會給這一行動打分,然後告知機械人這個分數是多少,機械人無需要知道環境(迷宮)是什麼樣子的,根據不停的嘗試以及對應拿到的分數,就可以學習推理出最佳的路徑,即避免掉到坑里,並順利抵達目的地。
episode - 嘗試
那麼很容易理解,機械人做每一次嘗試走出迷宮,都會有乙個結果,要不是掉到坑里,要不就是成功走出去,無論是掉坑里或者成功走出去,這一次嘗試就結束了(成功或失敗),這樣的一次嘗試在q larning中用episode來稱呼。
step - 步驟
按照前邊我們所說,有乙個裁判在**著機械人的每一次嘗試,在每乙個episode中,機械人會根據當前機械人在環境中的狀態來決定怎麼走下一步,做出決定並實施之後,裁判會根據這一步是不是完成了目標來打分(reward),機械人到達了目的地,裁判打1分,機械人如果掉到了坑里或還沒有到達目的地,裁判打0分,,此時因為機械人走了一步,那麼它在環境中的狀態發生了變化,也就是產生了新的狀態,然後繼續根據新的狀態來決定下一步怎麼走,反覆迴圈,一直到本次嘗試結束(掉坑里或者走出去)。就是反覆的重複下圖描述的動作。
目標q learning的目標就是讓機械人在一次嘗試中得到總打分(每一步的打分累加)最高,針對我們這個專案,如果能夠在結束遊戲的時候的得分為1則意味著機械人成功的走出去了,我們對是否成功訓練出乙個會走迷宮的機械人的評判標準就是,在100次連續的嘗試中,沒有一次失敗,換句話說,100次連續嘗試的得分平均值為1,最大值,最小值也為1。
2.2 q table
讀到這裡,你可能已經想到q learning的核心在於,機械人根據現有狀態來決定下一步怎麼走的的邏輯,對了,這就是本演算法的核心 q table。
通常,q table長下邊這個樣子,每乙個狀態(state),對應於該狀態下可以執行的所有行動(action)都會有乙個打分(q value),代表其是否可以更好地完成目標,而機械人在某乙個狀態時會選擇該狀態下打分最高的行動來執行。
而訓練的過程就是通過q learning演算法公式來更新t table中每一格中的打分(q value),q learning演算法公式為:
很簡單是不是,哈哈,當你看到我們用**實現以後就會覺得簡單啦。
具體到我們的專案來說,我們的q table長這個樣子:
你可能要問我,為什麼action的順序是left, down, right, up,其實這不重要,對於機械人來說它並不知道上下左右,對於它來說是0,1,2,3,在它眼裡q table是這樣的,它只知道執行0,1,2,3動作對應的打分而已。
那我們為什麼還要提left,down,right,up呢,這個是便於我們學習理解,而這個順序,0對應left,1對應down,2對應right,3對應up,從gym的源**中是可以查到的。
2.3 演算法描述
這幅圖中每一次迭代就是我們上文中提到的每一次嘗試,即episode。那麼什麼時候終止訓練呢,這個就是我們2.1章節提到的目標,我們做任何一件事情的時候們都會設定乙個目標,當達到目標以後,我們就認為事情做成功了,在這個專案中,我們的目標就是 100次連續嘗試的得分平均值為1,最大值,最小值也為1。
2.4 探索和利用
我們的初始q value怎麼來呢?我們可以用0來填充q table,也可以像其他機器學習演算法一樣,我們可以用隨機值來初始化q table。有了初始值以後,我們需要機械人在不停的嘗試中掌握規律,因為初始的q table是隨機的或者都是0,q value沒有任何意義,也就是說機械人無論如何也不會通過這樣的 q table走出迷宮的,但是在機械人學習規律的過程中,如果它能成功的走出去,哪怕只有幾次,那這樣的走出去的經驗就能夠被學習下來,然後通過慢慢的改進,最終機械人的效能就能夠達到我們的目標。
那麼如何讓機械人第一次成功走出去呢?這就是從探索(exploration)到利用(exploitation)的過程。我們會建立乙個epsilon變數,利用它來控制,探索和利用的比例,像下圖一樣,最開始,當機械人沒有任何經驗或者經驗教少的時候,我們傾向於讓機械人去隨機的探索它所處的環境,簡單來講就是機械人可以隨機的去行動,然後獲得打分,然後更新q value,而epsilon變數隨著學習的深入,會逐漸減小,當epsilon減小時,意味著機械人從探索學習轉向利用已有的學習經驗,最終到完全利用學習到的經驗能達到我們的目標。
3. 總結
自動安裝Python第三方庫
但是不管如何,開啟excel,獲取某個sheet的單元格內容,python無疑是最方便的語言工具,很快的,我就知道了相關的第三方庫 openpyxl,官網 安裝庫有好幾種方式 a 使用pip或是easy install,b 使用庫中的python setup.py也是非常方便的。首選使用a 方式。但...
PyThon第三方庫
本文 自 戀花蝶的部落格 今天公司停電,沒上班。跑上來更新個部落格,跟大家分享一下我常用的幾個第三方 python 庫。python 語言之所以能夠如此流行,除了本身內建許多程式庫來保障快速開發之外,目不睱接的第三方庫也是一大主因。結合我目前的工作 網遊開發 我常用的幾個第三方庫如下 wxpytho...
python 第三方庫
requests 模組 具體詳見 requests 是用python語言編寫的第三方庫,基於 urllib,採用 apache2 licensed 開源協議的 http 庫。它比 urllib 更加方便,完全滿足 http 測試需求,多用於介面測試 常用介面 1.requests.request m...