什么是马尔科夫决策过程(Markov Decision Process, MDP)
马尔科夫决策过程(MDP)是数学上描述决策问题的一种模型。它被广泛应用于强化学习、运筹学、控制系统和经济学等领域。MDP 用来解决带有不确定性和动态性的序列决策问题。
一个马尔科夫决策过程由以下五元组组成:
马尔科夫性质:当前状态 s_t 已经包含了所有必要的信息,因此状态转移概率仅依赖于当前状态和动作,而与过去的状态无关:
比如下图状态3到状态4的转移概率只和状态3当前的状态和采取的动作有关,和状态1、2无关。
策略(Policy, π):决策规则,用于描述在状态 s 下采取动作 a 的概率: π(a|s)
MDP 的目标是通过一个最优策略 ( π^* ) 最大化期望累积奖励
,通常定义为:
其中
是
时刻的奖励。
Bellman方程是动态规划(Dynamic Programming)的核心思想在马尔科夫决策过程(MDP)中的体现。以下是推导Bellman方程的详细过程,适用于状态值函数
和状态-动作值函数
。
目标是最大化累积折扣奖励:
其中:
:表示从时间
开始的即时奖励。
:折扣因子,用于控制未来奖励的权重。
我们引入状态值函数 V(s) 和状态-动作值函数 Q(s, a):
对于任意状态 s,累积奖励可以分为两部分:
。
开始的未来累积奖励。
因此:
根据马尔科夫性质(状态转移仅依赖于当前状态和动作):
展开期望值的形式:
这就是 Bellman期望方程。
类似地,对于状态-动作值函数:
下一时刻的奖励由下一状态 (S_{t+1}) 的状态值函数决定:
将状态值函数 (V(s')) 替换为动作值函数的最大值:
这就是 Bellman最优方程。
强化学习项目代码我已经放入GitCode里面,可以通过下面链接跳转:🔥 【强化学习】算法库 后续相关单智能体强化学习算法也会不断在【强化学习】项目里更新,如果该项目对你有所帮助,请帮我点一个星星✨✨✨✨✨,鼓励分享,十分感谢!!! 若是下面代码复现困难或者有问题,也欢迎评论区留言。
"""《值迭代算法项目》
时间:2024.12
作者:不去幼儿园
"""
import numpy as np # 引入NumPy库,用于数组操作
# 定义状态和动作的集合
states = ['s1', 's2'] # 状态空间,包含两个状态s1和s2
actions = ['a1', 'a2'] # 动作空间,包含两个动作a1和a2
# 定义状态转移概率,P(s'|s, a)
P = {
# 从状态s1通过动作a1转移到新状态的概率
('s1', 'a1'): [('s1', 0.8), ('s2', 0.2)],
('s1', 'a2'): [('s1', 0.5), ('s2', 0.5)],
# 从状态s2通过动作a1或a2转移到新状态的概率
('s2', 'a1'): [('s1', 0.4), ('s2', 0.6)],
('s2', 'a2'): [('s1', 0.3), ('s2', 0.7)],
}
# 定义奖励函数R(s, a, s')
rewards = {
('s1', 'a1', 's1'): 5, # 从s1通过a1转移到s1的奖励
('s1', 'a1', 's2'): 10, # 从s1通过a1转移到s2的奖励
('s1', 'a2', 's1'): 0, # 从s1通过a2转移到s1的奖励
('s1', 'a2', 's2'): 15, # 从s1通过a2转移到s2的奖励
('s2', 'a1', 's1'): 10, # 从s2通过a1转移到s1的奖励
('s2', 'a1', 's2'): 5, # 从s2通过a1转移到s2的奖励
('s2', 'a2', 's1'): 5, # 从s2通过a2转移到s1的奖励
('s2', 'a2', 's2'): 10, # 从s2通过a2转移到s2的奖励
}
# 初始化
gamma = 0.9 # 折扣因子,控制未来奖励的重要性
V = {s: 0 for s in states} # 初始化值函数,所有状态的值初始为0
threshold = 1e-4 # 设定收敛阈值,判断值函数是否收敛
# 值迭代主循环
while True:
delta = 0 # 记录值函数的最大变化量,用于判断是否收敛
for s in states: # 遍历所有状态
v = V[s] # 当前状态的旧值
# 计算当前状态在所有可能动作下的值,并选择最大的动作值
V[s] = max(
sum(p * (rewards.get((s, a, s_next), 0) + gamma * V[s_next])
for s_next, p in P[(s, a)]) # 使用Bellman方程计算值
for a in actions # 遍历所有动作
)
delta = max(delta, abs(v - V[s])) # 更新值函数变化的最大值
if delta < threshold: # 当值函数变化小于阈值时,认为收敛,退出循环
break
# 输出结果
print("Optimal Value Function:")
for s in states:
print(f"V({s}) = {V[s]:.2f}") # 格式化输出每个状态的最优值函数
定义状态和动作空间:
states
和 actions
定义了问题的状态和动作集合。
定义状态转移概率和奖励函数:
P
描述了每个状态下通过某一动作转移到其他状态的概率分布。
rewards
描述了从某个状态通过某一动作转移到目标状态时所获得的奖励值。
初始化:
所有状态的值函数初始值设为0。
折扣因子 gamma
控制未来奖励的权重(值越接近1,未来奖励越重要)。
值迭代主循环:
遍历每个状态,计算在当前策略下的最优值。
使用 Bellman 方程更新值函数,直到值函数的变化小于阈值 threshold
。
输出结果:
打印最终收敛后的最优值函数 V(s) 。
由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。
马尔科夫决策过程(MDP)是一个用来解决带有不确定性和动态性的决策问题的数学模型。除了 部分可观测马尔科夫决策过程(POMDP)之外,还有许多其他类型的 MDP 变体,它们在不同的假设和应用场景下对标准 MDP 做了扩展或修改。以下是几种常见的 MDP 变体的详细介绍:
组成,其中:
由于 POMDP 需要在不完全信息下做决策,问题的求解比标准的 MDP 要复杂得多,通常需要使用方法如 粒子滤波 或 贝叶斯滤波 来近似信念状态。
POMDP 变体允许在部分可观测的环境下进行决策,而不像 MDP 那样假设状态是完全可观测的。因此,POMDP 更适用于现实世界中的许多问题,如机器人定位、自动驾驶、健康诊断等。
马尔科夫决策过程(MDP)有许多变体,用于解决不同类型的决策问题。除了标准的 MDP 和部分可观测的 POMDP 之外,还有多智能体系统(Dec-POMDP)、分层决策(HMDP)、非马尔科夫系统(NMDP)、连续时间模型(CTMDP)等变体。每种变体都针对不同的应用场景或假设条件进行了优化,以应对更复杂、更不确定的决策问题。
更多强化学习文章,请前往:【强化学习(RL)】专栏
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有