马尔可夫决策过程

article/2025/8/22 1:46:26

马尔可夫决策过程

  • 一、马尔科夫决策过程:
    • **马尔科夫决策过程**
    • **最优决策**
    • 值迭代
    • 策略迭代
    • MDP中的参数估计
  • 二、代码实战:
    • A、马尔可夫决策过程值迭代
    • B、马尔可夫决策过程策略迭代
    • C、马尔可夫决策过程动态规划版
  • 参考文章

本文介绍了马尔可夫决策过程,首先给出了马尔可夫决策过程的定义形式,其核心是在时序上的各种状态下如何选择最优决策得到最大回报的决策序列,通过贝尔曼方程得到累积回报函数;然后介绍两种基本的求解最优决策的方法,值迭代和策略迭代,同时分析了两种方法的适用场景;最后回过头来介绍了马尔科夫决策过程中的参数估计问题:求解-即在该状态下采取该决策到底下一状态的概率。

一、马尔科夫决策过程:

机器学习算法(有监督,无监督,弱监督)中,马尔科夫决策过程是弱监督中的一类叫增强学习。增加学习与传统的有监督和无监督不同的地方是,这些方法都是一次性决定最终结果的,而无法刻画一个决策过程,无法直接定义每一次决策的优劣,也就是说每一次的决策信息都是弱信息,所以某种程度上讲,强化学习也属于弱监督学习。从模型角度来看,也属于马尔科夫模型,其与隐马尔科夫模型有非常强的可比性。

下面是一个常用的马尔科夫模型的划分关系

不考虑动作考虑动作状态完全可见马尔科夫链(MC)马尔科夫决策过程(MDP)状态不完全可见隐马尔科夫模型(HMM)不完全可观察马尔科夫决策过程(POMDP)

马尔科夫决策过程

马尔科夫决策过程由五元组组成[公式]

在这里插入图片描述

有了上面的定义之后,一个完整的马尔科夫决策过程状态转移图如下:

(E:\研究生\ML\img\mdp.png)

在这里插入图片描述

在这里插入图片描述

也就是说最优决策下对应的累积回报一定不小于一般的决策下的累积回报。

值得注意是,最优决策是出于全局考虑的,是从所有状态下出发到得到的累积回报的加和最大,这就意味着决策函数不保证其中每一个状态出发根据决策函数得到的累积回报都是最大的。

最优决策

也许上面的目标函数还不清晰,如何求解最有决策,如何最大化累积回报

下面结合例子来介绍如何求解上面的目标函数。且说明累积回报函数本身就是一个过程的累积回报,回报函数[公式]才是每一步的回报。

(E:\研究生\ML\img\zt.png)

下面再来看求解上述最优问题,其中 就是以s为初始状态沿着决策函数走到结束状态的累积回报。

值迭代

在这里插入图片描述

内循环迭代的的处理方法有两种:

同步迭代:即在一次循环过程中,累积回报不更新,而是计算完所有的累积回报之后,再统一更新。
异步迭代,即在一次循环过程中,每计算完一个初始状态下累积回报就立即更新,不需要等到所有的累积回报都计算出来之后再更新。
在这里插入图片描述

策略迭代

值迭代是使累积回报值最优为目标进行迭代,而策略迭代是借助累积回报最优即策略最优的等价性,进行策略迭代。

在这里插入图片描述

同样,收敛性也是值得探讨的,这里简单的思考一下,由于奖励状态和惩罚状态的分布,以及累积回报唯一确定决策函数,那么未达到最优决策,必然累积回报和决策函数处于不稳定的状态,而只有当到达最优决策时,才有:

[公式]

所以该过程就是在a步由决策函数确定累积回报,然后最大化累积回报来更新决策,如此反复,则有最优决策。值迭代和策略迭代比较:可以看出策略迭代涉及从决策函数到累积回报的解线性方程组的步骤,值迭代则是反复的,所以策略迭代更适合处理少量状态的情况,一般10000以内还是可以接受的。

