第2单元 Q-Learning

简介

本单元我们将深入探讨强化学习中的基于价值的方法 ,并学习首个 RL 算法:Q 学习算法

我们还将从零开始实现第一个 RL 智能体 —— Q 学习智能体,并在两种环境中进行训练:

  1. Frozen-Lake-v1(防滑版本):智能体需要从起始状态(S)移动到目标状态(G),且只能行走于冻结砖块(F)并避开冰窟(H)。
  2. 一辆自动驾驶出租车:我们的智能体需要学会在城市中导航 ,以将乘客从 A 点运送至 B 点 。

在这里插入图片描述

什么是强化学习?

在强化学习中,我们构建了一个能够做出智能决策的智能体。例如,一个学会玩电子游戏的智能体,或是一个通过决定购买哪些股票以及何时卖出来实现收益最大化的交易智能体。
在这里插入图片描述
为了做出智能决策,我们的智能体将通过试错方式与环境互动 ,并以接收奖励(正向或负向)作为独特反馈来从环境中学习。

其目标在于最大化预期累积奖励 (基于奖励假说原理)。

智能体的决策过程被称为策略π: 给定某个状态,策略会输出一个动作或动作的概率分布。也就是说,在获得环境观测信息后,策略会提供智能体应当采取的动作(或为每个动作生成多个概率值)。
在这里插入图片描述
我们的目标是找到最优策略π*,即能够带来最佳预期累积回报的策略。

而要找到这个最优策略(从而解决强化学习问题), 主要有两类强化学习方法

  • 基于策略的方法 : 直接训练策略 来学习在给定状态下应采取何种动作。
  • 基于价值的方法 : 训练价值函数 来学习 哪些状态更有价值 ,并利用这个价值函数 选择能够到达这些状态的动作
    在这里插入图片描述

两种基于价值的方法

在基于价值的方法中, 我们学习一个价值函数 ,该函数将状态映射到处于该状态时的期望价值
在这里插入图片描述
状态的价值是智能体从该状态开始根据我们的策略行动时所能获得的预期折现回报

但根据我们的策略行动是什么意思?毕竟,在基于价值的方法中我们并没有策略,因为我们训练的是价值函数而非策略。

请记住, 强化学习智能体的目标是拥有一个最优策略π*。

为了找到最优策略,我们学习了两种不同的方法:

  1. 基于策略的方法: 直接训练策略 以选择在给定状态下应采取的动作(或该状态下动作的概率分布)。在这种情况下,我们 没有价值函数
    在这里插入图片描述

策略以状态作为输入,并输出在该状态下应采取的动作(确定性策略:给定状态输出单一动作的策略,与输出动作概率分布的随机策略相反)。

因此, 我们并非手动定义策略的行为;其行为将由训练过程决定

  1. 基于价值的方法: 通过训练价值函数间接实现 ,该函数输出状态或状态-动作对的价值。基于该价值函数,我们的策略 将采取相应动作

由于策略本身未经训练/学习, 我们需要明确规定其行为模式。 例如,若需要策略能根据价值函数始终选择带来最大奖励的动作, 我们将创建贪婪策略
在这里插入图片描述

因此无论采用何种方法解决问题, 最终都会形成一个策略 。在基于价值的方法中,策略本身不需要训练:它 只是一个预先设定的简单函数 (例如贪婪策略),通过调用价值函数提供的估值来选择动作。

区别在于:

  • 在基于策略的训练中, 最优策略(记作π*)通过直接训练策略获得
  • 在基于价值的训练中, 找到最优价值函数(记作 Q*或 V*,下文将详述其区别)即可推导出最优策略
    在这里插入图片描述
    实际上,在基于价值的方法中,多数情况下会采用 ε-贪婪策略 来处理探索与利用的平衡问题;
    如上所述,我们有两种基于价值的函数:

状态价值函数

我们将策略π下的状态价值函数写作:
在这里插入图片描述
对于每个状态,状态价值函数输出智能体从该状态开始并随后始终遵循策略(若您倾向于理解为所有未来时间步)所能获得的期望回报。
在这里插入图片描述
如果我们观察价值为-7的状态:它表示从该状态开始,按照我们的策略(贪婪策略)采取行动后的预期回报,即向右、向右、向右、向下、向下、向右、向右。

动作价值函数

在动作价值函数中,对于每个状态和动作的组合,该函数会输出预期回报 ,前提是智能体从该状态开始,采取该动作,并在此后始终遵循策略。

