Pytorch-运行时错误 : invalid multinomial distribution (encountering probability entry < 0)

标签 pytorch reinforcement-learning stable-baselines

我正在使用 Stable Baselines 3 来训练代理玩 Connect 4游戏。当代理作为第二个玩家开始游戏时,我试图考虑这种情况。

self.env = self.ks_env.train([opponent, None]) 

当我尝试运行代码时,出现以下错误:

invalid multinomial distribution (encountering probability entry < 0)
/opt/conda/lib/python3.7/site-packages/torch/distributions/categorical.py in sample(self, sample_shape)
samples_2d = torch.multinomial(probs_2d, sample_shape.numel(), True).T

但是,当代理是第一个玩家时没有问题:

self.env = self.ks_env.train([None, opponent])

我认为问题与 Pytorch 库有关。我的问题是如何解决这个问题?

最佳答案

检查您提供的代码后,问题似乎不是来自哪个代理启动游戏,而是来自游戏完成后没有重新启动环境。

我刚刚更改了您的步骤函数,如下所示:

def step(self, action):
    # Check if agent's move is valid
    is_valid = (self.obs['board'][int(action)] == 0)
    if is_valid:  # Play the move
        self.obs, old_reward, done, _ = self.env.step(int(action))
        reward = self.change_reward(old_reward, done)
    else:  # End the game and penalize agent
        reward, done, _ = -10, True, {}
    if done:
        self.reset()
    return board_flip(self.obs.mark,
                      np.array(self.obs['board']).reshape(1, self.rows, self.columns) / 2),
                      reward, done, _

这样,模型就能够进行训练,您可以使用以下代码片段检查它是否按预期工作:

done = True
for step in range(500):
    if done:
        state = env.reset()
    state, reward, done, info = env.step(env.action_space.sample())
    print(reward)

链接到我的版本 your notebook

关于Pytorch-运行时错误 : invalid multinomial distribution (encountering probability entry < 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64441708/

相关文章:

python - pytorch如何设置.requires_grad False

machine-learning - 如何学习马尔可夫决策过程中的奖励函数

algorithm - 具有线性函数逼近的 Q 学习

subprocess - SubprocVecEnv 无法与自定义环境一起使用(稳定基线 - 健身房)

python - 在 Pytorch 中创建一个具有固定权重的线性模型

pytorch - 如何在 PyTorch 中向张量添加一些高斯噪声?

python - 基于策略的学习不收敛

pytorch - 训练稳定的基线 3 有例子吗?

reinforcement-learning - 未使用 Stable-Baselines3 监视 CustomEnv 的转出摘要统计信息

python - pytorch预测稳定性