Python 中的 Q-Learning

17 Mar 2025 | 5 分钟阅读

强化学习是一种学习过程中的模型,在该模型中,学习代理通过持续与环境互动,在特定环境中随着时间的推移以尽可能最好的方式进行开发。在学习过程中,代理会遇到其所处环境中的不同场景。它们被称为状态。处于该状态的代理可以从多种允许的操作中进行选择,这些操作可能导致各种奖励(或惩罚)。随着时间的推移而学习的代理会发展出最大化这些奖励的能力,以便在任何情况下都能表现得最好。

Q-Learning是一种基础的强化学习类型,它利用Q值(也称为动作值)来持续改进学习者的行为。

  1. Q值,也称为动作值:Q值是针对动作和状态定义的。Q(S A, S) 是在 S 时间执行该动作的概率估计。Q(S A, S) 的估计通过使用我们将在后面章节中学到的TD更新规则进行迭代计算。
  2. 回合和奖励:代理在其整个生命周期中,从一个初始状态开始,根据其所交互的操作类型和环境,在其当前状态和下一个状态之间进行多次转换。在每次转换过程中,代理在转换状态下采取行动,受到周围环境的奖励,然后进入一个新状态。如果代理在某个时刻达到其中一个结束状态,则意味着不再有可行的转换。这被称为一个回合的结束。
  3. 时序差分或TD更新:时序差分(TD)更新规则可以表示如下:
    Q(S,A)←Q(S,A)+ α(R+ γQ(S`,A`)-Q(S,A))
  4. 用于计算数量的更新规则在代理与其环境交互的每个阶段都会使用。下面解释了使用的术语:
    • S:代理的当前状态。
    • A:当前策略选择的当前动作。
    • S`:代理将到达的下一个状态。
    • A`:基于当前最新的Q值估计,选择的下一个最有效的选项,即选择在下一个状态具有最高Q值的动作。
    • R:环境根据当前动作看到的当前奖励。
    • γ(>0 且 <=1):未来奖励的折扣因子。未来奖励的价值低于当前奖励。因此,它们应该被打折扣。因为Q值估计了特定状态的预期奖励,所以折扣规则也适用于这种情况。
    • α:修改Q(S, A)的步长。
  • 使用 ϵ-greedy 策略进行动作选择:ϵ-greedy 策略是一种基于当前最新的Q值估计来选择动作的简单方法。该策略遵循以下规则:
    • 以 (1 - ϵ) 的概率,选择具有最高Q值的选项。
    • 以高概率(ϵ),随机选择任何一个选项。

有了所有必要的知识,让我们举个例子。我们将使用OpenAI创建的gym环境来构建Q-Learning算法。

安装gym

我们可以使用以下命令来安装gym:

在开始这个例子之前,我们需要一个辅助代码来观察算法的过程。需要从我们的工作目录下载两个辅助文件。

步骤 1:导入所有必需的库和模块。

步骤 2:我们将实例化我们的环境。

步骤 3:我们需要创建并初始化Q表为0。

步骤 4:我们将构建Q-Learning模型。

步骤 5:我们将训练模型。

步骤 6:最后,我们将绘制重要的统计数据。

输出

Q-Learning in Python
Q-Learning in Python
Q-Learning in Python

结论

我们可以从“每集奖励随时间变化”的图中看到,每集的奖励随着时间的推移逐渐增加,直到达到每集高奖励的点,这表明代理通过在每个级别都表现出最优行为,学会了最大化每集的总奖励。