MDP中的参数估计

回过头来再来看前面的马尔科夫决策过程的定义是一个五元组,一般情况下,五元组应该是我们更加特定的问题建立马尔科夫决策模型时该确定的,并在此基础上来求解最优决策。所以在求解最优决策之前,我们还需更加实际问题建立马尔科夫模型,建模过程就是确定五元组的过程,其中我们仅考虑状态转移概率,那么也就是一个参数估计过程。(其他参数一般都好确定,或设定)。

假设,在时间过程中,我们有下面的状态转移路径:

(E:\研究生\ML\img\m.png)

在这里插入图片描述

整个流程就是在策略迭代的基础上,同时进行了参数估计。

二、代码实战:

A、马尔可夫决策过程值迭代

/***马尔科夫决策过程值迭代,关键在于第一次迭代要例外,因为目标状态是一个终止状态,放到迭代循环里面会出现临近的状态回报函数无限的,发散。迭代过程采用的是异步迭代,即每一次内层循环找到更优的回报就立即更新最大回报,以便与之相邻的状态能立即更新到最优*/ /****值迭代同步更新12*12*7*/ while(!flag){flag=1;for(i=0; i<size; i++){if(action[i]>0||action[i]==0)maxreward[i]=reward[i]+maxreward[action[i]];else maxreward[i]=reward[i];}//放到这意味着同步更新,count=1008是12*12的7倍,即扫了7遍for(i=0; i<size; i++)//对每一个状态求最大的V(s){for(j=0; j<size; j++)//策略迭代的话这里其实可以换做扫一遍策略集,这也就是和值迭代不同的地方{//cout<<"i="<<i<<" "<<maxreward[i]<<" "<<endl;if(matrix[i][j]==1&&maxreward[j]>maxreward[i]-reward[i]+0.0001)//更新累积回报{action[i]=j;//if(action[i]>0||action[i]==0)//maxreward[i]=reward[i]+maxreward[action[i]];//放到这是异步更新,//else// maxreward[i]=reward[i];flag=0;//当累积回报不再更新,即不进入该if,那么就结束迭代}count++;}}}

B、马尔可夫决策过程策略迭代

while(!flag){flag=1;for(i=0; i<size; i++)//对每一个状态求最大的V(s){for(j=0; j<ACTION; j++)//策略迭代的话这里其实可以换做扫一遍策略集,这也就是和值迭代不同的地方{//cout<<"i="<<i<<" "<<maxreward[i]<<" "<<endl;if(matrix[i][ac[j]+i]==1&&maxreward[ac[j]+i]>maxreward[i]-reward[i]+0.0001){action[i]=j;//if(reward[i]!=1&&reward[i]!=-1)maxreward[i]=reward[i]+maxreward[ac[j]+i];//else// maxreward[i]=reward[i];flag=0;}count++;}}}

C、马尔可夫决策过程动态规划版

/**4 非递归动态规划从最终状态出发,采用广度遍历不断的更新其上一状态的累积回报*/ /*while(q!=NULL)//这里图的广度遍历没有用到队列,但也用到了队列的思想//对于当前步能到达的节点用链表连接起来,然后逐渐进行下一步的能到达的节点进行入链(入队列),同样是一种先进先出思想{for(i=0; i<size; i++) //由于不是策略迭代,只能遍历所有的状态,找出能到的,且更优的{if(matrix[i][q->data]==1&&maxreward[i]<0)//double类型比较大小的偏差,加上一个小数作为精度{maxreward[i]=reward[i]+maxreward[q->data];p=(subset *)malloc(sizeof(subset)*1);p->data=i;p->next=NULL;q=maxsubset;while((q->next)!=NULL)q=q->next;q->next=p;}count++;}maxsubset->next=maxsubset->next->next;//删除当前节点,即当前步下能到达的节点都已经走完了,可出队列了q=maxsubset->next;//}

参考文章

【机器学习】马尔科夫决策过程


http://chatgpt.dhexx.cn/article/OLNRNxqb.shtml

相关文章

随机过程第2讲——马尔可夫过程的应用

温习&#xff1a;随机过程第1讲——泊松过程的模拟与检验&#xff1a;https://blog.csdn.net/ChenQihome9/article/details/82871332 去得也突然——不知在什么时候&#xff0c;雨&#xff0c;悄悄地停了。风也屏住了呼吸&#xff0c;山中一下变得非常幽静。远处&#xff0c;一…

强化学习(2): 马尔可夫过程

前言 本文重点介绍MDP&#xff0c;因为MDP是目前最适合表征强化学习问题的模型。 一个具体的赌徒例子&#xff0c;来说明强化学习的算法如何与MDP构建联系&#xff0c;并且求解出最优策略。链接如下&#xff1a;link 一、马尔可夫性 其假设未来的状态仅取决与当前的状态。过…

贝叶斯网络、马尔可夫模型、马尔可夫过程、马尔可夫链、马尔可夫网络基本概念

知识储备与简要概括 可数集【Countable set】&#xff1a; 是指每个元素都能与自然数集N的每个元素之间能建立一一对应的集合。如果将可数集的每个元素标上与它对应的那个自然数记号&#xff0c;那么可数集的元素就可以按自然数的顺序排成一个无穷序列a1&#xff0c;a2&#…

强化学习笔记:马尔可夫过程 马尔可夫奖励过程

1 马尔可夫性质 &#xff08;Markov Property&#xff09; 我们设状态的历史为&#xff08;包含了之前的所有状态&#xff09; 如果一个状态转移是符合马尔可夫性质的&#xff0c;也就是满足如下条件&#xff1a; 也就是说&#xff0c;从当前状态转移到状态的概率&#xff0c;就…

马尔可夫性质、马尔可夫链和马尔可夫过程

关注&#xff1a;灰质&#xff0c;有趣有料的AI技术分享 前言 研究决策问题就一定听说过马尔可夫过程&#xff08;Markov Process&#xff09;&#xff0c;这是一类非常重要的方法。现在非常热门的强化学习都是基于马尔可夫过程方法建立的。马尔可夫决策过程是研究随机序贯决策…

1.3 马尔可夫过程

之前介绍的奖励、智能体、动作、观察和环境可以看成RL的一级概念。以此为基础&#xff0c;我们将探索RL的二级概念&#xff0c;包括状态&#xff08;state&#xff09;、事件&#xff08;episode&#xff09;、历史&#xff08;history&#xff09;、价值&#xff08;value&…

一文看懂马尔科夫过程

1.马尔科夫决策过程(MDPs)简介 马尔科夫决策过程是对强化学习(RL)问题的数学描述。几乎所有的RL问题都能通过MDPs来描述: 最优控制问题可以用MDPs来描述;部分观测环境可以转化成POMDPs;赌博机问题是只有一个状态的MDPs;注:虽然大部分DL问题都能转化为MDPs,但是以下所描述…

马尔可夫Markov决策过程 MDP、马尔可夫奖励过程MRP

引言 在概率论及统计学中&#xff0c;马尔可夫过程&#xff08;英语&#xff1a;Markov process&#xff09;是一个具备了马尔可夫性质的随机过程&#xff0c;因为俄国数学家安德雷马尔可夫得名。马尔可夫过程是不具备记忆特质的&#xff08;memorylessness&#xff09;。换言…

零基础学习python数据分析,需要掌握哪些技能?

对于刚刚入行的小白同学来说&#xff0c;在学习python的过程中&#xff0c;一定会遇到一些疑问。比如说&#xff1a; 学习Python需要多久&#xff1f; 学习Python需要达到什么样的程度&#xff1f; 学Python的书籍有哪些&#xff1f; 为了处理数据集&#xff0c;我需要精通…

Python数据分析期末复习归纳

python数据分析期末复习归纳&#xff08;更新中&#xff09; 文章目录 python数据分析期末复习归纳&#xff08;更新中&#xff09;前言一、python语言基础二、内建数据结构、函数、文件&#xff08;重点&#xff09;元组列表内建序列函数字典函数 三、Numpy基础&#xff08;重…

Python数据分析师特训营84节

刚看完了小破站的一个数据分析的课程&#xff1a; “2020年Python数据分析师特训营全套84节视频完结版&#xff08;就业向/零基础友好)” 趁着热乎劲儿&#xff0c;想记录一下课程讲到的关于python的基础知识&#xff0c;还有numpy、pandas、matplotlib(数据分析三大利器)工具…

Python数据分析:混淆矩阵

【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ● 标题与摘要 Python数据分析 混淆矩阵 ● 选择题 以下关于混淆矩阵说法错误的是&#xff1a; A TP是被正确分类的正例个数 B FN是被错误分类的正例个数 C 主对角元素是不同类别样例…

Python数据分析和处理

数据的维度 从一个数据到一组数据:一个数据表达一个含义&#xff0c;一组数据表达一个或多个含义 维度&#xff1a;一组数据的组织形式 一维数据&#xff1a;由对等关系的有序或无序数据构成。采用线性方式组织 二维数据&#xff1a;由多个一维数据组成&#xff0c;是一维数…

Python数据分析之理论知识

文章目录 Python数据分析概述一、数据分析的概念1.广义数据分析2.数据挖掘 二、数据分析流程1. 需求分析&#xff1a;2. 数据获取3.数据预处理4.分析与建模5.模型评价与优化6. 分类模型评价指标7.回归模型8.部署 三、数据分析应用场景四、总思维导图 Python数据分析概述 一、数…

如何用Python进行数据分析,详细流程讲解!

1&#xff1a;为什么选择Python进行数据分析? Python是一门动态的、面向对象的脚本语言&#xff0c;同时也是一门简约&#xff0c;通俗易懂的编程语言。Python入门简单&#xff0c;代码可读性强&#xff0c;一段好的Python代码&#xff0c;阅读起来像是在读一篇外语文章。Pyt…

如何用Python进行数据分析?

本文为CDA数据分析研究院原创作品,转载需授权 1.为什么选择Python进行数据分析? Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是在读一篇外语文章。Python这种特性称为“伪…

Python做数据分析需要学什么?

下面分别从这四个方面来带大家学习数据分析&#xff1a; 第一&#xff0c;做数据分析要精通Python吗&#xff1f;第二&#xff0c;数据分析流程是什么&#xff1f;学什么&#xff1f;第三&#xff0c;如何培养数据分析思维&#xff1f;第四&#xff0c;数据分析书籍推荐 一、…

Python大作业——爬虫+可视化+数据分析+数据库(数据分析篇)

个人博客 Python大作业——爬虫可视化数据分析数据库&#xff08;简介篇&#xff09; Python大作业——爬虫可视化数据分析数据库&#xff08;爬虫篇&#xff09; Python大作业——爬虫可视化数据分析数据库&#xff08;可视化篇&#xff09; Python大作业——爬虫可视化数…

用python进行数据分析(入门学习)

做笔记啦&#xff01;&#xff01;&#xff01;这几天突击了一下使用python进行数据分析&#xff0c;觉得还是梳理一遍比较好&#xff0c;不然学得快忘得也快[捂脸] 所以&#xff0c;今天这篇文章就主要介绍一下用python进行数据分析中常用到的三个库&#xff1a;numpy、pandas…

111个Python数据分析实战项目,代码已跑通,数据可下载

写在前面&#xff1a; 这里整理了111个数据分析的案例&#xff0c;每一个都进行了严格的筛选&#xff0c;筛选标准如下&#xff1a; 1. 有干货&#xff1a;杜绝纯可视化、统计性分析&#xff0c;有一定比例的讲解性文字 2. 可跑通&#xff1a;所有代码均经过测试&#xff0c;…