将gym游戏里原始离散的discrete观察空间变为box类型的连续观察空间

将gym游戏里原始离散的discrete观察空间变为box类型的连续观察空间

gym里的FrozenLake-v1游戏的观察空间就一个数字,范围0~15,游戏环境为4*4的方格,agent在初始位置,观察值为0,右移一个位置后的观察值为1,这是个discrete类型,通过下述方法,将0-15这16个互斥的状态值变为box类型的独热向量,

即初始状态值为[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],右移一个位置后的状态值为[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

import gym, gym.spaces

# 继承一个gym.ObservationWrapper类
class DiscreteOneHotWrapper(gym.ObservationWrapper):
    def __init__(self, env):    # 需要一个env初始化
        super(DiscreteOneHotWrapper, self).__init__(env)

        # 判断env.observation_space变量是否是gym.spaces.Discrete类型
        assert isinstance(env.observation_space,gym.spaces.Discrete)

        shape = (env.observation_space.n, )     # shape为(16,)

        # 修改env的状态空间,变为Box类型,最小值0,最大值1,16维向量
        self.observation_space = gym.spaces.Box(0.0, 1.0, shape, dtype=np.float32)

    def observation(self, observation):
        res = np.copy(self.observation_space.low)   # 复制一个16维的数组,全为0
        res[observation] = 1.0  # 当前观察的动作为 1 ,变成独热向量
        return res

# 使用
env = DiscreteOneHotWrapper(gym.make("FrozenLake-v1"))  # 此处创建一个环境并修改它的观察空间
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值