2. Q learning
Q-learning是我们将讨论的第一个可以解决 MDP 中最优策略的技术。Q-learning 的目标是找到一个最优策略,即所有连续步骤的总奖励的期望值是可实现的最大值。因此,换句话说,Q-learning 的目标是通过学习每个状态-动作对的最优 Q 值来找到最优策略。
初始我们需要一个Q-Table来记录所有更新后的值,该表的行表示所有的位置,而列表示所有有限的行为,数字表示执行该行为后的reward.
以下是 3 个基本步骤:
- 代理开始于状态 (s1) 采取行动 (a1) 并获得奖励 (r1)
- 代理通过参考具有最高值 (max)或随机 (epsilon, ε)的 Q 表来选择动作
- 更新 q 值
初始时,所有的值都为0.那么如何进行第一个动作的选择? 使用下面两个方法
2 ways
- follow Q table and choice one action by max future reward - exploiting
- act randomly to explore new states - exploring + can balance using epsilon (ε)
为了在利用和探索之间取得平衡,我们使用了所谓的 epsilon 贪婪策略。通过这种策略,我们定义了一个 探索率 ε我们最初设定的1. 这个探索率是我们的代理将探索环境而不是利用它的概率。和ε=1, 这是100% 确定代理将从探索环境开始。
随着代理对环境的了解更多,在每个新剧集开始时,ε将以我们设置的某个速率衰减,因此随着代理对环境的了解越来越多,探索的可能性变得越来越小。一旦有机会探索和了解环境, 代理将在利用环境方面变得 “贪婪” 。
为了确定代理在每个时间步是选择探索还是利用,我们生成一个随机数0和1. 如果这个数字大于 epsilon,那么代理将通过利用来选择其下一个动作,即它将从 Q 表中为其当前状态选择具有最高 Q 值的动作。否则,它的下一个动作将通过探索来选择,即随机选择它的动作并探索环境中发生的事情。
if random_num > epsilon: # 通过开发选择动作 else : # 通过探索选择动作
学习率
学习率是一个介于0和1,这可以被认为是代理为新的 Q 值放弃给定状态-动作对的 Q 表中先前 Q 值的速度。
因此,例如,假设我们在 Q 表中有一个 Q 值,用于代理在前一个时间步中经历的任意状态-动作对。好吧,如果智能体在了解了更多关于环境的信息后,在稍后的时间步经历了相同的状态-动作对,则需要更新 Q 值以反映智能体现在对未来回报的预期变化。
代理在单集之后不会学到太多东西,但最终会进行足够的探索(步骤和集)它将收敛并学习最佳 q 值或 q-star ( Q∗
)。
参考: 代码Capstone Project: Reinforcement Learning from Scratch with Python - Learn Python with Rune