提问人:E.T 提问时间:9/24/2023 最后编辑:E.T 更新时间:10/27/2023 访问量:39
健身房改造观察包装器似乎没有改变观察空间
Gym TransformationObservation wrapper seems not to transform the observation space
问:
目前,我正在尝试建立一个环境来使用 python 和 gym 训练神经元网络。我想使用一个独热编码的观察空间,但使用值 -1 和 1 而不是 0 和 1。因此,我尝试使用函数“变换”来转换一个多离散观测空间,该函数保持不变并将零转换为-1。但是当我使用变换函数将包装器 TransformationObservation 应用于我的 MultiDiscrete 观察时,它似乎对观察空间没有影响。有趣的是,我没有收到任何错误。该函数只是保留观察空间不变。我是建立环境和用神经元网络做一些事情的新手,我确信解决方案非常简单,但目前我被困在这里。谷歌搜索和搜索还没有找到解决方案。
提前感谢您的任何帮助!
这是我尝试过的代码:
from gym import Env
from gym.spaces import MultiDiscrete
from gym.wrappers import TransformObservation, FlattenObservation
import numpy as np
import random as rd
class Test_Env(Env):
def __init__(self):
self.action_space = MultiDiscrete(np.repeat(3, 118))
self.observation_space = MultiDiscrete(np.repeat(2, 118))
self.state = np.array(np.zeros(118))
self.test_begin = 7
def step(self, action):
self.action = hot_encoding_action
pass
def render(self):
pass
def reset(self):
self.state = np.array(np.zeros(2))
self.test_begin = 7
return self.state
env = Test_Env()
env.observation_space.sample()
array([0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1,
1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0,
1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
1, 1, 0, 1, 0, 0, 1, 1], dtype=int64)
def transform(vec):
new_vec = vec*2-np.ones(118)
return new_vec
wrapped_env = TransformObservation(env, transform)
wrapped_env.observation_space.sample()
array([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0,
0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0,
0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1,
1, 1, 0, 1, 0, 1, 0, 0], dtype=int64)
答:
0赞
Peter C
10/27/2023
#1
根据我的理解,包装器只影响输出观察,而不影响observation_space。(https://gymnasium.farama.org/_modules/gymnasium/core/#RewardWrapper:~:text=class-,ObservationWrapper,-(Wrapper%5B)
我希望以程对您有所帮助:
在原始环境中: env ->生成观察 ->检查观察observation_space匹配 ->观察
在包装器环境中: env -> 生成观察 ->检查观察匹配observation_space -> 观察 -> f(观察) ->新观察
注意:f 是包装函数。
评论