2024-04-29 12:10:00 发布
网友
除了openAI's doc,我没有找到更详细的文档。在
我需要知道正确的创建方法:
具有1..n个可能操作的操作空间。(当前使用离散动作空间)
1..n
一个具有2^n状态的观察空间,它是已经采取的每一个可能的动作组合的状态。 我想要一个动作向量的一个热表示形式-1代表action was already taken,0代表action still hadn't been taken
2^n
action was already taken
action still hadn't been taken
在openAI的健身房我该怎么做?在
谢谢
在编写本文时,gym包提供的gym.Spaces都不能用于镜像一个热编码表示。在
gym
gym.Spaces
幸运的是,我们可以通过创建gym.Spaces的子类来定义我们自己的空间。在
我做了一个这样的课程,这可能是你需要的:
import gym import numpy as np class OneHotEncoding(gym.Space): """ {0,...,1,...,0} Example usage: self.observation_space = OneHotEncoding(size=4) """ def __init__(self, size=None): assert isinstance(size, int) and size > 0 self.size = size gym.Space.__init__(self, (), np.int64) def sample(self): one_hot_vector = np.zeros(self.size) one_hot_vector[np.random.randint(self.size)] = 1 return one_hot_vector def contains(self, x): if isinstance(x, (list, tuple, np.ndarray)): number_of_zeros = list(x).contains(0) number_of_ones = list(x).contains(1) return (number_of_zeros == (self.size - 1)) and (number_of_ones == 1) else: return False def __repr__(self): return "OneHotEncoding(%d)" % self.size def __eq__(self, other): return self.size == other.size
您可以这样使用它:
希望我能帮忙
您要求的“多个一个热”空间已经实现
https://github.com/openai/gym/blob/master/gym/spaces/multi_binary.py
import gym # create a MultiBinary Space # by passing n=10, each sample will contain 10 elements mb = gym.spaces.MultiBinary(n=10) mb.sample() # array([1, 0, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8)
如果您想实现自己的索引,以确保在调用sample时没有超过一定数量的正元素,那么可以从n选项中随机选择x索引,然后在所有0数组中翻转这些索引,然后返回该值。在
sample
0
在编写本文时,
gym
包提供的gym.Spaces
都不能用于镜像一个热编码表示。在幸运的是,我们可以通过创建
gym.Spaces
的子类来定义我们自己的空间。在我做了一个这样的课程,这可能是你需要的:
您可以这样使用它:
^{pr2}$希望我能帮忙
您要求的“多个一个热”空间已经实现
https://github.com/openai/gym/blob/master/gym/spaces/multi_binary.py
如果您想实现自己的索引,以确保在调用
sample
时没有超过一定数量的正元素,那么可以从n选项中随机选择x索引,然后在所有0
数组中翻转这些索引,然后返回该值。在相关问题 更多 >
编程相关推荐