在策略 π 下,于状态 s 采取动作 a 的价值为:
在这里插入图片描述
在这里插入图片描述
我们发现区别在于:

  • 对于状态价值函数,我们计算 某个状态 S t S_t St 的价值
  • 对于动作价值函数,我们计算 状态-动作对( S t S_t St, A t A_t At )的价值,即在特定状态下采取该动作的价值
    在这里插入图片描述

注意:在动作价值函数的示例中,我们并未填满所有状态-动作对

无论选择哪种价值函数(状态价值函数或动作价值函数), 返回的值都是期望回报

然而,问题在于要计算某个状态或状态-动作对的每一个值,我们需要累加智能体从该状态开始所能获得的所有奖励
这可能是一个计算成本高昂的过程,而这正是贝尔曼方程发挥作用的地方

贝尔曼方程:简化价值估计

贝尔曼方程简化了我们的状态价值或状态-行动价值计算
在这里插入图片描述
根据目前所学知识,我们知道如果计算 V ( S t ) V(S_t) V(St)(某个状态的价值),需要计算从该状态开始并永远遵循策略的回报。(以下示例中我们定义的策略是贪婪策略;为简化起见,我们不进行奖励折扣)。

因此要计算 V ( S t ) V(S_t) V(St),需要计算期望奖励的总和。故:
在这里插入图片描述

计算状态1的价值:若智能体从该状态出发,并在所有时间步始终遵循贪婪策略(选择能导向最佳状态价值的行动),所获奖励的总和。

接下来,为了计算 V ( S t + 1 ) V(S_{t+1}) V(St+1),我们需要从该状态𝑆开始计算回报 𝑡 + 1 S t + 1 ​ 𝑡 + 1 S_{t+1}​ t+1St+1.
在这里插入图片描述

要计算状态 2 的价值: 如果智能体从该状态开始 ,并始终遵循策略所获得的奖励总和。

你可能已经注意到,我们在重复计算不同状态的价值,如果需要为每个状态价值或状态-行动价值都这样做,会非常繁琐。

无需分别计算每个状态或每个状态-行动对的期望回报, 我们可以使用贝尔曼方程 。(提示:如果你了解动态规划,这与它非常相似!如果不了解也没关系!)

贝尔曼方程是一个递归方程,其工作原理如下:我们无需从初始状态开始逐个计算回报,而是可以将任何状态的价值视为:

即时奖励 R t + 1 R_{t+1} Rt+1​加上后续状态的折现价值 γ ∗ V ( S t + 1 ) γ∗V(S_{t+1} ) γV(St+1)

在这里插入图片描述
回到我们的示例,可以说状态1的价值等于从该状态出发所能获得的期望累积回报。
在这里插入图片描述
要计算状态 1 的价值:智能体从状态 1 开始并持续遵循策略执行所有时间步所获得奖励的总和。

这等价于 V ( S t ) V(S_t) V(St) = 即时奖励 R t + 1 ​ R_{t+1}​ Rt+1+ 下一状态的折现价值 γ ∗ V ( S t + 1 ) γ∗V(S_{t+1}) γV(St+1)
在这里插入图片描述

为简化起见,此处我们不进行折现,因此 gamma = 1。

回顾一下,贝尔曼方程的核心思想是:与其将每个价值计算为预期回报的总和(这是一个漫长的过程),我们将其计算为即时奖励加上后续状态的折现价值的总和

在进入下一节之前,思考一下 gamma 在贝尔曼方程中的作用。如果 gamma 的值非常低(例如 0.1 甚至 0)会发生什么?如果值为 1 会发生什么?如果值非常高,比如一百万,又会发生什么?

蒙特卡洛与时序差分学习

请记住,强化学习智能体通过与环境的互动进行学习。 其核心思想是: 基于获得的经验和接收到的奖励,智能体将更新其价值函数或策略

蒙特卡洛法和时序差分学习是两种不同的训练价值函数或策略函数的策略。 两者都利用经验来解决强化学习问题

一方面,蒙特卡洛法需要使用完整回合的经验才开始学习。 另一方面,时序差分学习仅需单步经验 ( S t , A t , R t + 1 , S t + 1 ) (S_t,A_t,R_{t+1},S_{t+1}) (St,At,Rt+1,St+1)即可进行学习

我们将通过基于价值的方法示例来解释这两者。

蒙特卡洛:在回合结束时进行学习

