強化學習 gym自定義視覺化環境例項

2021-10-03 19:14:22 字數 4173 閱讀 3769

分類目錄——強化學習

自定義環境

自定義環境最好繼承自gym.env,這樣可以復用父類中的一些內容

直接上程式,在程式中進行說明

import gym

from gym import spaces

from gym.envs.classic_control import rendering

import time

class

envline

(gym.env)

: metadata =

# 將會初始化動作空間與狀態空間,便於強化學習演算法在給定的狀態空間中搜尋合適的動作

# 環境中會用的全域性變數可以宣告為類(self.)的變數

def__init__

(self)

: self.action_space = spaces.discrete(3)

# 動作空間,0, 1, 2: 不動,左右

self.observation_space = spaces.discrete(5)

# 0,1,2,3,4:狀態空間

self.n_actions = self.action_space.n # 動作個數

self.state =

none

# 當前狀態

self.target =

4# 安全/目標狀態

self.viewer = rendering.viewer(

520,

200)

# 初始化一張畫布

defstep

(self, action)

:# 接收乙個動作,執行這個動作

# 用來處理狀態的轉換邏輯

# 返回動作的回報、下一時刻的狀態、以及是否結束當前episode及除錯資訊

assert self.action_space.contains(action)

,"%r (%s) invalid"

%(action,

type

(action)

) x = self.state

if action ==0:

# 不動

x = x

elif action ==1:

# 左 x = x -

1elif action ==2:

# 右 x = x +

1# 在這裡做一下限定,如果下乙個動作導致智慧型體越過了環境邊界(即不在狀態空間中),則無視這個動作

next_state = x

self.state = next_state if self.observation_space.contains(next_state)

else self.state

self.counts +=

1# 如果到達了終點,給予乙個回報

# 在複雜環境中多種狀態的反饋配比很重要

if self.state == self.target:

reward =

30 done =

true

else

:# 如果是普通的一步,給予乙個小懲罰,目的是為了減少起點到終點的總路程長度

reward =-1

done =

false

return self.state, reward, done

# 用於在每輪開始之前重置智慧型體的狀態,把環境恢復到最開始

# 在訓練的時候,可以不指定startstate,隨機選擇初始狀態,以便能盡可能全的採集到的環境中所有狀態的資料反饋

defreset

(self, startstate=

none):

if startstate==

none

: self.state = self.observation_space.sample(

)else

:# 在訓練完成測試的時候,可以根據需要指定從某個狀態開始

if self.observation_space.contains(startstate)

: self.state = startstate

else

: self.state = self.observation_space.sample(

) self.counts =

0return self.state

# render()繪製視覺化環境的部分都寫在這裡

defrender

(self, mode=

'human'):

# 布置狀態

for i in

range

(self.observation_space.n)

: self.viewer.draw_line((20

,30),

(100,30

), color=(0

,0,0

)).add_attr(rendering.transform(

(100

* i,0)

))# 目標位置

self.viewer.draw_line((20

,30),

(100,30

),color=(0

,1,0

),).add_attr(rendering.transform(

(100*4

,0))

)# 繪製當前位置

self.viewer.draw_polygon([(

60,30)

,(80,

100),(

40,100)

], color=(0

,1,0

)).add_attr(rendering.transform(

(100

* self.state,0)

))self.viewer.draw_circle(20,

20,true

, color=(0

,1,0

)).add_attr(rendering.transform((60

+100

* self.state,

120)))

return self.viewer.render(return_rgb_array=mode ==

'human'

)def

close

(self)

:if self.viewer:

self.viewer.close(

)

測試

if __name__ ==

'__main__'

: env = envline(

)for epoch in

range(5

):env.reset(

)print

('epoch'

, epoch+1,

': '

,end='')

print

(env.state, end='')

env.render(

)# 重新整理畫面

time.sleep(

0.5)

for i in

range(5

):env.step(env.action_space.sample())

# 隨機選擇乙個動作執行

print

(' -> '

, env.state, end='')

env.render(

)# 重新整理畫面

time.sleep(

0.5)

print()

env.close(

)

顯示效果如文首所示

全部**

按順序複製即可執行

相關文獻

分類目錄——強化學習(更新中)

什麼是gym

gym自定義視覺化環境繪製

gym自定義視覺化環境例項

強化學習呼叫gym環境例項

從q_learning看強化學習

乙個q_learning強化學習自定義gym環境視覺化例項

強化學習 實驗 Gym環境

本節內容參考 白話強化學習 gym是openai團隊提供的乙個簡單的開源專案,可以快速地實現乙個完整的 s a r a s rightarrow a rightarrow r rightarrow a s a r a 首先我們給python環境中安裝gym包 pip install gym下面給出一...

強化學習實戰 自定義Gym環境之顯示字串

如果想用強化學習去實現掃雷 2048這種帶有數字提示資訊的遊戲,自然是希望自定義 gym 環境時能把字元顯示出來。上網查了很久,沒有找到gym自帶的圖形工具viewer可以顯示字串的資訊,反而是通過pyglet import pyglet from gym.envs.classic control ...

強化學習 蛇棋遊戲gym環境搭建

學習強化學習精要核心演算法與tensorflow實現這本書中,關於蛇棋遊戲利用gym搭建。遊戲的規則非常簡單,詳細請參考馮超的書 強化學習精要核心演算法與tensorflow實現 下面是遊戲的具體實現 import numpy as np import gym from gym.spaces imp...