日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强化学习实践三 :编写通用的格子世界环境类

發(fā)布時間:2024/3/13 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强化学习实践三 :编写通用的格子世界环境类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

gym里內(nèi)置了許多好玩經(jīng)典的環(huán)境用于訓練一個更加智能的個體,不過這些環(huán)境類絕大多數(shù)不能用來實踐前五講的視頻內(nèi)容,主要是由于這些環(huán)境類的觀測空間的某個維度是連續(xù)變量而不是離散變量,這是前五講內(nèi)容還未涉及到的知識。為了配合解釋David Silver視頻公開課提到的一些示例,參考了gym的思想設(shè)計了一個通用的格子世界環(huán)境類,該環(huán)境類的觀測空間是一維離散變量,可以很好地模擬其公開課中提到的:簡單格子、有風格子、隨機行走、懸崖行走、隨機策略(骷髏和錢袋子)等問題。在此基礎(chǔ)上理解、實踐強化學習的基礎(chǔ)算法就相對簡單而且直觀了。

先貼上格子世界環(huán)境類的源文件:gridworld.py,只把該文件下載到您自己的文件夾內(nèi),導入其中的類或方法就可以了。已經(jīng)內(nèi)置的一些環(huán)境類UI界面類似下面這些:

一些內(nèi)置的格子世界環(huán)境

簡單或有風10*7格子世界

懸崖行走示例

隨機行走示例

模仿Gridworld with Dynamic Programming?的一個格子世界

用戶可以自定義格子的大小、水平和垂直格子數(shù)目、內(nèi)部障礙分布、以及每一個格子的即時獎勵值。在通用的格子世界環(huán)境類的UI界面中,我使用不同的顏色設(shè)置表示不同的意義,其中:

  • 帶有藍色邊框的格子 表示起始狀態(tài);
  • 帶有金黃色邊框的格子 表示終止狀態(tài),終止狀態(tài)可以不止一個;
  • 黑色的格子表示障礙格子,個體一般不能進入;
  • 其他不同顏色的格子表示格子的即時獎勵值不同,獎勵值為0的格子顏色為灰色,獎勵值為負值顏色顯示偏向于紅色,值越小,紅色越深;獎勵值大于0的格子偏向于顯示綠色,值越大,綠色越飽滿;
  • 個體使用黃色圓形來表示。

?

如何使用通用的格子世界類來定制自己想要的格子環(huán)境:

通用的格子世界環(huán)境類接受如下參數(shù):

def __init__(self, n_width:int=10,n_height:int = 7,u_size = 40,default_reward:float = 0,default_type = 0,windy=False):

分別是水平方向上格子數(shù)量豎直方向上格子數(shù)量,每一個單位格子的繪制邊長(單位為像素值),默認每一個格子的即時獎勵值以及默認格子的類型。定義格子類型值為0時為個體可進入格子,類型為1表示為障礙,個體不能進入格子。有興趣您可以修改代碼支持更多的類型。

下面以一個懸崖行走格子世界環(huán)境為例,講解如何使用通用的格子世界環(huán)境類來得到自己想要的格子世界環(huán)境對象。懸崖行走的例子出現(xiàn)在David Silver強化學習公開課的?第五講?,環(huán)境如下:

?

  • 首先,明確格子世界環(huán)境的布局:長寬格子數(shù)、內(nèi)部的障礙、即時獎勵、起始狀態(tài)、終止狀態(tài)等信息。對于懸崖行走示例來說,世界長??、寬??,起始位置在左下角,坐標為??,終止狀態(tài)在右下角,坐標為??。
  • 使用對應的參數(shù)建立一個格子世界環(huán)境類對象:
# 導入GridWorldEnv前確保當前代碼文件與gridworld.py文件同在一個包內(nèi) from gridworld import GridWorldEnv env = GridWorldEnv(n_width=12, # 水平方向格子數(shù)量n_height = 4, # 垂直方向格子數(shù)量u_size = 60, # 可以根據(jù)喜好調(diào)整大小default_reward = -1, # 默認格子的即時獎勵值default_type = 0) # 默認的格子都是可以進入的 from gym import spaces # 導入spaces env.action_space = spaces.Discrete(4) # 設(shè)置行為空間支持的行為數(shù)量 # 格子世界環(huán)境類默認使用0表示左,1:右,2:上,3:下,4,5,6,7為斜向行走 # 具體可參考_step內(nèi)的定義 # 格子世界的觀測空間不需要額外設(shè)置,會自動根據(jù)傳入的格子數(shù)量計算得到
  • 設(shè)置起始和終止狀態(tài),起始狀態(tài)用元組描述,終止狀態(tài)用列表描述:
env.start = (0,0) env.ends = [(11,0)]

對一些特殊格子的類型和即時獎勵值進行修改,這里要把組成懸崖的格子的即時獎勵設(shè)為-100,這個例子中沒有不可進入的格子,所以不需要對格子類型進行修改。示例中懸崖格子是終止狀態(tài),因此有:

for i in range(10):env.rewards.append((i+1,0,-100))env.ends.append((i+1,0))
  • 特殊類型的格子設(shè)置類似于即時獎勵設(shè)置,比如我們將坐標為(5,1)和(5,2)的兩個格子設(shè)為不可進入,可以添加如下代碼:
env.types = [(5,1,1),(5,2,1)]
  • 最后為了使這些設(shè)置在實際生效,調(diào)用刷新設(shè)置方法:
env.refresh_setting()

至此,我們自定義的格子世界環(huán)境就設(shè)置好了,調(diào)用其render()方法查看一下吧:

env.render() input("press any key to continue...")

效果如下:

兩塊障礙已經(jīng)順利生成了,可是發(fā)現(xiàn)個體的位置不在起始位置,為此我們需要重置下個體的位置,只需要調(diào)用env的reset()方法就可以了:

