images/logo.jpg

枕石的个人博客

强化学习的数学原理(二):贝尔曼公式(笔记整理版)

贝尔曼方程笔记整理

一、基本过程与定义

1. 单步过程 (A single step process) $$S_t \xrightarrow{A_t} R_{t+1}, S_{t+1}$$

  • $t, t+1$: 离散时间步 (discrete time instances)。
  • $S_t$: 状态
  • $A_t$: 动作
  • $R_{t+1}$: 奖励
  • $S_{t+1}$: 下一状态

此过程由以下概率分布所决定:

  • $S_t \to A_t$ 由策略决定: $\pi(A_t=a | S_t=s)$
  • $S_t, A_t \to R_{t+1}$ 由环境动态决定: $p(R_{t+1}=r | S_t=s, A_t=a)$
  • $S_t, A_t \to S_{t+1}$ 由环境动态决定: $p(S_{t+1}=s’ | S_t=s, A_t=a)$

2. 多步轨迹 (Multi-step trajectory) $$S_t \xrightarrow{A_t} R_{t+1}, S_{t+1} \xrightarrow{A_{t+1}} R_{t+2}, S_{t+2} \xrightarrow{A_{t+2}} \dots$$

Go语言如何实现面向对象编程

Go 没有类(class),但它依然支持 封装、继承(组合)、多态 这些面向对象思想,只是实现方式和传统语言(Java/C++/Python)不同。


1. struct(结构体)代替 class ✅ 非常常用

Go 用 struct 表示对象的数据。 在所有实际项目中,几乎所有业务实体都要用 struct

Go变量声明完整总结

Go 是一门 静态类型语言,所有变量在 编译期 必须有确定的类型(可推断)。Go 提供了多种声明方式,既保持了静态语言的安全性,又在语法上简洁。


1. 使用 var 声明

基本语法:

var name type
var name type = value
var name = value // 类型自动推断

示例:

强化学习入门:使用近端策略优化(PPO)求解倒立摆问题

摘要

本文旨在从理论层面深入探讨强化学习(Reinforcement Learning, RL)的运作机制。我们以经典的**倒立摆(CartPole-v1)**环境为例,首先将其形式化为马尔可夫决策过程(Markov Decision Process, MDP),然后详细阐述策略梯度(Policy Gradient)方法的基础,并最终推导出现今最稳定和常用的算法之一——近端策略优化(Proximal Policy Optimization, PPO)。每一部分理论都将与Python(PyTorch)代码实现紧密结合,展示理论公式在实践中的落地。