微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pytorch-RuntimeError:无效的多项式分布遇到概率输入<0

如何解决Pytorch-RuntimeError:无效的多项式分布遇到概率输入<0

我正在使用“稳定基准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,_ = -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 = True
for step in range(500):
    if done:
        state = env.reset()
    state,info = env.step(env.action_space.sample())
    print(reward)

链接到我的your notebook版本

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。