簡體   English   中英

如何在健身房環境的動作空間中使用連續值?

[英]How to use continuous values in the action space of a gym environment?

我正在嘗試使用五個動作制作一個自定義的健身房環境,所有這些動作都可以具有連續值。 為了實現相同的功能,我使用了以下action_space格式:

self.action_space = spaces.Tuple((spaces.Box(low=np.array([0]),high=np.array([1]), dtype=np.float32),
                           spaces.Box(low=np.array([0]), high=np.array([1]),dtype=np.float32),
                           spaces.Box(low=np.array([-2]), high=np.array([2]),dtype=np.float32),
                           spaces.Box(low=np.array([0]), high=np.array([1]),dtype=np.float32),
                           spaces.Box(low=np.array([1]), high=np.array([20]),dtype=np.int8)))

但是,當我嘗試運行 PPO 模型(來自stable_baselines3 )時,出現以下錯誤:

AssertionError: The algorithm only supports (<class 'gym.spaces.box.Box'>, <class 'gym.spaces.discrete.Discrete'>, <class 'gym.spaces.multi_discrete.MultiDiscrete'>, <class 'gym.spaces.multi_binary.MultiBinary'>) as action spaces but Tuple(Box(0.0, 1.0, (1,), float32), Box(0.0, 1.0, (1,), float32), Box(-2.0, 2.0, (1,), float32), Box(0.0, 1.0, (1,), float32), Box(1, 20, (1,), int8)) was provided

我搜索了一些關於這個問題的信息,並在 Github 上找到了這個:

鏈接據此,我通過以下方式更改了我的代碼:

self.action_space = {"Temperature": spaces.Box(low=np.array([0]),high=np.array([1]), dtype=np.float32),
                           "topP": spaces.Box(low=np.array([0]), high=np.array([1]),dtype=np.float32),
                           "frequencyPenalty": spaces.Box(low=np.array([-2]), high=np.array([2]),dtype=np.float32),
                           "presencePenalty": spaces.Box(low=np.array([0]), high=np.array([1]),dtype=np.float32),
                           "bestOf": spaces.Box(low=np.array([1]), high=np.array([20]),dtype=np.int8)}

但這仍然返回相同的錯誤。

另外,我找到了這個答案: 鏈接

據此,我的代碼應該可以工作,因為我也在使用元組空間。

如何將其轉換為 action_space 的可接受數據類型?

不幸的是,大多數 stable-baselines3 實現只支持 Box、Discrete、MultiDiscrete 和 MultiBinary 動作空間(參見 stable-baselines3 實現的算法)。

您發布的鏈接指的是 openai,而不是 stable-baselines3。

您應該查看其他框架並檢查他們的算法實現是否支持元組/字典,或者嘗試實現您自己的!

否則,您可以嘗試檢查具有多個 Box 類型動作的動作空間是否可以輕松轉換為離散類型動作! (通過 MultiDiscrete 在 stable-baselines3 中支持)

“所有這些都可以有連續的值”

您的鏈接是關於整數之間的混合並繼續。 為了簡單地讓一切繼續,您可以單獨使用Box

self.action_space = spaces.Box(low=np.array([0,0,-2,0,1]),
                               high=np.array([1,1,2,1,20]),
                               dtype=np.float32)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM