贝尔曼最优方程收敛性证明

贝尔曼方程有两种形式「贝尔曼期望方程」和「贝尔曼最优方程」,贝尔曼期望方程是在求解价值函数vπ(s)v_{\pi}(s)vπ(s)或者Q函数qπ(s,a)q_{\pi}(s,a)qπ(s,a)的时候使用,而贝尔曼最优方程则在求解最优策略时使用,

那么为什么贝尔曼最优方式是收敛的?简单来说Belman最优公式对应的算子是完备度量空间(也叫完备空间,空间中的任何柯西序列都收敛在该空间之内)上的一个压缩映射,根据巴拿赫不动点定理(也叫压缩映射定理或压缩映射原理),可以保证压缩映射不动点的存在性和唯一性。

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

以下转载自https://towardsdatascience.com/mathematical-analysis-of-reinforcement-learning-bellman-equation-ac9f0954e19f,来证明Bellman Optimality Equation为啥是收敛的:

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

### 策略迭代的收敛性证明 在强化学习领域,策略迭代是一种用于求解马尔可夫决策过程(MDP)的方法。它通过交替执行 **策略评估** 和 **策略改进** 来逐步逼近最优策略。 #### 1. 策略评估 策略评估的目标是计算当前策略 $\pi$ 下的状态价值函数 $V^\pi(s)$ 或动作价值函数 $Q^\pi(s, a)$。对于有限状态和动作空间的情况,可以通过贝尔曼方程反复迭代直到收敛来完成这一目标: $$ V^{\pi}(s) = \sum_{a} \pi(a|s) \left( R(s,a) + \gamma \sum_{s'} P(s'|s,a)V^{\pi}(s') \right) $$ 此步骤的核心在于利用动态规划的思想不断更新估计值直至满足误差阈值条件[^3]。 #### 2. 策略改进 一旦获得了精确的价值函数表示形式,则可以依据贪婪原则定义新的更优策略$\pi'$: 如果存在某个固定折扣因子γ∈[0,1),以及任意初始分布μ₀(x)=Pr[X₀=x],则有如下关系成立: $$ Q^{\pi}(s,a) = R(s,a)+\gamma\sum_{s'\in S}\mathbb{P}_{ss'}^{a}[max_{b}Q^{\pi}(s', b)] $$ 基于上述表达式构建的新策略必然不会劣于旧版方案即π'(·|s)≥π(·|s). #### 3. 收敛性的理论基础 由于每一次政策改善操作都会严格提升整体性能指标或者保持不变当达到全局最大点位置之时停止变化因此整个流程呈现单调递增趋势最终必将抵达稳定终点处也就是最佳解答所在之处[^1]. 同时考虑到每一轮次内部涉及大量重复运算所以实际耗时可能较长特别是针对规模庞大复杂的环境设定而言更是如此不过好在这方面具备良好数学特性便于分析验证其有效性. ```python def policy_iteration(env, gamma=1.0, theta=1e-8): """ 实现基本的策略迭代算法 参数: env: OpenAI Gym 环境实例或其他兼容 MDP 定义的对象. gamma: 折扣率 (默认为 1). theta: 停止标准的小数精度水平. 返回: pi: 最终获得的最佳确定性策略字典 {state -> action}. v: 对应状态下由该策略产生的期望回报数组. """ def one_step_lookahead(state, V): A = np.zeros(env.nA) for a in range(env.nA): for prob, next_state, reward, _ in env.P[state][a]: A[a] += prob * (reward + gamma * V[next_state]) return A nS = env.nS nA = env.nA V = np.zeros(nS) while True: delta = 0 # Policy Evaluation Step for s in range(nS): old_v = V[s] new_values = one_step_lookahead(s, V) best_action_value = max(new_values) V[s] = best_action_value delta = max(delta, abs(old_v - V[s])) if delta < theta: break # Initialize an arbitrary deterministic policy policy = np.ones([nS, nA]) / nA while True: stable_policy = True for s in range(nS): chosen_a = np.argmax(policy[s]) action_values = one_step_lookahead(s, V) best_a = np.argwhere(action_values == np.max(action_values)).flatten() if chosen_a not in best_a: stable_policy = False policy[s] = np.eye(nA)[best_a] if stable_policy: return policy, V ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值