[英]openai gym observation space representation
我有一個關於在健身房環境中表示觀察的問題。 我實際上有幾個不同尺寸的觀察空間,比如說我有一個 24x24 像素的相機,然后是一個 1x25 值的 X 射線機,然后是 10 個溫度傳感器,所以 1x1 10 次。 所以目前我用spaces.Dict來表示,用一些space.Box封裝連續值
class MyEnv(gym.Env):
def __init__(self, ...):
spaces = {
'xray': gym.spaces.Box(low=-np.inf, high=np.inf, shape=(nbcaptors, )),
'cam1': gym.spaces.Box(low=-np.inf, high=np.inf, shape=(cam1width, cam1height)),
'cam2': gym.spaces.Box(low=-np.inf, high=np.inf, shape=(cam2width, cam2height)),
'thermal': gym.spaces.Box(low=-np.inf, high=np.inf, shape=(thermalwidth, thermalheight))
}
self.observation_space = gym.spaces.Dict(spaces)
然后,自定義代理可以使用以下方法處理數據:observation['cam1'] 或 obervation['xray'] 等...
問題是當我想使用第三方算法時,例如來自 stable-baselines3,他們不支持spaces.Dict。 所以我的問題是:如何解決這個問題? 我應該用一個 1xn 的盒子來代表我的 obervation_space,例如:
self.observation_space =
gym.spaces.Box(low=-np.inf, high=np.inf,
shape=(nbcaptors*cam1width*cam1height*cam2width*cam2height*thermalwidth*thermalheight,)
那有意義嗎? 即使我看到這種方法存在 3 個問題:
在這一點上,我只看到兩種方法:
如果能在性能和簡單性方面提供一些關於如何最好地解決這個問題的意見,我們將不勝感激。
謝謝!
實際上,封裝部分似乎正是 OpenAI 的好人所做的:
from gym.wrappers import FlattenObservation
from gym.spaces.utils import unflatten
wrapped_env = FlattenObservation(env)
obs1 = wrapped_env.reset()
unflatted_obs = unflatten(wrapped_env.unwrapped.observation_space, obs1)
你可以試試這個方法來定義觀察空間:
low = np.array([nbcaptors_low, cam1width_low, cam1height_low, cam2width_low, cam2height_low, thermalwidth_low, thermalheight_low])
high = np.array([nbcaptors_high, cam1width_high, cam1height_high, cam2width_high, cam2height_high, thermalwidth_high, thermalheight_high])
self.observation_space = gym.spaces.Box(low=-np.inf, high=np.inf)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.