random大坑

最近在入门强化学习,在写使用DQN学习CartPole时,出现了一个神奇的事情。

我几乎把代码改的和参考程序一模一样了,结果参考程序跑出来完全正常,而我的程序跑出来就是这个鬼样子……

CartPole

就是loss一直在降低,但是reward一直在9左右徘徊,甚至expected average reward稳步下降……

因为是python新手入门+深度学习新手入门,所以现在只会照着别人的代码写,自己用眼睛dubug了半天没有发现区别。

今天早上来实验室再看一眼,发现了一处小小的不同。

在epsilon-greedy中,做动作选择时,我的代码是:

 if random.random() <= self.epsilon:
     return np.random.randint(0, self.action_dim - 1)

而参考代码是:

if random.random() <= self.epsilon:
    return random.randint(0, self.action_dim - 1)

经过试验后发现,np中的random.randint产生的是[ 0 , self.action_dim -1 ) 的随机数,而random库中产生的是 [0, self.action_dim -1 ] 的随机数,一个是开区间一个是闭区间。而CartPole中的动作恰好只有两个,也就是如果随机选择动作,我的代码只会选择一个动作……

源码我稍后贴出。

Debug完了,今天又是开心的第一天~

猜你喜欢

转载自blog.csdn.net/qq_39004117/article/details/81267800
今日推荐