强化学习4-2

# 强化学习算法课程:策略迭代(Policy Iteration) 在本次课程中,我们将深入介绍策略迭代(Policy Iteration)算法。首先会阐述该算法的具体内容,接着分析其性质,最后探讨如何通过编程来实现。 ## 一、策略迭代算法概述 策略迭代算法起始于一个初始策略,用 \( \pi_0 \) 表示。这个初始策略可以是任意给定的,即便它可能不是一个好的策略也无妨,因为后续通过不断迭代,我们能够找到一个更优的策略。

每次迭代主要分为两个步骤: 1. **策略评估(Policy Evaluation)**:简称PE。给定一个策略 \( \pi \),通过求解对应的贝尔曼公式,得到该策略所对应的状态价值(State Value)。例如,已知初始策略 \( \pi_0 \),求解出 \( v_{\pi_0} \),这个过程就是对策略 \( \pi_0 \) 进行评估。 

2. **策略改进(Policy Improvement)**:在得到 \( v_{\pi_k} \) 后,通过求解一个优化问题得出新的策略 \( \pi_{k + 1} \)。新策略 \( \pi_{k + 1} \) 相较于 \( \pi_k \) 更优,这也是“策略改进”名称的由来。 整个迭代过程可以表示为:从初始猜测的策略 \( \pi_0 \) 开始,经过不断的迭代,产生 \( \pi_1 \) 与 \( v_{\pi_1} \)、\( \pi_2 \) 与 \( v_{\pi_2} \) 等等。 ## 二、关键问题解答 1. **如何求解状态价值(State Value)**:在进行策略评估时,若给定 \( \pi_k \),可以写出其贝尔曼公式来求解状态价值。有两种求解方法: - **闭式解(Closed Form Solution)**:此方法不再详细介绍,若不熟悉可查阅之前的课程内容。 - **迭代解(Iterative Solution)**:由于闭式解涉及矩阵求解,实际中较少使用,更多采用迭代解。先对 \( v_{\pi_k} \) 进行初始猜测,然后通过不断迭代逐步得到 \( v_{\pi_k} \)。需要注意的是,策略评估是策略迭代算法的一部分,且这一步骤依赖于一个迭代算法,即大的迭代算法中包含了一个小的迭代算法。

2. **为何新策略 \( \pi_{k + 1} \) 比 \( \pi_k \) 更优**:当给定 \( v_{\pi_k} \) 时,通过求解特定式子得到 \( \pi_{k + 1} \)。可以证明 \( v_{\pi_{k + 1}} \geq v_{\pi_k} \),所以 \( \pi_{k + 1} \) 比 \( \pi_k \) 更优。详细证明可查阅相关书籍。 3. **迭代算法为何能找到最优策略**:策略迭代算法中包含策略改进步骤,每次迭代都在对策略进行优化。最初的 \( v_{\pi_0} \) 可能较差,但随着迭代,\( v_{\pi_1} \) 会有所改善,\( v_{\pi_k} \) 会越来越好。最优的状态价值是贝尔曼最优公式的解 \( v^* \)。直观上看,策略在不断改进,似乎能够找到最优策略,但从数学角度证明还需严谨推导。实际上,当 \( k \to \infty \) 时,\( v_{\pi_k} \) 一定会收敛到最优的状态价值 \( v^* \),并且策略也会收敛到最优策略,具体证明可参考相关书籍。