蒙特卡洛等待回合结束,计算 G t ​ G_t​ Gt(回报)并将其用作 更新 V ( S t ) V(S_t) V(St) 的目标

因此, 在更新价值函数之前,需要完成一个完整的交互回合
在这里插入图片描述
以具体示例说明:
在这里插入图片描述

  • 我们总是从相同的起始点开始每个回合
  • 智能体根据策略采取行动 。例如采用ε-贪婪策略,这是一种在探索(随机行动)和利用(择优行动)之间交替进行的策略。
  • 我们得到奖励和下一个状态
  • 如果猫吃掉老鼠或老鼠移动超过10步,我们就终止该回合
  • 在回合结束时, 我们有一个包含状态、动作、奖励和下一状态元组的列表 例如[[状态砖块3底部,向左移动,+1,状态砖块2底部], [状态砖块2底部,向左移动,+0,状态砖块1底部]…]
  • 智能体将汇总总奖励 G t G_t Gt​(以观察其表现如何)。
  • 然后它将根据公式更新 V ( s t ) V(s_t) V(st)
    在这里插入图片描述
  • 接着基于这个新知识开始新一轮游戏

通过运行越来越多的回合, 智能体将学会玩得越来越好。
在这里插入图片描述
例如,如果我们使用蒙特卡洛方法训练状态价值函数:

  • 我们初始化价值函数使其为每个状态返回 0 值
  • 我们的学习率(lr)为 0.1,折扣率为 1(即无折扣)
  • 我们的老鼠探索环境并采取随机行动

在这里插入图片描述

  • 老鼠移动了超过10步,因此该回合结束
    在这里插入图片描述
  • 我们有一个包含状态、行动、奖励、下一个状态的列表, 我们需要计算回报 G t = 0 G_t=0 Gt=0
    G t ​ = R t + 1 ​ + R t + 2 + R t + 3 . . . G_t​ =R_{t+1}​ +R_{t+2} +R_{t+3} ... Gt=Rt+1+Rt+2+Rt+3... (为简化起见,我们不对奖励进行折现) G 0 = R 1 ​ + R 2 + R 3 … G_0 =R_1​ +R_2 +R_3 … G0=R1+R2+R3 G 0 = 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 G_0=1+0+0+0+0+0+1+1+0+0 G0=1+0+0+0+0+0+1+1+0+0 G 0 = 3 G_0=3 G0=3
  • 我们现在可以计算新的 V ( S 0 ) V(S_0) V(S0)
    在这里插入图片描述
    V ( S 0 ) = V ( S 0 ) + l r ∗ [ G 0 − V ( S 0 ) ] = 0 + 0.1 ∗ [ 3 – 0 ] = 0.3 V(S_0)=V(S_0)+lr∗[G_0-V(S_0)]=0+0.1∗[3–0]=0.3 V(S0)=V(S0)+lr[G0V(S0)]=0+0.1[3–0]=0.3
    在这里插入图片描述

时序差分学习:每一步都在学习

而时序差分则只需等待一次交互(一个步骤) S t + 1 S_{t+1} St+1​形成 TD 目标并使用 R 更新
V ( S t ) V(S_t) V(St) R t + 1 ​ R_{t+1}​ Rt+1 γ ∗ V ( S t + 1 ) γ∗V(S_{t+1}) γV(St+1)

时序差分法的思路是在每一步更新 V ( S t ) V(S_t) V(St)
但由于我们没有经历完整的回合,所以没有 G t ​ G_t​ Gt(预期回报)。相反, 我们通过将
R t + 1 R_{t+1} Rt+1 与下一个状态的折现值相加来估计 G t G_t Gt

这被称为自举法。之所以这样命名,是因为时序差分学习(TD)的更新部分基于现有的估计值
V ( S t + 1 ) V(S_{t+1}) V(St+1) ,而不是一个完整的样本 G t G_t Gt
在这里插入图片描述
这种方法被称为 TD(0)或单步时序差分(在任何单步后更新价值函数)
在这里插入图片描述
如果我们采用同样的例子,
在这里插入图片描述

  • 我们将价值函数初始化为每个状态返回0值。
  • 我们的学习率(lr)为 0.1,折扣率为 1(无折扣)。
  • 我们的老鼠开始探索环境并采取随机行动: 向左移动
  • 它获得了奖励 R t + 1 = 1 R_{t+1} =1 Rt+1=1 ,因为 它吃了一块奶酪

