OpenAI Gym 中的盒子空间始终返回浮点值

问题描述 投票:0回答:1

我正在尝试使用 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
python-3.x reinforcement-learning openai-gym stable-baselines
1个回答
0
投票

显然这是稳定基线中的一个已知问题。发现这篇关于同一主题的文章:https://github.com/openai/gym/issues/3107 它建议使用多重离散空间来解决它。 就我而言,这还不够,因为我计划使用需要 Box Action 空间的代理。但它可能对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.