强化学习的理论基础——马尔可夫决策过程与时序差分算法
马尔可夫决策过程(Markov Decision Process,简称MDP)是一种数学模型,用于描述随机的决策过程。马尔可夫决策过程是一种基于马尔可夫链的扩展模型,它包含一个决策者和一个环境。在每个时间步骤中,决策者采取一个动作来影响环境,环境则反馈奖励和下一个状态。目标是找到一个策略(即在每个状态下选择哪个动作),以使得总奖励最大化。马尔可夫决策过程具有“无记忆性”,即当前状态只与前一状态有关,而与之前的历史状态无关。这一特点使得马尔可夫决策过程能够简化决策问题的复杂性。
马尔可夫决策过程由五个要素组成:
- 状态集合(S):所有可能的状态的集合。
- 行动集合(A):所有可能的行动的集合。
- 转移概率(P):从一个状态到另一个状态的概率。
- 奖励函数(R):在每个状态和行动上给出的即时奖励。
- 折扣因子(γ):将未来奖励的价值折现到现在的系数。
马尔可夫决策过程的求解问题是找到一个最优策略,即在每个状态下选择一个行动,使得期望累积奖励最大化。
时序差分算法(Temporal-Difference Learning,简称TD算法)是一种结合了动态规划和蒙特卡罗方法的强化学习算法。它可以从不完整的样本中学习,并且不需要事先知道环境的状态转移函数和奖励函数。时序差分算法通过估计当前状态和未来状态之间的差异,即“时序差分”,来自适应地调整策略。它结合了动态规划的bootstrapping特性和蒙特卡罗方法的采样特性,使得学习过程更加高效。
注意:本文用到了PyTorch库,gym强化学习环境库,需要提前安装。
- gym环境安装:https://github.com/Farama-Foundation/Gymnasium
- gym环境介绍文档:https://gymnasium.farama.org/environments/classic_control/mountain_car/
- pytorch官网:https://pytorch.org/
本文所使用的python版本为3.11.8
马尔可夫决策过程
马尔可夫过程
随机过程(stochastic process)是概率论的“动力学”部分。概率论的研究对象是静态的随机现象,而随机过程则研究随时间演变的随机现象(例如天气随时间的变化、城市交通随时间的变化)。
在随机过程中,随机现象在某时刻 t t t的取值是一个向量随机变量,用 S ( t ) S(t) S(t)表示,所有可能的状态组成状态集合 S S S。随机现象便是状态的变化过程。在某时刻 t t t的状态 S ( t ) S(t) S(t)通常取决于 t t t时刻之前的状态。我们将已知历史信息 H ( t ) H(t) H(t)时,下一个时刻 t + 1 t+1 t+1状态为 S ( t + 1 ) S(t+1) S(t+1)的概率表示成 P ( S ( t + 1 ) ∣ H ( t ) ) P(S(t+1)|H(t)) P(S(t+1)∣H(t))。
用数学语言表达即:
P ( S ( t + 1 ) ∣ H ( t ) ) P(S(t+1)|H(t)) P(S(t+1)∣H(t))
其中, H ( t ) H(t) H(t)表示在时刻 t t t之前(含 t t t)的所有历史信息,可表示为 H ( t ) = { S ( t ) , S ( t − 1 ) , . . . , S ( 1 ) } H(t)=\{S(t),S(t-1),...,S(1)\} H(t)={S(t),S(t−1),...,S(1)}。
当且仅当某时刻的状态只取决于上一时刻的状态时,一个随机过程被称为具有马尔可夫性质(Markov property),用公式表示为:
P ( S ( t + 1 ) ∣ H ( t ) ) = P ( S ( t + 1 ) ∣ S ( t ) ) P(S(t+1)|H(t))=P(S(t+1)|S(t)) P(S(t+1)∣H(t))=P(S(t+1)∣S(t))
这意味着,如果一个随机过程满足马尔可夫性质,那么未来状态的概率分布仅依赖于当前状态,而与过去的状态无关。换句话说,给定现在,过去与未来是相互独立的。马尔可夫性质大大简化了随机过程的建模和预测,因为它允许我们忽略过去的大部分历史信息,而只关注当前状态。这使得许多复杂的随机现象可以通过相对简单的马尔可夫模型来进行描述和分析。在实际应用中,例如金融市场预测、天气预测、自然语言处理等领域,马尔可夫模型和具有马尔可夫性质的随机过程都发挥着重要作用。
- 马尔可夫性质的核心在于时间的一阶记忆性,强调的是对过去状态的遗忘,这有助于减少复杂度和计算成本。
- 它不仅适用于连续时间的过程(如布朗运动),也适用于离散时间的情况(如有限状态机)。
- 但在某些非平稳系统或者存在长期依赖的情况下,马尔可夫假设可能不再成立,这时需要更复杂的模型,如非线性马尔可夫模型或隐马尔可夫模型。
马尔可夫链(Markov chain)是一种特殊的随机过程,它具有马尔可夫性质,即未来状态的概率分布仅依赖于当前状态。在马尔可夫链中,时间和状态都是离散的,状态之间的转移由一个称为状态转移矩阵的概率矩阵来描述。
状态转移矩阵是马尔可夫链中描述从一个状态转移到另一个状态的概率矩阵。设马尔可夫链有 n n n 个可能的状态,状态转移矩阵 P P P 是一个 n × n n \times n n×n 的矩阵,其中 P i j P_{ij} Pij 表示从状态 i i i 转移到状态 j j j 的概率。状态转移矩阵可以表示为:
P = [ P 11 P 12 ⋯ P 1 n P 21 P 22 ⋯ P 2 n ⋮ ⋮ ⋱ ⋮ P n 1 P n 2 ⋯ P n n ] P = \begin{bmatrix} P_{11} & P_{12} & \cdots & P_{1n} \\ P_{21} & P_{22} & \cdots & P_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ P_{n1} & P_{n2} & \cdots & P_{nn} \\ \end{bmatrix} P= P11P21⋮Pn1P12P22⋮Pn2⋯⋯⋱⋯P1nP2n⋮Pnn
其中,每一行代表一个状态,每一列代表可能转移到的下一个状态。每一行的和必须为 1,因为从一个状态出发转移到其他所有可能状态的概率之和必须为 1。
马尔可夫奖励过程(Markov Reward Process)
在马尔可夫过程的基础上,通过引入奖励函数和折扣因子,我们可以得到马尔可夫奖励过程(Markov Reward Process,简称MRP)。这一过程不仅考虑了状态之间的转移概率,还考虑了从一个状态转移到另一个状态时获得的奖励,从而为分析和优化决策过程提供了更丰富的信息。
奖励函数(Reward Function)是马尔可夫奖励过程中的一个关键组成部分,它定义了从一个状态转移到另一个状态时获得的奖励值。具体来说,奖励函数 R ( s ) R(s) R(s)表示在到达状态 s s s时获得的即时奖励。这个奖励可以是正数(表示获得某种好处),也可以是负数(表示遭受某种损失)。
折扣因子(Discount Factor),通常用 γ γ γ(gamma)表示,是一个介于0和1之间的数值。它用于在计算长期回报时,对未来奖励进行折扣。折扣因子的引入是为了反映未来奖励与当前决策的时间间隔对回报的影响。随着时间的推移,未来奖励的重要性会逐渐降低。
马尔可夫奖励过程是一个包含 < S , P , R , γ > <S, P, R, γ> <S,P,R,γ>的元组,其中:
- S S S 是一个有限状态集。
- P P P 是状态转移概率矩阵,其中 P ( s ′ ∣ s ) P(s'|s) P(s′∣s)表示从状态 s s s转移到状态 s ′ s' s′的概率。
- R R R 是奖励函数, R ( s ) R(s) R(s)表示到达状态 s s s时的即时奖励。
- γ γ γ 是折扣因子,用于计算长期回报。
在马尔可夫奖励过程中,一个状态的回报(Return)是从该状态开始,未来所有奖励的折扣和。具体来说,对于一个给定的状态序列 s 0 , s 1 , s 2 , . . . , s n s_0, s_1, s_2, ..., s_n s0,s1,s2,...,sn,其回报 G t G_t Gt可以定义为:
G t = R ( S ( t ) ) + γ R ( S ( t + 1 ) ) + γ 2 R ( S ( t + 2 ) ) + . . . G_t = R(S(t)) + γR(S(t+1)) + γ^2R(S(t+2)) + ... Gt=R(S(t))+γR(S(t+1))+γ2R(S(t+2))+...
这里, G t G_t Gt表示从时刻 t t t开始的长期回报, R ( S ( t ) ) R(S(t)) R(S(t))表示在时刻 t t t到达状态 S ( t ) S(t) S(t)时获得的即时奖励, γ γ γ是折扣因子。
在马尔可夫奖励过程中,一个状态的期望回报(即从这个状态出发的未来累积奖励的期望)被称为这个状态的价值(value)。所有状态的价值就组成了价值函数(value function),价值函数的输入为某个状态,输出为这个状态的价值。
对于在 t t t时刻状态 S ( t ) = s S(t)=s S(t)=s,它的价值 V ( s ) V(s) V(s) 被定义为从状态 s s s 出发的未来累积奖励的期望:
V ( s ) = E [ G t ∣ S ( t ) = s ] = E [ R ( S ( t ) ) + γ R ( S ( t + 1 ) ) + γ 2 R ( S ( t + 2 ) ) + . . . ∣ S ( t ) = s ] = [ R ( s ) + γ V ( S ( t + 1 ) ) ∣ S ( t ) = s ] V(s) = \mathbb{E} \left[ G_t|S(t)=s \right] \\ = \mathbb{E} \left[ R(S(t)) + γR(S(t+1)) + γ^2R(S(t+2)) + ...|S(t)=s \right] \\ = \left[ R(s) + γV(S(t+1))|S(t)=s \right] V(s)=E[Gt∣S(t)=s]=E[R(S(t))+γR(S(t+1))+γ2R(S(t+2))+...∣S(t)=s]=[R(s)+γV(S(t+1))∣S(t)=s]
马尔可夫决策过程(Markov decision process)
马尔可夫过程和马尔可夫奖励过程均是描述系统状态如何随时间自发演变的随机模型。然而,当引入一个外部因素——我们称之为智能体(agent)的动作——来影响和改变这一随机过程时,便衍生出了马尔可夫决策过程(Markov decision process,简称MDP)。这个外界“刺激”或动作,为系统状态的转变提供了新的动力。简而言之,在原本描述状态自然转移的马尔可夫奖励过程(MRP)的基础之上,增添了由智能体产生的动作选择,从而形成了更加复杂且可控的马尔可夫决策过程(MDP)。马尔可夫决策过程是由一系列元素构成的元组,这些元素共同定义了状态空间 S S S、动作空间 A A A、转移概率 P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a)、奖励函数 R ( s , a ) R(s,a) R(s,a)以及可能的折扣因子 γ \gamma γ。这些元素共同影响着智能体如何在环境中通过动作选择来最大化长期回报。
智能体的策略(Policy),通常用 π π π来表示,是一个至关重要的函数, π ( a ∣ s ) π(a|s) π(a∣s)决定了在给定状态 s s s下智能体采取各个动作的概率。策略可以分为确定性策略(deterministic policy)和随机性策略(stochastic policy)两种。确定性策略在每一个特定状态下,都会确定地选择一个动作,这意味着对于某个状态 s s s,只有一个动作 a a a的概率是1,而其他所有动作的概率均为0。相反,随机性策略在给定状态下提供的是各个可能动作的概率分布,这意味着智能体会根据这个概率分布来随机选择一个动作执行。
在马尔可夫决策过程(MDP)中,与马尔可夫奖励过程(MRP)相比,动作的存在引入了一个新的维度,使得我们不仅需要考虑状态的价值,还需要考虑在特定状态下采取特定动作的价值。为此,我们额外定义了一个动作价值函数(action-value function),通常表示为 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)。
动作价值函数 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)衡量的是在策略 π \pi π下,从状态 s s s开始并采取动作 a a a的期望回报。可以表示为:
Q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] Q^{\pi}(s, a) = \mathbb{E}_{\pi}[G_t | S_t = s, A_t = a] Qπ(s,a)=Eπ[Gt∣St=s,At=a]
其中, G t G_t Gt表示从时间步 t t t开始的累积折扣回报, S t S_t St和 A t A_t At分别表示在时间步 t t t的状态和动作,而 E π [ ⋅ ] \mathbb{E}_{\pi}[\cdot] Eπ[⋅]表示在策略 π \pi π下的期望。
在马尔可夫决策过程(MDP)中,状态价值函数和动作价值函数是两个核心概念,它们之间存在着密切的关系。状态价值函数,通常表示为 V π ( s ) V^{\pi}(s) Vπ(s),衡量了在给定策略 π \pi π下,从状态 s s s开始的期望回报。而动作价值函数,表示为 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a),则衡量了在策略 π \pi π下,从状态 s s s开始并采取动作 a a a的期望回报。
这两者之间的关系为:
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V^{\pi}(s) = \sum_{a \in A} \pi(a | s) Q^{\pi}(s, a) Vπ(s)=a∈A∑π(a∣s)Qπ(s,a)
这个公式说明了状态的价值 V π ( s ) V^{\pi}(s) Vπ(s)是如何计算的。它是在给定策略 π \pi π下,状态 s s s中可能采取的所有动作 a a a的概率 π ( a ∣ s ) \pi(a | s) π(a∣s)与相应的动作价值 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)的乘积之和。换句话说,一个状态的价值是由该状态下所有可能动作的价值加权平均得到的,权重就是采取这些动作的概率。
这个关系式非常重要,因为它连接了状态价值和动作价值,使得我们可以在知道一个的情况下推算出另一个。在强化学习中,这有助于我们理解智能体的行为如何影响其所在状态的价值,并且是许多算法(如值迭代、策略迭代等)的基础。
使用策略 π \pi π时,状态 s s s下采取动作 a a a的价值 Q ( s , a ) Q(s,a) Q(s,a)等于即时奖励 R ( s , a ) R(s, a) R(s,a)加上经过衰减后的所有可能的下一个状态的状态转移概率与相应的价值的乘积:
Q ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V ( s ′ ) Q(s,a) = R(s,a) + γ\sum_{s' \in S} P(s'|s,a) V(s') Q(s,a)=R(s,a)+γs′∈S∑P(s′∣s,a)V(s′)
结合上述方程,我们可以推导出贝尔曼期望方程:
V π ( s ) = E π [ R t + γ V π ( S t + 1 ) ∣ S t = s ] = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) Q π ( s , a ) = E π [ R t + γ Q π ( S t + 1 , A t + 1 ) ∣ S t = s , A t = a ] = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) \begin{aligned} V^\pi(s) & =\mathbb{E}_\pi\left[R_t+\gamma V^\pi\left(S_{t+1}\right) \mid S_t=s\right] \\ & =\sum_{a \in A} \pi(a \mid s)\left(R(s, a)+\gamma \sum_{s^{\prime} \in S} p\left(s^{\prime} \mid s, a\right) V^\pi\left(s^{\prime}\right)\right) \\ Q^\pi(s, a) & =\mathbb{E}_\pi\left[R_t+\gamma Q^\pi\left(S_{t+1}, A_{t+1}\right) \mid S_t=s, A_t=a\right] \\ & =R(s, a)+\gamma \sum_{s^{\prime} \in S} p\left(s^{\prime} \mid s, a\right) \sum_{a^{\prime} \in A} \pi\left(a^{\prime} \mid s^{\prime}\right) Q^\pi\left(s^{\prime}, a^{\prime}\right) \end{aligned} Vπ(s)Qπ(s,a)=Eπ[Rt+γVπ(St+1)∣St=s]=a∈A∑π(a∣s)(R(s,a)+γs′∈S∑p(s′∣s,a)Vπ(s′))=Eπ[Rt+γQπ(St+1,At+1)∣St=s,At=a]=R(s,a)+γs′∈S∑p(s′∣s,a)a′∈A∑π(a′∣s′)Qπ(s′,a′)
时序差分算法
时序差分(Temporal-Difference, TD)算法是一种结合了蒙特卡罗(MC)和动态规划(DP)的强化学习方法。它允许智能体在没有完整知识的情况下进行学习,通过不断地更新估计值来逼近最优策略。时序差分算法的核心思想是利用当前估计值和即时奖励来更新下一个状态的估计值,从而逐步逼近最优策略。
Sarsa算法
Sarsa算法是一种基于时序差分的强化学习算法,它使用当前策略来选择动作,并使用当前策略的估计值来更新下一个状态的估计值。Sarsa算法的更新规则如下:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t)] Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]
其中, S t S_t St和 A t A_t At分别是时间步 t t t的状态和动作, R t + 1 R_{t+1} Rt+1是时间步 t + 1 t+1 t+1的即时奖励, γ \gamma γ是折扣因子, α \alpha α是学习率。
Q-Learning算法
Q-Learning算法也是一种基于时序差分的强化学习算法,但它使用目标策略来选择动作,并使用目标策略的估计值来更新下一个状态的估计值。Q-Learning算法的更新规则如下:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [R_{t+1} + \gamma \max_{a} Q(S_{t+1}, a) - Q(S_t, A_t)] Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)]
其中, S t S_t St和 A t A_t At分别是时间步 t t t的状态和动作, R t + 1 R_{t+1} Rt+1是时间步 t + 1 t+1 t+1的即时奖励, γ \gamma γ是折扣因子, α \alpha α是学习率。
接下来我们导入悬崖漫步(Cliff Walking)环境来实验Sarsa和Q-Learning算法。
gym库中的Cliff Walking环境是一个经典的强化学习环境,用于模拟智能体在一个网格世界中的行走任务,主要组成部分为:
-
网格世界:Cliff Walking环境通常表示为一个4x12的网格世界。每个网格代表一个状态,智能体在这些状态之间移动。
-
起点与终点:智能体的起点通常位于网格的左下角,而终点(或称为目标点)位于右下角。
-
动作空间:在每个状态中,智能体可以采取四种动作:上、下、左、右移动。如果智能体尝试移动到网格的边界之外,它将保持在原地。
-
悬崖与惩罚:网格的底部一行(除了起点和终点)被设定为悬崖。如果智能体走入悬崖,它将获得一个大的负奖励(-100),并被重置回起点。
-
步骤奖励:除了掉入悬崖的惩罚外,智能体每移动一步都会获得-1的奖励,这鼓励智能体尽快找到通往终点的最优路径。
智能体的目标是通过学习找到一条从起点到终点的最优路径,以最小化到达目标所需的步数,并最大化累积奖励。在Cliff Walking环境中,强化学习算法如Q-Learning等常被用于训练智能体。这些算法通过让智能体不断尝试不同的路径,并根据获得的奖励来更新其策略,以找到最优的行动方案。
官方地址:https://gymnasium.farama.org/environments/toy_text/cliff_walking/
import gymnasium as gym
import matplotlib.pyplot as plt
%matplotlib inline
from IPython import display
import timedef show_state(env, step=0, info=""):plt.figure(3)plt.clf()plt.imshow(env.render())plt.title("Step: %d %s" % (step, info))plt.axis('off')display.clear_output(wait=True)display.display(plt.gcf())env = gym.make('CliffWalking-v0', render_mode='rgb_array') # 创建'CliffWalking-v0'环境
state, info = env.reset()
for _ in range(12):action = env.action_space.sample() # 随机选择一个动作state, reward, terminated, truncated, info = env.step(action)done = truncated or terminatedshow_state(env, action, info)time.sleep(0.5)if done:state, info = env.reset()
env.close()
接下来,我们设计一个时序差分算法来求解悬崖漫步问题。
import torchclass TD:def __init__(self, env, alpha=0.1, gamma=0.9, epsilon=0.1):'''时序差分算法'''self.env = env # 环境self.alpha = alpha # 学习率self.gamma = gamma # 折扣因子self.epsilon = epsilon # 探索率self.Q = torch.ones((env.observation_space.n, env.action_space.n)) # Q值表def choose_action(self, state):'''选择动作'''if torch.rand(1) < self.epsilon: # 以epsilon的概率随机选择动作action = torch.randint(0, self.env.action_space.n, (1,)).item() # 随机选择动作else: # 以1-epsilon的概率选择最优动作action = torch.argmax(self.Q[state]).item() # 选择Q值最大的动作return actiondef choose_action_greedy(self, state):'''选择最优动作'''action = torch.argmax(self.Q[state]).item() # 选择Q值最大的动作return actiondef update_QLearning(self, state, action, reward, next_state, done):'''以Q-Learning算法更新Q值'''if done: # 如果到达终点或掉入悬崖target = reward # 目标Q值为即时奖励else: # 如果未到达终点或掉入悬崖target = reward + self.gamma * torch.max(self.Q[next_state]) # 目标Q值为即时奖励加上折扣因子乘以下一个状态的Q值最大值self.Q[state, action] += self.alpha * (target - self.Q[state, action]) # 更新Q值def update_Sarsa(self, state, action, reward, next_state, next_action, done):'''以Sarsa算法更新Q值'''if done: # 如果到达终点或掉入悬崖target = reward # 目标Q值为即时奖励else: # 如果未到达终点或掉入悬崖target = reward + self.gamma * self.Q[next_state, next_action] # 目标Q值为即时奖励加上折扣因子乘以下一个状态的Q值最大值 self.Q[state, action] += self.alpha * (target - self.Q[state, action]) # 更新Q值def train(self, num_episodes, method='QLearning'):'''训练'''for episode in range(num_episodes): # 训练num_episodes个回合# 初始化环境state, info = self.env.reset() # 初始化状态action = self.choose_action(state) # 选择动作for t in range(100): # 每个回合最多进行100步next_state, reward, terminated, truncated, info = self.env.step(action) # 执行动作并观察下一个状态和奖励done = terminated or truncated # 判断是否到达终点或掉入悬崖next_action = self.choose_action(next_state) # 选择下一个动作# 更新Q值if method == 'QLearning':self.update_QLearning(state, action, reward, next_state, done) # 以Q-Learning算法更新Q值elif method == 'Sarsa':self.update_Sarsa(state, action, reward, next_state, next_action, done) # 以Sarsa算法更新Q值# 更新状态和动作state = next_state # 更新状态action = next_action # 更新动作if done: # 如果到达终点或掉入悬崖break # 结束回合
让我们来测试一下Q-Learning算法和Sarsa算法的性能。
Agent_QLearning = TD(env, gamma=0.9, alpha=0.1, epsilon=0.1) # 创建时序差分算法的Agent
Agent_QLearning.train(num_episodes=1000, method='QLearning') # 训练Q-Learning算法
可以看到,智能体很快就被训练完成,让我们看看智能体的表现吧!
env = gym.make('CliffWalking-v0', render_mode='rgb_array') # 创建'CliffWalking-v0'环境
state, info = env.reset()
for _ in range(15):action = Agent_QLearning.choose_action_greedy(state) # 选择动作state, reward, terminated, truncated, info = env.step(action)done = truncated or terminatedshow_state(env, action, info)time.sleep(0.5)if done:state, info = env.reset()
env.close()
可以看到,智能体以最优的路径完成了任务,让我们再测试一下Sarsa算法的性能。
Agent_Sarsa = TD(env, gamma=0.9, alpha=0.1, epsilon=0.1) # 创建时序差分算法的Agent
Agent_Sarsa.train(num_episodes=1000, method='Sarsa') # 训练Sarsa算法
env = gym.make('CliffWalking-v0', render_mode='rgb_array') # 创建'CliffWalking-v0'环境
state, info = env.reset()
for _ in range(20):action = Agent_Sarsa.choose_action_greedy(state) # 选择动作state, reward, terminated, truncated, info = env.step(action)done = truncated or terminatedshow_state(env, action, info)time.sleep(0.5)if done:state, info = env.reset()
env.close()
可以看到,对于悬崖漫步环境,Sarsa选择了一个更保守的策略,这可能是由于Sarsa算法在更新Q值时考虑了下一个动作的Q值,因此智能体会更倾向于选择更安全的动作。
时序差分(Temporal Difference,TD)算法是强化学习领域中的一种重要算法,特点主要体现在以下几个方面:
-
高效学习:时序差分算法通过比较当前状态和未来状态之间的差异进行学习,从而自适应地调整策略。这种方法结合了动态规划和蒙特卡罗方法的优点,能够在不完全信息环境中进行有效的学习,使智能体能够逐步优化其决策策略。
-
广泛应用:时序差分算法已被广泛应用于多个领域,如游戏AI训练、机器人路径规划与控制、智能交通等。在游戏领域,TD算法可以帮助游戏AI学习并优化策略,提升游戏体验。在机器人学领域,TD算法使得机器人能够在复杂环境中自主导航,完成各种任务。
-
无模型学习:时序差分算法是一种无模型的强化学习算法,这意味着它不需要事先知道环境的完整模型,而是通过与环境的交互来学习。这种特性使得时序差分算法在实际应用中具有更高的灵活性和适应性。
ence,TD)算法是强化学习领域中的一种重要算法,特点主要体现在以下几个方面: -
高效学习:时序差分算法通过比较当前状态和未来状态之间的差异进行学习,从而自适应地调整策略。这种方法结合了动态规划和蒙特卡罗方法的优点,能够在不完全信息环境中进行有效的学习,使智能体能够逐步优化其决策策略。
-
广泛应用:时序差分算法已被广泛应用于多个领域,如游戏AI训练、机器人路径规划与控制、智能交通等。在游戏领域,TD算法可以帮助游戏AI学习并优化策略,提升游戏体验。在机器人学领域,TD算法使得机器人能够在复杂环境中自主导航,完成各种任务。
-
无模型学习:时序差分算法是一种无模型的强化学习算法,这意味着它不需要事先知道环境的完整模型,而是通过与环境的交互来学习。这种特性使得时序差分算法在实际应用中具有更高的灵活性和适应性。