在这里插入图片描述
在这里插入图片描述
我们现在可以更新 V ( S 0 ) V(S_0) V(S0)
V ( S 0 ) = V ( S 0 ) + l r ∗ [ R 1 + γ ∗ V ( S 1 ) − V ( S 0 ) ] V(S_0)=V(S_0)+lr∗[R_1+γ∗V(S_1)−V(S_0 )] V(S0)=V(S0)+lr[R1+γV(S1)V(S0)]
V ( S 0 ) = 0 + 0.1 ∗ [ 1 + 1 ∗ 0 – 0 ] V(S_0)=0+0.1∗[1+1∗0–0] V(S0)=0+0.1[1+10–0]
V ( S 0 ) = 0.1 V(S_0)=0.1 V(S0)=0.1
因此我们刚刚更新了状态0的价值函数。

现在我们继续使用更新后的价值函数与环境进行交互
在这里插入图片描述
总而言之:

  • 使用蒙特卡洛方法时,我们根据完整回合更新价值函数,因此采用该回合实际准确的折现回报
  • 使用时序差分学习时,我们根据单步更新价值函数,并用 G t G_t Gt​我们用一个称为 TD 目标的估计回报来替代未知的部分。

在这里插入图片描述

中场回顾

我们有两种基于价值的函数:

  • 状态价值函数:输出预期回报,如果智能体从给定状态开始,并从此永远根据策略行动
  • 动作价值函数:输出预期回报,如果智能体从给定状态开始,在该状态采取给定动作 并从此永远根据策略行动。
  • 在基于价值的方法中,我们不学习策略,而是手动定义策略并学习价值函数。如果我们拥有最优价值函数,就能获得最优策略

更新价值函数的方法分为两类:

  • 使用蒙特卡洛方法时,我们根据完整回合更新价值函数,因此采用该回合的实际折现回报
  • 使用时序差分学习方法时,我们通过单步更新价值函数,用估计值替代未知的回报 G t G_t Gt, ​使用一个称为 TD 目标的估计回报

在这里插入图片描述

Q-Learning

什么是 Q-Learning?

Q 学习是一种基于价值的离线策略方法,采用时序差分(TD)方法来训练其动作价值函数:

  • 离策略 :我们将在本单元末尾讨论这一点。
  • 基于价值的方法:通过训练一个价值函数或动作价值函数来间接找到最优策略,该函数将告诉我们每个状态或每个状态-动作对的值
  • 时序差分方法: 在每一步都更新其动作价值函数,而不是等到 episode 结束时才更新

Q 学习是我们用来训练 Q 函数的算法 ,这是一种动作价值函数 ,用于确定在特定状态下采取特定动作的价值。
在这里插入图片描述
给定一个状态和动作,我们的 Q 函数会输出一个状态-动作值(也称为 Q 值)

Q 代表该状态下该动作的“质量”(即价值)
让我们回顾一下价值与奖励之间的区别:

  • 状态的价值或状态-动作对的价值 ,是指智能体从该状态(或状态-动作对)开始,并按照其策略行动时所能获得的预期累积奖励。
  • 奖励是智能体在某个状态下执行动作后, 从环境中获得的反馈

在内部,我们的 Q 函数通过一个 Q 表编码,该表中的每个单元格对应一个状态-动作对的值。 可以将这个 Q 表视为我们 Q 函数的记忆或速查表
让我们通过一个迷宫的例子来说明。
在这里插入图片描述
Q 表已被初始化,因此所有值都等于 0。该表包含每个状态和动作对应的状-动作值。 对于这个简单的例子,状态仅由老鼠的位置定义。因此,我们的 Q 表有 2*3 行,每行对应老鼠的每一个可能位置。在更复杂的情形中,状态可能包含比行动者位置更多的信息。
在这里插入图片描述
在这里我们看到,初始状态并向上行动的状态-动作值为0:

