我正在尝试使用 OpenAI Gym 开始强化学习。我尝试进行“Hotter-Colder”练习(https://gym.openai.com/envs/HotterColder-v0/)。
对于动作空间,我试图传递一个 Box 空间以确保它是一个连续的空间。即使我将类型指定为 int32,当我通过 model.learn 训练模型时,它总是获得 0 到 2.5 之间的 float32 值。
正如你在下面的代码中看到的,action_space 被指定为 int32 的 Box,但在训练和预测阶段,action 值始终是 array[float32]。此外,这些值似乎只停留在 0.0 到 2.5 之间,而不是获得 1.0 到 100.0 之间的值。有谁知道如何解决这个问题吗?
非常感谢。
这是我的代码:
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
显然这是稳定基线中的一个已知问题。发现这篇关于同一主题的文章:https://github.com/openai/gym/issues/3107 它建议使用多重离散空间来解决它。 就我而言,这还不够,因为我计划使用需要 Box Action 空间的代理。但它可能对你有用。