当前位置: 首页 > news >正文

马尔可夫决策过程

马尔可夫决策过程

马尔可夫决策过程(Markov decision process,MDP)是强化学习的重要概念,当想使用强化学习解决实际问题时,第一步就是将实际问题抽象为马尔可夫决策过程,这个过程的目的是使当前分数更高。

马尔可夫过程

马尔可夫过程(Markov Process)是一种随机过程,它的特点是具有马尔可夫性质,也叫马尔可夫链(Markov chain)
马尔可夫过程一般由一个 < S , P > <S,P> <S,P>二元组来表示,其中 S S S是一个有限状态的列表, P ( s ‘ ∣ s ) P(s^`|s) P(ss)是一个状态转移矩阵,代表了状态 s s s到状态 s ‘ s^` s的概率

马尔可夫性质

马尔可夫性质是指,未来状态只依赖于当前状态,与过去状态无关,也可以说,当前状态只与上一个状态有关,公式为
P ( S t + 1 = s t + 1 ∣ S t = s t , . . . , S 0 = s 0 ) = P ( S t + 1 = s t + 1 ∣ S t = s t ) P(S_{t+1}=s_{t+1}|S_t=s_t,...,S_0=s_0) = P(S_{t+1}=s_{t+1}|S_t=s_t) P(St+1=st+1St=st,...,S0=s0)=P(St+1=st+1St=st)

马尔可夫的奖励过程

在马尔可夫过程(Markov reward process,MRP)加入奖励函数 r r r和折扣因子 γ γ γ,就是马尔可夫奖励过程,使用 < S , P , r , γ > <S,P,r,γ> <S,P,r,γ>构成。
S S S是一个有限状态的列表
P ( s ‘ ∣ s ) P(s^`|s) P(ss)是一个状态转移矩阵,代表了状态 s s s到状态 s ‘ s^` s的概率
r ( s ) r(s) r(s)是指转移到s状态可获得的奖励
γ γ γ是折扣因子,因为远期效益不确定,所以要对远期效益打折扣,当 γ γ γ接近0时,只考虑当前效益,当接近于1时,更关注长期的累计奖励。

回报

回报是在一个马尔可夫奖励过程中,综合奖励和远期效益给模型的回报。公式如下:
G t = R t + γ R t + 1 + γ 2 R t + 2 + . . . = ∑ k = t ∞ γ k R t + k G_t = R_t+γR_{t+1}+γ^2R_{t+2}+...=\sum_{k=t}^{\infty}γ^kR_{t+k} Gt=Rt+γRt+1+γ2Rt+2+...=k=tγkRt+k

价值函数

价值函数 V ( s ) V(s) V(s),价值函数是指一个状态的期望回报,是指当前状态下,未来所有马尔可夫链的回报的均值。公式 V ( s ) = E ( G t ∣ S t = s ) V(s) = E(G_t|S_t=s) V(s)=E(GtSt=s),展开为 V ( s ) = E ( r ( s ) + γ S t + 1 ∣ S t = s ) V(s) = E(r(s)+γS_{t+1}|S_t=s) V(s)=E(r(s)+γSt+1St=s)
可以得到 V ( s ) = r ( s ) + γ ∑ s ‘ ∈ S p ( s ‘ ∣ s ) V ( s ‘ ) V(s) = r(s)+γ\sum_{s^`\in S} p(s^`|s)V(s^`) V(s)=r(s)+γsSp(ss)V(s),价值函数不等于奖励,从公式可以看出价值函数由奖励得来。
代码实现,马尔可夫链的回报和价值
图如下
在这里插入图片描述
在这里插入图片描述
价值函数写成矩阵形式,推导可以得出以下式子, V = I V V = IV V=IV,其中这个I是对角线为1其余为0的单位矩阵
在这里插入图片描述

import numpy as np
np.random.seed(0)
# 定义状态转移概率矩阵P
P = [[0.9, 0.1, 0.0, 0.0, 0.0, 0.0],[0.5, 0.0, 0.5, 0.0, 0.0, 0.0],[0.0, 0.0, 0.0, 0.6, 0.0, 0.4],[0.0, 0.0, 0.0, 0.0, 0.3, 0.7],[0.0, 0.2, 0.3, 0.5, 0.0, 0.0],[0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
]
P = np.array(P) # 之前定义的列表 P 转换成一个 NumPy 数组rewards = [-1, -2, -2, 10, 1, 0]  # 定义奖励函数,定义的是每个状态下的奖励函数
gamma = 0.5  # 定义折扣因子# 给定一条序列,计算从某个索引(起始状态)开始到序列最后(终止状态)得到的回报
# 观察公式,我们计算回报时,需要后面状态的回报,得从后往前算
def compute_return(start_index, chain, gamma):G = 0# 回报for i in range(len(chain),start_index,-1):G = G*gamma + rewards[chain[i-1]-1]return G# 一个状态序列,s1-s2-s3-s6
print("状态序列s1-s2-s3-s6")
chain = [1, 2, 3, 6]
start_index = 0
G = compute_return(start_index, chain, gamma)
print("根据本序列计算得到回报为:%s。" % G)def compute(P, rewards, gamma, states_num):''' 利用贝尔曼方程的矩阵形式计算解析解,states_num是MRP的状态数 '''rewards = np.array(rewards).reshape((-1, 1))  #将rewards写成列向量形式value = np.dot(np.linalg.inv(np.eye(states_num, states_num) - gamma * P),rewards)return valueV = compute(P, rewards, gamma, 6)
print("MRP中每个状态价值分别为\n", V)

马尔可夫决策过程

马尔可夫决策过程(Markov decision process,MDP),相对马尔可夫奖励过程,增加了执行动作a,在我看来MRP只是点明了奖励函数和价值函数,只是自发改变的随机过程,缺少决策来判断应该执行哪个行动来进行下一步,也就是缺少了获取最大奖励这个步骤,而马尔可夫决策过程是完全体(个人愚见),由 ⟨ S , A , P , r , γ ⟩ ⟨S,A,P,r,γ⟩ S,A,P,r,γ组成。
S S S是状态的集合;
A \mathcal{A} A是动作的集合;
γ \gamma γ是折扣因子;
r ( s , a ) r ( s , a ) r(s,a)是奖励函数,此时奖励可以同时取决于状态s ss和动作a aa,在奖励函数只取决于状态s ss时,则退化为r ( s ) r(s)r(s)
P ( s ′ ∣ s , a ) P ( s ′ ∣ s , a ) P(ss,a)是状态转移函数,表示在状态 s s s执行动作 a a a之后到达状态 s ′ s^{\prime} s 的概率。

http://www.dtcms.com/a/269732.html

相关文章:

  • python办公自动化----使用pandas和os合并多个订单表
  • 【python】 `parse_time_to_seconds` 在功能及健壮性上有以下主要区别
  • ​扣子Coze飞书多维表插件添加数据记录
  • 【UE5】虚幻引擎小百科
  • std::function
  • coze平台AI Agent开发入门之工作流的基本使用方法
  • Redis 缓存机制 及问题场景 及解决方案
  • 接口自动化工具-SoapUI
  • kotlin
  • Ubuntu22.04下微星B850M主板 无wifi模块
  • AR 双缝干涉实验亮相:创新科技实验范式,开拓 AR 技术新局​
  • 传输层协议TCP、UDP
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:整体布局、架构调整(二)
  • 基于FPGA的累加算法实现
  • 2. 两数相加
  • 从零实现一个GPT 【React + Express】--- 【1】初始化前后端项目,实现模型接入+SSE
  • 领域驱动设计(DDD)重塑金融系统架构
  • Qt 与Halcon联合开发九:算法类设计与实现讲解(附源码)
  • AlphaEvolve:谷歌的算法进化引擎 | 从数学证明到芯片设计的AI自主发现新纪元
  • 告别“电量焦虑”,BLE如何提升可穿戴设备续航能力?
  • Flutter基础(前端教程④-组件拼接)
  • Linux NUMA调优实战:多线程程序加速方法
  • 电路研究9.3.10——合宙Air780EP中的AT开发指南:阿里云应用指南
  • Deepoc大模型:重构无人机认知边界的具身智能革命
  • 华为泰山服务器重启后出现 XFS 文件系统磁盘“不识别”(无法挂载或访问),但挂载点目录仍在且无数据
  • WPA2 与 WPA3:深入解析Wi-Fi安全协议
  • Linux网络:UDP socket创建流程与简单通信
  • 手机能用酒精擦吗?
  • 前端学习3--position定位(relative+absolute+sticky)
  • Android kotlin 协程的详细使用指南