在这里插入图片描述
因此:Q 函数使用一个 Q 表, 其中包含每个状态-动作对的值。 给定一个状态和动作, 我们的 Q 函数会在其 Q 表中查询并输出对应的值
在这里插入图片描述
如果我们回顾一下,Q 学习 是以下强化学习算法

  • 训练一个 Q 函数 (一种动作价值函数 ),其内部是一个包含所有状态-动作对值的 Q 表
  • 给定一个状态和动作,我们的 Q 函数将在其 Q 表中查找对应的值
  • 训练完成后, 我们得到了最优的 Q 函数,这意味着我们拥有了最优的 Q 表
  • 如果我们具有最优的 Q 函数 ,那么我们就拥有最优策略 ,因为我们将知道在每个状态下应采取的最佳行动
    在这里插入图片描述
    最初, 我们的 Q 表是无用的,因为它为每个状态-动作对赋予了任意的值 (在大多数情况下,我们会将 Q 表初始化为 0)。随着智能体探索环境并我们更新 Q 表 ,它將为我们提供越来越接近最优策略的近似值。
    在这里插入图片描述
    在这里我们看到,经过训练后,我们的 Q 表变得更加完善,因为它能使我们知晓每个状态-动作对的值。

现在我们已经了解了 Q-Learning、Q 函数和 Q 表是什么, 让我们更深入地探究 Q-Learning 算法 。

Q-Learning 算法

这是 Q-Learning 的伪代码;让我们逐一研究每一部分, 在实现之前通过一个简单示例来看它是如何工作的。 别被它吓到,它比看起来简单多了!我们将一步步讲解。
在这里插入图片描述

步骤 1:我们初始化 Q 表

在这里插入图片描述
我们需要为每个状态-动作对初始化 Q 表。 大多数情况下,我们使用 0 作为初始值。

步骤 2:使用 epsilon-greedy 策略选择动作

在这里插入图片描述
epsilon-贪心策略是一种处理探索与利用权衡的策略。
其思路是,初始值设为 ϵ = 1.0 \epsilon = 1.0 ϵ=1.0

  • 以概率 1 − ϵ 1 - \epsilon 1ϵ :我们进行利用 (即智能体选择具有最高状态-动作对价值的动作)。
  • 以概率 ϵ \epsilon ϵ: 我们进行探索 (尝试随机动作)。

在训练开始时, 由于 ɛ 值非常高,探索的概率会非常大,因此大多数时候我们将进行探索。 但随着训练的进行,我们的 Q 表格对其估算变得越来越好,我们会逐渐降低 epsilon 值 ,因为我们所需的探索越来越少,而利用越来越多。
在这里插入图片描述

步骤 3:执行动作 At,获得奖励 Rt+1 和下一个状态 St+1

在这里插入图片描述

步骤 4:更新 Q(St, At)

记住,在时序差分学习中,我们会在一次交互步骤后更新我们的策略或价值函数(具体取决于我们选择的强化学习方法)。

为了生成我们的 TD 目标, 我们使用了即时奖励加上下一状态的折扣价值 ,该值通过在下一状态中寻找能使当前 Q 函数最大化的动作来计算。(我们称此为自举)
在这里插入图片描述
因此,我们的 Q ( S t , A t ) Q(S_t,A_t) Q(St,At) 更新公式如下
在这里插入图片描述
这意味着要更新我们的 Q ( S t , A t ) Q(S_t,A_t) Q(St,At)

  • 我们需要 S t ​ , A t , R t + 1 , S t + 1 S_t​,A_t,R_{t + 1} , S_{t + 1} St,At,Rt+1,St+1
  • 为了更新给定状态-动作对的 Q 值,我们使用 TD 目标。

我们如何构建 TD 目标?

  1. 我们获得奖励 R t + 1 R_{t + 1} Rt+1 在执行动作 A t A_t At 之后
  2. 为了获得下一个状态的最优状态-动作对值 ,我们采用贪心策略选择下一个最优动作。请注意,这不是ε-贪心策略,而是始终选择具有最高状态-动作值的动作。

当这个 Q 值的更新完成后,我们进入一个新状态,并再次使用 epsilon-greedy 策略 选择动作。

离线策略与在线策略

区别非常微妙:

  • 离线策略 :使用不同的策略进行行为(推断)和更新(训练)

例如,在 Q 学习中,ε-贪婪策略(行为策略)与用于选择最佳下一个状态动作值以更新我们 Q 值(更新策略)的贪婪策略不同。
行为策略:
在这里插入图片描述

与我们在训练阶段使用的策略不同:
更新策略:
在这里插入图片描述

  • 在线策略:使用相同的策略进行动作选择和更新。

例如,对于另一种基于价值的算法 Sarsa,epsilon-贪婪策略选择下一个状态-动作对,而非贪心策略。
在这里插入图片描述

在这里插入图片描述

Q-Learning 示例

为了更好地理解 Q-Learning,我们来看一个简单的例子:

