0

我正在尝试使用 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
4

0 回答 0