日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美3p在线观看 | 最新福利视频 | 少妇又白又嫩又色又粗 | 精品一区二区三区在线视频 | av导航站| 99热这里只有精品18 | 亚洲av无码国产在丝袜线观看 | 男生和女生靠逼视频 | 人人射人人爽 | 国产精品成人3p一区二区三区 | 欧美午夜在线视频 | 99热免费观看| 3p视频在线 | 羞羞的网站在线观看 | 成在线人免费视频 | 在线免费观看成年人视频 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 国产男女在线 | 久久精品区 | 免费黄色小说视频 | 夜色成人 | 在线午夜电影 | 十大污视频 | 99久久伊人| 青青草99| 国产又粗又猛又爽又黄的视频在线观看动漫 | 国产精品美女久久久久久久久 | 午夜激情福利电影 | 日韩毛片儿 | 日本中文字幕第一页 | 麻豆视频免费在线 | 成人免费做受小说 | 国产麻豆一区二区三区 | 久久婷综合 | 欧美人妻精品一区二区 | 五月天激情社区 | 天天透天天操 | 视屏一区| 亚洲色图图片区 | 亚洲精品一区二 | 国产精品久久久久久久久久小说 | 亚洲熟妇毛茸茸 | 熟女少妇一区二区 | 少妇熟女一区 | 男女视频网站 | 一区二区三区四区五区视频 | 午夜免费福利 | 性色AV无码久久一区二区三 | 男女男网站| 国产在线视频卡一卡二 | 国产无精乱码一区二区三区 | 黄色在线观看网址 | 久久久久久电影 | 中文字幕免费高清 | 国产字幕在线观看 | 欧美freesex黑人又粗又大 | 五月天婷婷激情视频 | 欧美性视频在线 | 亚洲最新偷拍 | 国产不卡在线观看视频 | 午夜动态图 | 天堂国产精品 | 亚洲国产tv | 精品国产1区 | 男人天堂中文字幕 | 中文字幕乱视频 | 操日本女人 | 高清国产mv在线观看 | 伊人春色av | 国产精品一区在线 | 四虎影视永久免费 | 国产一级二级三级 | 国产成人精品影院 | 白嫩日本少妇做爰 | 欧美日韩中文字幕一区 | 亚洲片国产一区一级在线观看 | 国产男女视频 | 欧美性生活一区二区 | 日韩一区精品 | 精品少妇一区二区三区免费观 | 日韩精品在线观看一区 | jizzjizz欧美69巨大 | 九九综合九九 | 少妇无码一区二区三区 | 亚洲精品国产suv一区 | 日韩在线视频一区 | 丝袜美女被c | 丰满岳乱妇国产精品一区 | 狠狠香蕉 | 亚洲AV综合色区无码国产播放 | 无遮挡边吃摸边吃奶边做 | 久久精品国产一区二区电影 | 亚洲欧洲视频 | 蜜臀av无码精品人妻色欲 | 69国产在线| 色婷在线| 成人3d动漫一区二区三区91 | 欧美大片在线观看 | 国产黄色免费看 |