动态规划解决马尔可夫决策过程

news2024/10/1 3:35:59

马尔可夫决策过程是强化学习中的基本问题模型之一,而解决马尔可夫决策过程的方法我们统称为强化学习算法。

动态规划( dynamic programming, DP )具体指的是在某些复杂问题中,将问题转化为若干个子问题,并在求解每个子问题的过程中保存已经求解的结果,以便后续使用。

常见的动态规划算法包括

  • 值迭代(value iteration, VI)
  • 策略迭代(policy iteration, PI)
  • Q-learning 算法等。

动态规划三个基本原理

  • 最优化原理:问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构
  • 无后效性:某阶段状态一旦确定,就不受这个状态以后决策的影响
  • 重叠子问题:不是动态规划问题的必要条件

马尔可夫决策过程的目标是最大化累积回报

G t = R t + 1 + γ G t + 1 G_t = R_{t+1} + \gamma G_{t+1} Gt=Rt+1+γGt+1

我们要解决 G t + 1 G_{t+1} Gt+1的问题,可以一次拆分成解决 G t , G t − 1 , . . . , G 1 G_{t},G_{t-1},...,G_1 Gt,Gt1,...,G1的问题,这其实就满足动态规划性质中的最优化原理

策略迭代与价值迭代

但如果只给定马尔可夫决策过程,该如何寻找最佳策略,从而得到最佳价值函数(optimal value function)

最佳价值函数:寻找一种策略 π \pi π使得每个状态的价值最大。即使得V最大的 π \pi π

V ∗ ( s ) = m a x π V π ( s ) V^*(s) = max_{\pi}V_{\pi}(s) V(s)=maxπVπ(s)

最佳策略下,每个状态的价值函数都为最大值,如果可以求得最佳价值函数,就认为该决策过程的环境可解,在可解环境下,最佳价值函数是一致的,但可以有多个策略达到最佳价值函数。换句话说,存在最优值,但解。

当得到最佳价值函数后,可以通过对Q函数最大化来得到最佳策略,使得Q函数最大化的动作就是最佳的动作,进而可以提取出最佳策略。

