<p>在编写本文时,<code>gym</code>包提供的<code>gym.Spaces</code>都不能用于镜像一个热编码表示。在</p>
<p>幸运的是,我们可以通过创建<code>gym.Spaces</code>的子类来定义我们自己的空间。在</p>
<p>我做了一个这样的课程,这可能是你需要的:</p>
<pre class="lang-py prettyprint-override"><code>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
</code></pre>
<p>您可以这样使用它:</p>
^{pr2}$
<p>希望我能帮忙</p>