在这里插入图片描述

  • 你是一只在这小型迷宫中的老鼠。你总是从同一个起点出发
  • 目标是吃掉右下角的一大堆奶酪 ,并避开毒药。毕竟,谁不喜欢奶酪呢?
  • 当我们吃到毒药、 吃掉那一大堆奶酪 ,或移动超过五步时,这一幕就结束了。
  • 学习率为 0.1
  • 折扣率(gamma)为 0.99

在这里插入图片描述
奖励函数如下所示:

  • +0: 进入一个没有奶酪的状态
  • +1: 进入有一个小奶酪的状态。
  • +10: 进入有一个大奶酪堆的状态。
  • -10: 进入有毒药的状态,因而死亡。
  • +0: 如果我们走了超过五步。

在这里插入图片描述
为了训练我们的智能体获得最优策略(即“右、右、下”的策略), 我们将使用 Q 学习算法 。

步骤 1:初始化 Q 表

在这里插入图片描述
目前, 我们的 Q 表毫无用处 ;我们需要通过 Q 学习算法来训练我们的 Q 函数 。

让我们进行两个训练时间步:

训练时间步 1:

步骤2:使用ε-贪婪策略选择一个动作

由于 epsilon 较大(= 1.0),我采取一个随机动作。在这种情况下,我向右移动。
在这里插入图片描述

步骤 3:执行动作 At,获得奖励 Rt+1 和下一个状态 St+1

向右走,我会得到一小块奶酪,因此 R t + 1 = 1 R_{t+1} =1 Rt+1=1 ,并且我进入了一个新状态。
在这里插入图片描述

步骤 4:更新 Q(St, At)

现在我们可以使用公式来更新 Q ( S t , A t ) Q(S_t ,A_t) Q(St,At)
在这里插入图片描述
在这里插入图片描述

训练时间步 2:

步骤2:使用ε-贪婪策略选择一个动作

我再次采取了一个随机动作,因为ε=0.99 的值较大 。(注意:我们略微减小了ε的值,因为随着训练的进行,我们希望探索的程度逐渐降低)。

我采取了“向下”的动作。 这不是一个好动作,因为它使我进入了毒药区域。
在这里插入图片描述

步骤 3:执行动作 At,获得奖励 Rt+1 和下一个状态 St+1

因为我吃了毒药, 我得到 R t + 1 = − 10 R_{t+1} =−10 Rt+1=10 的奖励,然后死亡。
在这里插入图片描述

步骤 4:更新 Q(St, At)

在这里插入图片描述
由于我们已经死亡,将开始新一轮的回合。但在这里可以看到, 仅仅通过两步探索,我的智能体已经变得更聪明了。

随着我们继续在环境中探索与利用,并使用 TD 目标来更新 Q 值,Q 表将给出越来越精确的近似结果。在训练结束时,我们将得到最优 Q 函数的估计值。

Q-Learning 回顾

Q-Learning 是一种强化学习算法,它 :

  • 训练一个 Q 函数 ,即一种动作价值函数 ,该函数在内部存储器中以 Q 表的形式编码,包含所有状态-动作对的值

  • 给定一个状态和动作,我们的 Q 函数将在其 Q 表中查找相应的值

在这里插入图片描述

  • 当训练完成后, 我们就得到了一个最优 Q 函数,或者说等价地,一个最优 Q 表

  • 而如果我们拥有一个最优 Q 函数 ,就相当于拥有一个最优策略,因为我们知道在每个状态下应采取的最佳动作

在这里插入图片描述
但是,一开始我们的 Q 表是无用的,因为它为每个状态-动作对提供了任意的值(大多数情况下我们将 Q 表初始化为 0 值)。然而,随着我们不断探索环境并更新 Q 表,它会为我们提供越来越精确的估计。
在这里插入图片描述
这是 Q 学习的伪代码:

在这里插入图片描述

术语

寻找最优策略的方法

  • 基于策略的方法。 策略通常通过神经网络进行训练,以根据给定状态选择应执行的动作。在这种情况下,由神经网络直接输出智能体应采取的动作,而不是使用值函数。根据从环境中获得的经验,神经网络将被重新调整,从而提供更优的动作。
  • 基于值的方法。 在这种方法中,训练一个值函数来输出某个状态或状态-动作对的值,这些值将代表我们的策略。然而,该值本身并不直接定义智能体应采取什么动作。相反,我们需要根据值函数的输出来明确智能体的行为方式。例如,我们可以决定采用一种策略,总是选择能带来最大奖励的动作(贪婪策略)。总之,该策略是一种贪婪策略(或用户设定的其他决策方式),利用值函数提供的数值来决定应采取的动作。

