健身房改造观察包装器似乎没有改变观察空间

Gym TransformationObservation wrapper seems not to transform the observation space

提问人:E.T 提问时间:9/24/2023 最后编辑:E.T 更新时间:10/27/2023 访问量:39

问:

目前,我正在尝试建立一个环境来使用 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)

Python 转换 包装器 环境

评论

0赞 E.T 9/25/2023
没有人能帮我?

答:

0赞 Peter C 10/27/2023 #1

根据我的理解,包装器只影响输出观察,而不影响observation_space。(https://gymnasium.farama.org/_modules/gymnasium/core/#RewardWrapper:~:text=class-,ObservationWrapper,-(Wrapper%5B)

我希望以程对您有所帮助:

  1. 在原始环境中: env ->生成观察 ->检查观察observation_space匹配 ->观察

  2. 在包装器环境中: env -> 生成观察 ->检查观察匹配observation_space -> 观察 -> f(观察) ->新观察

注意:f 是包装函数。