[英]How to define action space in custom gym environment that receives 3 scalers and a matrix each turn?
[英]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.