在基于价值的方法中,我们可以找到两种主要策略

  • 状态价值函数。 对于每个状态,状态价值函数表示如果智能体从该状态开始并遵循策略直到结束所能获得的期望回报。
  • 动作价值函数。 与状态价值函数不同,动作价值函数计算的是:如果智能体从某个状态开始,采取某个特定动作,之后一直遵循策略,所能获得的期望回报。

ε-贪婪策略

  • 强化学习中常用的一种策略,涉及探索与利用之间的平衡。
  • 以 1-epsilon 的概率选择预期奖励最高的动作。
  • 以 epsilon 的概率随机选择动作。
  • 通常随着时间推移减小 epsilon 值,以逐步转向更侧重于利用的策略。

贪婪策略

  • 基于当前对环境的认知,总是选择预期能带来最高奖励的动作。(仅利用)
  • 始终选择预期奖励最高的动作。
  • 不包含任何探索。
  • 在具有不确定性或未知最优动作的环境中可能会处于劣势。

离策略与在线策略算法

  • 离策略算法: 训练时和推理时使用不同的策略
  • 在线策略算法: 训练和推理期间使用相同的策略

蒙特卡洛与时序差分学习策略

  • 蒙特卡洛(MC): 在回合结束时进行学习。使用蒙特卡洛方法时,我们需等到一个回合结束,然后基于完整的回合经验来更新价值函数(或策略函数)。
  • 时序差分(TD): 在每一步进行学习。使用时序差分学习时,我们在每一步都更新价值函数(或策略函数),而无需等待回合完成。

动手实践

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍基于Matlab代码实现的四轴飞行器动力学建模与仿真方法。研究构建了考虑非线性特性的飞行器数学模型,涵盖姿态动力学与运动学方程,实现了三自由度(滚转、俯仰、偏航)的精确模拟。文中详细阐述了系统建模过程、控制算法设计思路及仿真结果分析,帮助读者深入理解四轴飞行器的飞行动力学特性与控制机制;同时,该模拟器可用于算法验证、控制器设计与教学实验。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及无人机相关领域的工程技术人员,尤其适合从事飞行器建模、控制算法开发的研究生和初级研究人员。; 使用场景及目标:①用于四轴飞行器非线性动力学特性的学习与仿真验证;②作为控制器(如PID、LQR、MPC等)设计与测试的仿真平台;③支持无人机控制系统教学与科研项目开发,提升对姿态控制与系统仿真的理解。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点关注动力学方程的推导与实现方式,动手运行并调试仿真程序,以加深对飞行器姿态控制过程的理解。同时可扩展为六自由度模型或加入外部干扰以增强仿真真实性。
基于分布式模型预测控制DMPC的多智能体点对点过渡轨迹生成研究(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制(DMPC)的多智能体点对点过渡轨迹生成研究”展开,重点介绍如何利用DMPC方法实现多智能体系统在复杂环境下的协同轨迹规划与控制。文中结合Matlab代码实现,详细阐述了DMPC的基本原理、数学建模过程以及在多智能体系统中的具体应用,涵盖点对点转移、避障处理、状态约束与通信拓扑等关键技术环节。研究强调算法的分布式特性,提升系统的可扩展性与鲁棒性,适用于多无人机、无人车编队等场景。同时,文档列举了大量相关科研方向与代码资源,展示了DMPC在路径规划、协同控制、电力系统、信号处理等多领域的广泛应用。; 适合人群:具备一定自动化、控制理论或机器人学基础的研究生、科研人员及从事智能系统开发的工程技术人员;熟悉Matlab/Simulink仿真环境,对多智能体协同控制、优化算法有一定兴趣或研究需求的人员。; 使用场景及目标:①用于多智能体系统的轨迹生成与协同控制研究,如无人机集群、无人驾驶车队等;②作为DMPC算法学习与仿真实践的参考资料,帮助理解分布式优化与模型预测控制的结合机制;③支撑科研论文复现、毕业设计或项目开发中的算法验证与性能对比。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注DMPC的优化建模、约束处理与信息交互机制;按文档结构逐步学习,同时参考文中提及的路径规划、协同控制等相关案例,加深对分布式控制系统的整体理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值