官术网_书友最值得收藏!

2.1 剖析智能體

正如上章所述,RL的世界中包含很多實體:

  • 智能體:主動行動的人或物。實際上,智能體只是實現(xiàn)了某些策略的代碼片段而已。這個策略根據(jù)觀察決定每一個時間點執(zhí)行什么動作。
  • 環(huán)境:某些世界的模型,它在智能體外部,負(fù)責(zé)提供觀察并給予獎勵。而且環(huán)境會根據(jù)智能體的動作改變自己的狀態(tài)。

我們來探究一下如何在簡單的情景下,用Python實現(xiàn)它們。先定義一個環(huán)境,限定交互步數(shù),并且不管智能體執(zhí)行任何動作,它都給智能體返回隨機(jī)獎勵。這種場景不是很有用,卻能讓我們聚焦于環(huán)境和智能體類中的某些方法。先從環(huán)境開始吧:

036-01

前面的代碼展示了環(huán)境初始化內(nèi)部狀態(tài)。在示例場景下,狀態(tài)就是一個計數(shù)器,記錄智能體還能和環(huán)境交互的步數(shù)。

037-01

get_observation()方法能給智能體返回當(dāng)前環(huán)境的觀察。它通常被實現(xiàn)為有關(guān)環(huán)境內(nèi)部狀態(tài)的某些函數(shù)。不知你是否對-> List[float]感到好奇,它其實是Python的類型注解,是在Python 3.5版本引入的。在https://docs.python.org/3/library/typing.html的文檔中可以查看更多內(nèi)容。在示例中,觀察向量總是0,因為環(huán)境根本就沒有內(nèi)部狀態(tài)。

037-02

get_action()方法允許智能體查詢自己能執(zhí)行的動作集。通常,智能體能執(zhí)行的動作集不會隨著時間變化,但是當(dāng)環(huán)境發(fā)生變化的時候,某些動作可能會變得無法執(zhí)行(例如在井字棋中,不是所有的位置能都執(zhí)行所有動作)。而在我們這極其簡單的例子中,智能體只能執(zhí)行兩個動作,它們被編碼成了整數(shù)0和1。

037-03

前面的方法給予智能體片段結(jié)束的信號。就像第1章中所述,環(huán)境–智能體的交互序列被分成一系列步驟,稱為片段。片段可以是有限的,比如國際象棋,也可以是無限的,比如旅行者2號的任務(wù)(一個著名的太空探測器,發(fā)射于40年前,目前已經(jīng)探索到太陽系外了)。為了囊括兩種場景,環(huán)境提供了一種檢測片段何時結(jié)束的方法,通知智能體它無法再繼續(xù)交互了。

037-04

action()方法是環(huán)境的核心功能。它做兩件事——處理智能體的動作以及返回該動作的獎勵。在示例中,獎勵是隨機(jī)的,而動作被丟棄了。另外,該方法還會更新已經(jīng)執(zhí)行的步數(shù),并拒絕繼續(xù)執(zhí)行已結(jié)束的片段。

現(xiàn)在該來看一下智能體的部分了,它更簡單,只包含兩個方法:構(gòu)造函數(shù)以及在環(huán)境中執(zhí)行一步的方法:

037-05

在構(gòu)造函數(shù)中,我們初始化計數(shù)器,該計數(shù)器用來保存片段中智能體累積的總獎勵:

037-06

step函數(shù)接受環(huán)境實例作為參數(shù),并允許智能體執(zhí)行下列操作:

  • 觀察環(huán)境。
  • 基于觀察決定動作。
  • 向環(huán)境提交動作。
  • 獲取當(dāng)前步驟的獎勵。

對于我們的例子,智能體比較愚笨,它在決定執(zhí)行什么動作的時候會忽視得到的觀察。取而代之的是,隨機(jī)選擇動作。最后還剩下膠水代碼,它創(chuàng)建兩個類并執(zhí)行一次片段:

038-01

你可以在本書的GitHub庫中找到上述代碼,就在https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On- Second-Edition的Chapter02/01_agent_anatomy.py文件中。它沒有外部依賴,只要稍微現(xiàn)代一點的Python版本就能運行。多次運行,智能體得到的獎勵總數(shù)會是不同的。

前面那簡單的代碼就展示了RL模型的重要的基本概念。環(huán)境可以是極其復(fù)雜的物理模型,智能體也可以輕易地變成一個實現(xiàn)了最新RL算法的大型神經(jīng)網(wǎng)絡(luò)(NN),但是基本思想還是一致的——每一步,智能體都會從環(huán)境中得到觀察,進(jìn)行一番計算,最后選擇要執(zhí)行的動作。這個動作的結(jié)果就是獎勵和新的觀察。

你可能會問,如果基本思想是一樣的,為什么還要從頭開始實現(xiàn)呢?是否有人已經(jīng)將其實現(xiàn)為一個通用庫了?答案是肯定的,這樣的框架已經(jīng)存在了,但是在花時間討論它們前,先把你的開發(fā)環(huán)境準(zhǔn)備好吧。

主站蜘蛛池模板: 宁乡县| 穆棱市| 台前县| 弋阳县| 竹北市| 剑阁县| 东兰县| 裕民县| 沐川县| 当涂县| 成都市| 平舆县| 福州市| 建水县| 大庆市| 广平县| 德昌县| 徐汇区| 县级市| 新兴县| 灵璧县| 彭阳县| 梁山县| 遵义市| 固安县| 灯塔市| 巍山| 贵州省| 云浮市| 阳朔县| 成都市| 曲麻莱县| 清远市| 平利县| 井冈山市| 永顺县| 蕲春县| 卢氏县| 宜兰市| 什邡市| 旬邑县|