我正在尝试使用 OpenAI Gym 开始强化学习。我试图解决 Hotter-Colder 练习(https://gym.openai.com/envs/HotterColder-v0/)。
对于动作空间,我试图传递一个 Box 空间以确保它是一个连续的空间。即使我将类型指定为 int32,当我通过 model.learn 训练模型时,它总是将值作为介于 0 和 2.5 之间的 float32。
正如您在下面的代码中看到的,action_space 使用 Box 指定为 int32,但在训练和预测阶段,动作值始终为 array[float32]。此外,不是得到 1.0 和 100.0 之间的值,而是这些值似乎只停留在 0.0 和 2.5 之间。有谁知道如何解决这个问题?
非常感谢。
这是我的代码:
class HotterColder(Env):
def __init__(self):
self.range = 100
self.guess_max = 100
self.number = 0
self.guess_count = 0
self.action_space = Box(low=1,high=100,shape=(1,),dtype=np.int32)
self.observation_space = Discrete(4)
self.state = 0
np.random.seed(0)
def reset(self):
self.number = np.random.randint(low=1, high=self.range)
self.guess_count = 0
self.observation = 0
return self.state
def render(self):
pass
def step(self, action):
guess =int( action[0])
if guess < self.number:
self.state = 1
elif guess > self.number:
self.state = 3
else:
self.state = 2
self.guess_count += 1
done = self.guess_count >= self.guess_max
reward = ((min(guess, self.number) + self.range) / (max(guess, self.number) + self.range))**2
info = {"guess": guess, "actual": self.number, "guesses": self.guess_count, "reward": reward, "state": self.state}
if done:
if guess == self.number:
print("Correct guess." + str(info))
return self.state, reward, done, info