通过在getAction中实现epsilon-greedy贪心动作选择完成Q-learning代理,这意味着它选择的是时间epsilon的随机动作,否则将遵循当前的最佳Q-values值。请注意,选择随机动作可能会导致选择最佳动作——也就是说,您不应该选择随机次优动作,而是选择任何随机合法动作。
您可以通过调用random.choice函数从列表中均匀地随机选择一个元素。您可以使用util.flipcoin(p)模拟一个具有成功概率p的二进制变量,该变量返回True(probability p),False(probability 1-p)。在实现getAction方法之后,观察网格世界gridworld中代理的以下行为(epsilon=0.3)。
python gridworld.py -a q -k 100
您的最终Q-values 值应该类似于您的值迭代代理,特别是沿着良好的路径。但是,由于随机动作和初始学习阶段的原因,您的平均回报将低于Q-value 值预测值。您还可以观察以下针对不同epsilon值的模拟情况,代理的行为是否符合您的期望?
python gridworld.py -a q -k 100 --noise 0.0 -e 0.1