4. **策略迭代算法与值迭代算法的关系**:在证明策略迭代算法收敛性时,用到了值迭代算法收敛的结果。此外,策略迭代算法和值迭代算法是更通用的截断策略迭代(Truncated Policy Iteration)算法的两种极端情况。 ## 三、策略迭代算法的实现 为了实现策略迭代算法,我们需要研究其逐元素形式(Element Wise Form)。 1. **策略评估步骤**:其矩阵向量形式是通过迭代来求解贝尔曼公式。逐元素形式如下:给定初始值 \( v_{\pi_k}^j \)(上标 \( j \) 表示第 \( j \) 次迭代估计出的 \( v_{\pi_k} \) 的值),已知相关参数,通过公式计算出左边的值,再将左边的值代入右边,如此循环,直到收敛,即认为找到了 \( v_{\pi_k} \),这一步骤就完成了。 2. **策略改进步骤**:策略改进的方法是求解 \( \max \) 操作。其逐元素形式中,已知 \( v_{\pi_k} \) 和其他相关量,通过计算求解出 \( q_{\pi_k} \)。根据值迭代中已有的知识,选择对应 \( q_{\pi_k} \) 最大的动作 \( a_k^* \) 作为新的最优策略。 

以下是通过伪代码展示的策略迭代过程: 1. 在每次迭代(假设为第 \( k \) 次迭代)中,包含策略评估和策略改进两个部分,目标是求解 \( v_{\pi_k} \)。 2. 给 \( v_{\pi_k} \) 一个任意的初始猜测值。 3. 将初始猜测值代入迭代算法中,不断迭代,直到 \( v_{\pi_k}^j \) 收敛,得到 \( v_{\pi_k} \)。 4. 进行策略改进: - 遍历所有状态。 - 对于每个状态,遍历其所有动作。 - 利用已求出的 \( v_{\pi_k} \) 计算出 \( q_{\pi_k} \)。 - 计算出 \( \pi_{k + 1} \) 后,回到前面的步骤,计算 \( v_{\pi_{k + 1}} \),如此不断循环迭代。 ## 四、策略迭代算法示例 1. **简单示例**:以一个简单问题为例,右边是目标区域(Target Area)。

显然,最优策略是在某些位置向右走,某些位置保持不动。我们使用策略迭代算法来寻找最优策略,初始策略可能不合适,比如都是向左走。 - 当 \( k = 0 \) 时,实际上要做的是求解 \( v_{\pi_0} \),可以通过求解贝尔曼公式得到,简单问题可直接求解,复杂问题则使用迭代算法求解。 - 求解得到 \( v_{\pi_0} \) 后,计算 \( q_{\pi_0} \),根据 \( v_{\pi_0} \) 与 \( q_{\pi_k} \) 的关系,将 \( v_{\pi_0} \) 的值代入相关式子得到 \( q_{\pi_0} \)。 - 确定新策略 \( \pi_1 \):查看 \( q_{\pi_0} \) 中哪个值最大,例如在 \( s_1 \) 时选择 \( a_r \),在 \( s_2 \) 时选择 \( a_0 \),得到新策略。将该策略画出后发现,对于这个简单问题,一次迭代就得到了最优策略。

但对于复杂问题,可能需要多次迭代。 2. **复杂示例**:对于一个 \( 5 \times 5 \) 的网格问题,目标是求出最优策略。通过图示展示从初始任意给定的策略 \( \pi_0 \) 开始,经过策略评估得到 \( v_{\pi_0} \),再到 \( v_{\pi_1} \) 等,直到 \( \pi_{10} \) 和 \( v_{\pi_{10}} \) 的过程。 - 可以看到,中间过程的策略并不理想,部分状态的策略杂乱无章。

但到 \( \pi_{10} \) 时,得到了最终策略,从任意一点出发都能到达目标区域。因为进入禁区(Forbidden Area,值为 -10,进入会有较大惩罚),所以策略会避开禁区。 - 在这个过程中,存在一个有趣的现象:接近目标的状态,其策略会先变好;远离目标的状态,其策略会后变好。直观原因是在某一状态选择贪婪动作(对应最大动作价值的动作)时,严重依赖其他状态的策略。若其他状态策略不佳,即便选择最大动作价值的动作也可能无意义;若其他状态有能到达目标区域的策略,那么选择到达该状态,也能获得正奖励,此时的贪婪动作就是最优策略。即当一个状态周围没有能到达目标区域的策略时,该状态也无法到达目标区域;当周围有能到达目标区域的策略时,新策略也能使该状态到达目标区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值