env.reset()

?再看效果符合預期:

生成這個環(huán)境完整的代碼如下:?

from gridworld import GridWorldEnv from gym import spacesenv = GridWorldEnv(n_width=12, # 水平方向格子數(shù)量n_height = 4, # 垂直方向格子數(shù)量u_size = 60, # 可以根據(jù)喜好調(diào)整大小default_reward = -1, # 默認格子的即時獎勵值default_type = 0) # 默認的格子都是可以進入的 env.action_space = spaces.Discrete(4) # 設(shè)置行為空間數(shù)量 # 格子世界環(huán)境類默認使用0表示左,1:右,2:上,3:下,4,5,6,7為斜向行走 # 具體可參考_step內(nèi)的定義 # 格子世界的觀測空間不需要額外設(shè)置,會自動根據(jù)傳輸?shù)母褡訑?shù)量計算得到 env.start = (0,0) env.ends = [(11,0)] for i in range(10):env.rewards.append((i+1,0,-100))env.ends.append((i+1,0)) env.types = [(5,1,1),(5,2,1)] env.refresh_setting() env.reset() env.render() input("press any key to continue...")

有了格子世界通用環(huán)境類,我們就可以比較方便定制自己的格子世界環(huán)境。為了方便使用,我也寫好了幾個內(nèi)置的格子世界環(huán)境,大家只要調(diào)用相應的方法就可以得到它:

env = LargeGridWorld() # 10*10的大格子 env = SimpleGridWorld() # 10*7簡單無風格子 env = WindyGridWorld() # 10*7有風格子 env = RandomWalk() # 隨機行走 env = CliffWalk() # 懸崖行走 env = SkullAndTreasure() # 骷髏和錢袋子示例

如果您希望讓您的個體支持斜向行走,請將相應的行為空間參數(shù)設(shè)為8,同時請留意環(huán)境類的_step方法關(guān)于斜向行走狀態(tài)的改變是否如您所愿的那樣設(shè)置,您可以在此基礎(chǔ)上定制自己的行為規(guī)則。

要使用格子世界環(huán)境類提供的功能,您必須已經(jīng)實現(xiàn)安裝了gym庫以及其依賴庫。關(guān)于如何安裝gym庫、如何向gym注冊自定義的環(huán)境類可以參考相關(guān)教程。通過gym庫提供的相關(guān)功能,你還可以把個體經(jīng)歷Episode的過程錄制成視頻。

下次實踐編寫與個體相關(guān)的代碼來鞏固我們對強化學習相關(guān)基礎(chǔ)算法的理解。敬請期待。

?

總結(jié)

以上是生活随笔為你收集整理的强化学习实践三 :编写通用的格子世界环境类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本无遮羞调教打屁股网站 | 99精品中文字幕 | 久久国产精品二区 | 欧美做爰猛烈床戏大尺度 | 正在播放经典国语对白 | 国产日韩欧美精品一区二区 | 800av在线视频| 久久久精品在线观看 | 国产伦精品一区二区三区四区 | 日韩欧美国产一区二区在线观看 | 国产黄色电影 | 久操视频免费在线观看 | 日本波多野结衣在线 | 日本人妻熟妇久久久久久 | 亚洲第一二三四区 | 五十路av| 国产精品一区av | 豆国产97在线 | 亚洲 | 久草视 | 亚洲综合在线视频 | 爱爱的网站 | 日韩欧美国产一区二区三区在线观看 | 欧美精品一二三四区 | 成人精品一区日本无码网 | 91艹| 91网站免费在线观看 | 农村妇女愉情三级 | 99热免费在线观看 | 影音先锋色小姐 | 亚洲国产成人精品女人久久 | 久久精品10| 蜜桃成人无码区免费视频网站 | 国产原创麻豆 | 国产乱妇乱子 | 国产人澡人澡澡澡人碰视频 | 国产精品无码久久久久一区二区 | 红桃视频成人 | av色哟哟| 国外av网站 | 国产精品久久久久999 | 免费在线精品视频 | 欧美变态口味重另类 | 精品人妻一区二区三区久久夜夜嗨 | 国产精品自拍在线观看 | 成人免费观看视频大全 | 谁有毛片网站 | 91视频免费| 无码内射中文字幕岛国片 | av狠狠| 久久激情网站 | 特级丰满少妇一级aaa爱毛片 | 日韩伦理av | 欧美系列在线观看 | 天天色天天爽 | 激情丁香网 | 欧美日韩成人一区 | 永久免费未满视频 | 女生张开腿给男生桶 | 久久99热久久99精品 | 青青伊人久久 | 国产97在线观看 | 欧美乱妇15p | 国产免费又爽又色又粗视频 | 亚洲国产精品系列 | av片在线免费观看 | 校园春色亚洲 | 国产精品27p| 天天爽影院| 久久影库 | 色婷婷www | 色咪咪网站| 亚洲一久久 | 特高潮videossexhd| 手机电影在线观看 | 欧美日韩观看 | 青草精品在线 | 国产精品一区2区 | 麻豆av网 | 97干干干| 成人在线视频播放 | 久久高清无码电影 | 成年人在线视频免费观看 | 肉丝袜脚交视频一区二区 | 国产天堂资源 | 亚洲蜜桃av一区二区 | 一区二区三区四区五区av | 国产又黄又爽 | 日韩欧美福利 | 亚洲精品日韩欧美 | 91视频com | 中国丰满人妻videoshd | 亚洲无码久久久久久久 | 国产乱了高清露脸对白 | 亚洲最大黄网 | 久久久国产一区二区三区 | 亚洲人成无码www久久久 | 青青五月天 | 久艹视频在线观看 | 啪啪一区二区 |