强化学习复现笔记(2)策略迭代

news/2025/1/11 6:57:57/

摘要: 上一节的压缩映射在实际迭代时可以分成两种方法,分别称作值迭代和策略迭代。本文用走迷宫的例子(将1维迷宫扩展到2维)讲这两种迭代。对应第一节参考链接[2]的前4章。

拆分压缩映射

  上一节的压缩映射 v = f ( v ) v=f(v) v=f(v),展开写就是
v ( s ) = max ⁡ π ∑ a π ( a ∣ s ) q ( s , a ) = max ⁡ a q ( s , a ) = max ⁡ a [ r ( s , a ) + γ v ( s ′ ) ] = max ⁡ [ r ( s , L ) + γ v ( s L ) , r ( s , R ) + γ v ( s R ) ] \begin{aligned} v(s) =& \max_\pi\sum_a\pi(a|s)q(s,a) \\ =& \max_a q(s,a) \\ =& \max_a[r(s,a)+\gamma v(s')] \\ =& \max[r(s,L)+\gamma v(s_L), r(s,R)+\gamma v(s_R)] \end{aligned} v(s)====πmaxaπ(as)q(s,a)amaxq(s,a)amax[r(s,a)+γv(s)]max[r(s,L)+γv(sL),r(s,R)+γv(sR)]
中实际上每次迭代都隐含了两步,这两步按执行的先后顺序分为值迭代和策略迭代,之前例子是值迭代,因为过于简单看不出区别(一步迭代就找到了最优策略),这次换个复杂的例子。这个式子中的 v ( s L ) v(s_L) v(sL) v ( s R ) v(s_R) v(sR) 分别表示当前状态左右两侧状态的价值函数,与策略有关,但策略又与状态价值函数有关,所以按照先更新价值函数还是先更新策略的不同分为两种迭代方法,值迭代和策略迭代。
  值迭代 指先找出使 q ( s , a ) q(s,a) q(s,a) 最大时的 π \pi π,再迭代一步 v = f ( v ) v=f(v) v=f(v) 称作值迭代。走迷宫时, q ( s , a ) q(s,a) q(s,a) 建立成一个Q表,每次迭代中,找出表中Q值最大的动作作为 f ( v ) f(v) f(v),然后求 v = f ( v ) v=f(v) v=f(v)
  策略迭代 与值迭代相反,先迭代一步 v = f ( v ) v=f(v) v=f(v),再找出使 q ( s , a ) q(s,a) q(s,a) 最大时的 π \pi π,称作策略迭代。
  这里有个问题,使 q ( s , a ) q(s,a) q(s,a) 最大时的 π \pi π 应该是个定值,那么如果最优策略 π \pi π 是个随机变量,是不是就迭代不到最优策略?

走迷宫的例子

  每个格子处有右上左下和不动5种状态,一开始的策略是每个状态都保持不动。策略编号0~5分别表示不动和右上左下。下图的迷宫中有一个终点和多个陷阱,回合奖励分别为 1 1 1 − 10 -10 10。目标为从左上角出发走到终点。
在这里插入图片描述

策略迭代

收敛后每个格子的状态价值函数如下图所示。
在这里插入图片描述
收敛后每个格子的策略如下图所示。
在这里插入图片描述

值迭代

附代码

策略迭代

import numpy as npstrategy = np.zeros([5, 5], dtype=int)
gamma = 0.8
MAZE_TRAP = [(1, 1), (1, 2), (2, 2), (3, 1), (3, 3), (4, 1)]  # 陷阱
MAZE_TERM = (3, 2)  # 终点# 找出一个数组中的最大值索引,如果有多个最大值,就从中随机取一个
def Argmax_Rand(x: list) -> int:bestv = -1e12samevaluei = np.zeros(len(x), dtype=int)samecnt = 0for n in range(len(x)):if x[n] < bestv:continueelif x[n] > bestv:bestv = x[n]samecnt = 0samevaluei[samecnt] = nsamecnt += 1return samevaluei[np.random.randint(samecnt)]# 返回与一个网格`grid`相邻的第`adjacent`处方位的网格
def Find_Adjacent(grid: tuple, adjacent: int) -> tuple:ans = list(grid)if adjacent == 1:ans[1] += 1elif adjacent == 2:ans[0] -= 1elif adjacent == 3:ans[1] -= 1elif adjacent == 4:ans[0] += 1ans[0] = 0 if ans[0] < 0 else ans[0]ans[0] = 4 if ans[0] > 4 else ans[0]ans[1] = 0 if ans[1] < 0 else ans[1]ans[1] = 4 if ans[1] > 4 else ans[1]return tuple(ans)# 迭代函数
def fx(x):y = np.zeros([5, 5])for m in range(5):  # 行for n in range(5):  # 列adjacent = Find_Adjacent((m, n), strategy[m, n])actionValue = gamma * x[adjacent]if adjacent in MAZE_TRAP:actionValue += -10elif adjacent == MAZE_TERM:actionValue += 1y[m, n] = actionValuereturn y# 对每个格子进行策略改善
# grid: 当前格子
# value: 当前策略下的价值函数矩阵
# return: 当前格子的新策略
def Policy_Imporvement(grid: tuple, value):actionValues = []for m in range(5):  # 5个策略adjacent = Find_Adjacent(grid, m)actionValue = gamma * value[adjacent]if adjacent in MAZE_TRAP:actionValue += -10elif adjacent == MAZE_TERM:actionValue += 1actionValues.append(actionValue)return Argmax_Rand(actionValues)# 主函数
vold = np.zeros([5, 5])
cntPolicyIter = 0
cntValueIters = []
while 1:# 策略评估(policy evaluation, PE)cntValueIter = 0while 1:vnew = fx(vold)err = sum(sum(vnew - vold))**2if err < 1e-6:  # 状态价值函数收敛时退出breakvold = vnewcntValueIter += 1  # 策略评估的迭代步数pass# 策略改善(policy improvement, PI)strategyOld = strategy.copy()for m in range(5):  # 行for n in range(5):  # 列strategy[m, n] = Policy_Imporvement((m, n), vnew)  # 更新策略err = sum(sum(strategyOld - strategy))**2if err < 1e-6:  # 策略收敛时退出breakcntPolicyIter += 1cntValueIters.append(cntValueIter)
print(cntPolicyIter)
print(cntValueIters)

http://www.ppmy.cn/news/380930.html

相关文章

知识付费卖的并非知识,而是这个

哈喽&#xff0c;大家好&#xff0c;我是海哥&#xff0c;知识付费变现创业教练&#xff0c;教育公司培训总监&#xff0c;从事知识付费变现咨询10年&#xff0c;已助力3000人实现知识付费变现。 作为知识付费行业&#xff0c;外行人以为我们卖的是知识&#xff0c;包括行业新手…

从reflect?metadata理解Nest实现原理

目录 正文入口Module 引入模块CatsService操作数据库Reflect Metadata那元数据存在哪呢&#xff1f;nest 的源码&#xff1a;总结 正文 Nest 是 Node.js 的服务端框架&#xff0c;它最出名的就是 IOC&#xff08;inverse of control&#xff09; 机制了&#xff0c;也就是不需…

BF-5R对讲机改频

BF-5R对讲机改频教程 一、工具 1、电脑 2、对讲机 3、K插头 4、CH340串口下载器 二、准备工作 1、安装BF480写频软件 -------------------------安装完成------------------- -------------------------双击打开------------------------ 2、安装CH340驱动 3、制作下…

新发通讯 淘宝购买对讲机成用户首选渠道

您用过手机&#xff0c;用过对讲机吗&#xff1f; 答案是否定的&#xff0c;但是你一定听说过对讲机。 当手机成为主流之后&#xff0c;对讲机这种短距离通讯工具开始在通信领域边缘化&#xff0c;相比已突破8亿的手机用户&#xff0c;我国专业无线电通信拥有各类电台用户只有5…

是否有必要购买数字对讲机

网上超出充斥着一定要购买数字机&#xff0c;并宣称数字机才是未来&#xff0c;这让新HAM友很困惑&#xff0c;不知如何选择。 通过跟 老 HAM 交流得出以下结论。 数字玩的人少&#xff0c;没有可交流的人群。数字机距离远了&#xff0c;就没法用了&#xff0c;但模拟机还能用…

CentOS7配置教程(十三)安装Python3

由于 yum install python3 默认安装的 Python 版本较低&#xff0c;&#xff08;也可能自带了python3的版本过低&#xff09;现如今有更高版本的 Python 需求&#xff0c;就想用编译安装的方法安装一个较高版本的 Python&#xff0c;顺道记录一下安装过程。 注意&#xff1a;不…

【大学计算机技术】第二章 测试9

文章目录 选择题 选择题 ASCII码共有( )个字符。 A. 126 B. 127 C. 128 D. 129 正确答案&#xff1a; C 在标准ASCII码表中&#xff0c;英文字母a和A的码值之差的十进制值是( )。 A. 20 B. 32 C. -20 D. -32 正确答案&#xff1a; B 在七位ASCII码中&#xff0c;除了表示数字…

Win10笔记本小喇叭图标出现红叉并且提示未安装任何音频输出设备

如果你按照网上的所有的方法都试了一遍&#xff0c;发现没有任何的效果&#xff0c;你的电脑还是提示“未安装任何音频输出设备”&#xff0c;并且小喇叭还是红叉&#xff0c;那么请试试我的方法&#xff1a; 1、电脑关机&#xff1b; 2、拔掉电脑上插得所有的线&#xff0c;…