π ∗ ( a ∣ s ) = { 1 , a = a r g m a x a ∈ A Q ∗ ( s , a ) 0 , 其他 {\pi}^{*}(a|s) = \left\{ \begin{matrix} 1 , a = argmax{ \atop a \in A}Q^{*}(s,a)\\ 0,其他 \end{matrix} \right. π(as)={1,a=argmaxaAQ(s,a)0,其他

Q:怎样进行策略搜索

方法一:穷举法,假设有S个状态,A个动作。总共 ∣ A ∣ ∣ S ∣ |A|^{|S|} AS个策略。

方法二:策略迭代和价值迭代

策略迭代

策略迭代:包括策略评估策略改进

策略评估:给定马尔可夫决策过程和策略,评估我们可以获得多少价值,即对于当前策略,我们可以得到多大的价值。

在下图左侧,先进行策略评估,即基于给定的策略 π \pi π,先求得价值函数V。然后基于奖励函数和状态转移函数可以计算得到Q函数。

Q π i ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π i ( s ′ ) Q_{\pi_i}(s,a) = R(s,a) + \gamma\sum{ \atop s' \in S}p(s'|s,a)V_{\pi_i}(s') Qπi(s,a)=R(s,a)+γsSp(ss,a)Vπi(s)

在下图右侧,随后进行策略改进,基于Q函数,取使得Q取最大值的动作,做为下一个策略。

π i + 1 ( s ) = a r g m a x a Q π i ( s , a ) \pi_{i+1}(s) = argmax_aQ_{\pi_i}(s,a) πi+1(s)=argmaxaQπi(s,a)

在这里插入图片描述

因此,可以将Q函数看做一个表格(Q-table),得到Q函数,也就得到Q表格。

在这里插入图片描述

对每一列,取使得Q函数最大的动作,即为最应该采取的动作。

通过argmax操作,我们会得到更好或者不变的策略,而不会使价值函数变差,当改进停止后会得到一个最佳策略。策略确定后,动作a确定,Q函数 Q ( s , a ) Q(s,a) Q(s,a)就会变为价值函数 V ( s ) V(s) V(s)

Q π ( s , π ′ ( s ) ) = max ⁡ a ∈ A Q π ( s , a ) = Q π ( s , π ( s ) ) = V π ( s ) Q_{\pi}\left(s,\pi^{\prime}(s)\right)=\operatorname*{max}_{a\in A}Q_{\pi}(s,a)=Q_{\pi}(s,\pi(s))=V_{\pi}(s) Qπ(s,π(s))=aAmaxQπ(s,a)=Qπ(s,π(s))=Vπ(s)

进而得到贝尔曼最优方程(Bellman optimality equation)

V π ( s ) = m a x a ∈ A Q π ( s , a ) V_{\pi}(s) = max_{a \in A}Q_{\pi}(s,a) Vπ(s)=maxaAQπ(s,a)

贝尔曼最优方程表明:最佳策略下的一个状态的价值必须等于在这个状态下采取最好动作得到的回报的期望。 当马尔可夫决策过程满足贝尔曼最优方程的时候,整个马尔可夫决策过程已经达到最佳的状态。

当整个状态已经收敛后,我们得到最佳价值函数后,贝尔曼最优方程才会满足。满足贝尔曼最优方程后,我们可以采用最大化操作,即。

公式 1 : V ∗ ( s ) = m a x a Q ∗ ( s , a ) 公式1:V^{*}(s) = max_{a}Q^{*}(s,a) 公式1V(s)=maxaQ(s,a)

Q函数的贝尔曼方程如下:

公式 2 : Q π i ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V ∗ ( s ′ ) 公式2:Q_{\pi_i}(s,a) = R(s,a) + \gamma\sum{ \atop s' \in S}p(s'|s,a)V^{*}(s') 公式2Qπi(s,a)=R(s,a)+γsSp(ss,a)V(s)

将公式1代入公式2,即可得到Q函数之间的转移。将公式2代入公式1,即可得到价值函数之间的转移。

在这里插入图片描述

价值迭代

策略迭代比价值迭代更快地接近最优解

在这里插入图片描述

基本概念

  • 有模型算法:状态转移概率已知,例如动态规划

  • 免模型算法:大部分情况下对于智能体来说,环境是未知的,即状态转移概率未知

除了动态规划之外,基础的强化学习算法都是免模型的。

预测:免模型情况下,去近似环境的状态价值函数。主要目的是估计或计算环境中的某种期望值,比如状态价值函数 V ( s ) V(s) V(s)或动作价值函数 Q ( s , a ) Q(s,a) Q(s,a)

控制:目标则是找到一个最优策略,该策略可以最大化期望的回报。换句话说,你不仅想知道按照某种策略你的预期得分是多少,还想知道如何选择动作以最大化这个得分。

控制问题通常涉及

  • 策略评估(policy evaluation)
  • 策略改进(policy improvement)

在实际应用中,预测和控制问题经常交织在一起。例如,在使用 Q-learning(一种免模型的控制算法)时,我们同时进行预测(更新 Q值)和控制(基于Q值选择动作)。之所以提到这两个概念,是因为很多时候我们不能一蹴而就解决好控制问题,而需要先解决预测问题,进而解决控制问题。

什么情况下MDP是已知的?即奖励函数R和状态转移函数P被提供给智能体时。

因此可以基于策略评估和策略改进来计算出最优策略和最优状态价值函数。

在这里插入图片描述

Model-free RL

背景:策略迭代和价值迭代需要用到MDP,但在现实生活中,MDP往往不已知,或者较复杂。下图是有模型方法。

在这里插入图片描述

Model-free 方法通过智能体与环境交互得到一系列轨迹,基于这些轨迹计算状态和策略。

在这里插入图片描述

蒙特卡罗

在这里插入图片描述

这里提供一种增量求均值的方法,现在时刻的均值可以和上一时刻的均值建立联系。这种方法可以应用到增量求状态价值函数V上。

在这里插入图片描述

Temporal-Difference,TD

结合了MC和DP的方法

  • 免模型
  • 通过bootstrapping可以从不完整回合中学习
  • 可以在不完整的环境上学习
TD(0)

TD target: sample + bootstrapping

在这里插入图片描述

TD learning只往前走了一步就开始更新V,而MC需要走完一个轨迹

TD(n)

往前走n步再更新,通过步数来调整。当步数无穷大时,TD target变为MC target

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

最右下角是穷举法,TD在广度增加就变为了DP,在深度增加就变为了MC。

策略迭代分两步:

  • 计算状态价值函数V
  • 根据v,计算q。通过greedy更新策略

但计算Q需要奖励函数和状态转移矩阵,但在MDP未知的情况下无法计算。
在这里插入图片描述

因此采用广义的策略迭代。通过MC来计算Q函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1406960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理,个人感觉word文档中由于包含大量样式信息,批处理时总感觉有顾虑。一者担心影响了文档的格式,误修改了文档的样式,那后果……

9.scala 伴生对象、伴生类、case class、case object

目录 概述伴生case 相关特性结束 概述 比较 case class vs class 1.toString equals hashcode 重写 2.不用 new 3.默认实现了序列化接口 case class vs case object 1.case class 修饰的类,必须要有参数列表 2.case object 修饰的对象,必须不能有参数列…

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之…

多窗口大小和Ticker分组的Pandas滚动平均值

最近一个学弟在在进行数据分析时,经常需要计算不同时间窗口的滚动平均线。当数据是多维度的,比如包含多个股票或商品的每日价格时,我们可能需要为每个维度计算滚动平均线。然而,如果我们使用传统的groupby和apply方法,…

小红书商品笔记发布流程,如何避免盘营销

随着平台营销内容不断被管制,商品笔记慢慢出现在了人们的视野,这同时也意味着达人和品牌方们,可以名正言顺的在笔记内容中植入产品。商品链接的开通意味着,不管是达人还是品牌转化率都会进一步提升,今天来马文化传媒和…

遇到流氓软件无法删除?强制删除文件解救你!

在使用电脑的过程中,我们有时会遇到一些文件无法正常删除的情况,这可能是由于文件被其他程序占用或者权限问题。本文将介绍三种常见的方法,详细解释如何在电脑上强制删除文件,以便用户在面对这一问题时能够快速解决。 方法1&#…

数据挖掘笔记1

课程:清华大学-数据挖掘:理论与算法(国家级精品课)_哔哩哔哩_bilibili 一、Learning Resources 二、Data 数据是最底层的一种表现形式。数据具有连续性。从存储上来讲,数据分为逻辑上的和物理层的。大数据&#xff1…

python-分享篇-代码雨

文章目录 代码效果 代码 import sys import random import pygame from pygame.locals import *# 屏幕大小 WIDTH 800 HEIGHT 600 # 下落速度范围 SPEED [15, 30] # 字母大小范围 SIZE [5, 30] # CODE长度范围 LEN [1, 8]# 随机生成一个颜色 def randomColor():return (r…

按条件自动搜索文件

在计算机的某个文件夹中,假如有一大堆不同格式的文件,如下图: 我们的目的:快速查找出文件名中包含某文字内容的指定格式的文件,看看它们都放在哪里?通过分析,可能在当前文件夹中也可能在某个子…

【寒假打卡】Day01

文章目录 选择编程HJ99 自守数OR86 返回小于 N 的质数个数 选择 如下代码输出的是什么( ) char a101; int sum200; a27;suma; printf("%d\n",sum);A: 32 B: 99 C: 328 D: 72 答案: C 解析: 首先,char a …

Idea Community社区版如何添加Run Dashboard

最近在学习spring cloud,跟着视频添加run dashboard,发现里面介绍的方法无法适用于idea community(社区版)。 然后自己研究了一下,成功添加,下面分享自己的方法。 如图,我的项目里添加了两个module,我想通…

Python中的open与JSON的使用

目录 1 使用 open 函数进行文件操作 2 使用 json 模块进行 JSON 数据处理: 2.1 写入JSON 文件 2.2 读取JSON 文件 在 Python 中,open 函数和 json 模块常用于文件的读写和 JSON 数据的处理。 1 使用 open 函数进行文件操作 open 函数用于打开文件…

数据结构:搜索二叉树 | 红黑树 | 验证是否为红黑树

文章目录 1.红黑树的概述2.红黑树的性质3.红黑树的代码实现3.1.红黑树的节点定义3.2.红黑树的插入操作3.3.红黑树是否平衡 黑红树是一颗特殊的搜索二叉树,本文在前文的基础上,图解红黑树插入:前文 链接,完整对部分关键代码展示&a…

【STM32CubeMX串口通信详解】USART2 -- DMA发送 + DMA空闲中断 接收不定长数据

( 本篇正在编写、更新状态中.....) 文章目录: 前言 前言 本篇,详细地用截图解释 CubeMX 对 USART2 的配置,HAL函数使用,和收发程序的编写。 收、发机制:DMA发送 DAM空闲中断接收。 DMA空…

物业app开发,提升社区管理效率

随着城市化进程的加速,小区和社区管理面临着越来越多的挑战。传统的管理模式已经无法满足高效管理的需求,而物业app的应用正逐渐成为解决问题的最佳选择。通过物业app,管理人员可以更好地管理小区设施、维护房屋,居民们也能够更便…

pytestallure分析redis的数据并动态生成testCase报告

1.pytest.mark.parametrize pytest.mark.parametrize 是一个pytest的装饰器,它可以用于将参数传递给测试函数。使用 pytest.mark.parametrize 装饰器时,需要在装饰器中指定参数名称和参数值。对于多个参数,可以使用多个装饰器。 下面是一些…

【网络安全】常见的网络威胁有哪些?

随着互联网的快速发展,网络安全问题日益凸显。常见的网络威胁包括病毒、木马、恶意软件等。这些威胁不仅会影响计算机的安全运行,还会窃取用户的个人信息,造成巨大的损失。因此,我们需要采取一些措施来保护自己的网络安全。 常见的…

HarmonyOS鸿蒙应用开发( 四、重磅组件List列表组件使用详解)

List列表组件,是一个非常常用的组件。可以说在一个应用中,它的身影无处不在。它包含一系列相同宽度的列表项,适合连续、多行呈现同类数据,如商品列表、图片列表和和文本列表等。ArkUI 框架采用 List 容器组件创建列表(…

RFID标签是什么?该技术有哪些应用领域?

射频识别(RFID)技术利用电磁场,自动识别和跟踪附在物体上的标签,其中,近场通信(NFC)是一种基于短距离RFID高频技术的标准,支持13.56 MHz的频率。 NFC技术在现今的产品中应用广泛&am…

智能GPT图书管理系统(SpringBoot2+Vue2)、接入GPT接口,支持AI智能图书馆

☀️技术栈介绍 ☃️前端主要技术栈 技术作用版本Vue提供前端交互2.6.14Vue-Router路由式编程导航3.5.1Element-UI模块组件库,绘制界面2.4.5Axios发送ajax请求给后端请求数据1.2.1core-js兼容性更强,浏览器适配3.8.3swiper轮播图插件(快速实…