① 一个离散时间动态系统 $x_{k+1} = f_{k}(x_{k}, u_{k}, w_{k})$;② 一个累加的代价函数 $J = \mathbb{E}\{g_{N}(x_{N}) + \sum g_{k}(x_{k}, u_{k}, w_{k})\}$。目标:选择控制序列最小化期望代价。
DP 的基本要素、标准问题 (P1) 的形式化、7-11 便利店库存控制例子、开环控制 vs 闭环控制
理解动态规划的三要素与7-11库存控制模型
建议先完成前面的课程,或具备线性代数与概率论基础。
🎯 本讲目标
理解动态规划解决的基本问题——离散时间动态系统 + 累加代价函数。通过 7-11 便利店库存控制例子建立直觉,并区分开环与闭环策略。
🔑 核心思想
动态规划通过"最优性原理"将多步决策问题分解为一系列单步优化子问题,每个子问题的解只需基于当前状态,无需记忆完整历史。
动态规划(Dynamic Programming, DP) 既不是单一算法,也不是某个具体公式——它是一类解决序贯决策问题的方法论。
🧠 直觉
当你面临一系列需要先后做出的决定,而今天的决定会影响明天的局面时,动态规划就是告诉你:"从最后一步往前想,每一步都选当前最好的"。
我们来想一个简单的问题:假设你每天要决定吃多少零食。今天多吃一点会让你今天开心,但明天可能就胖了。你希望一周的总"开心值"最大。你怎么决定每天吃多少?
这就是一个典型的 DP 问题:
DP 告诉你的方法是:不要从第一天开始想,而是从最后一天倒着推——最后一天你做出最优决定,然后前一天的你根据"最后一天怎么做最好"来决策,以此类推。
任何 DP 问题都包含三个基本要素:
存在一个离散时间动态系统,状态随时间演化:
$$ x_{k+1} = f_{k}(x_{k}, u_{k}, w_{k}) $$$x_{k}$=状态,$u_{k}$=控制,$w_{k}$=随机扰动
代价随时间可加(或可乘):
$$ J = \mathbb{E}\left\{g_{N}(x_{N}) + \sum_{k=0}^{N-1} g_{k}(x_{k}, u_{k}, w_{k})\right\} $$$g_{k}$=运行代价,$g_{N}$=终端代价
目标:选择控制序列使总期望代价最小:
$$ \min_{u_{0}, \dots, u_{N-1}} J(x_{0}) $$序贯决策,后一步受前一步影响
标准 DP 问题 (P1) 包含两个核心要素:
求解方法:动态规划!
📌 注意
DP 的理论适用范围很广——系统可以是线性的也可以是非线性的,扰动可以是高斯的也可以是非高斯的。关键在于代价的可加性和状态的马尔可夫性(未来只依赖于当前状态和当前控制)。
🏪 场景设定
你是一家 7-11 便利店老板,只卖一种商品(比如可可粉)。每天你需要决定:今天订多少货?
直觉上,如果订货太少,你会缺货、亏销售;如果订货太多,你会被库存惩罚压垮。DP 会告诉你:在库存高的时候少订,在库存低的时候多订——但具体"高"和"低"的阈值怎么定,就是 DP 要算出来的。
同样是"决定每天订多少货",可以有不同的决策方式:
提前预定好每天的订货量,不考虑实际销售情况。
例 1:$u_{k} = 100, \forall k$(每天固定订 100 罐)
例 2:根据季节预设
$$ u_{k} = \begin{cases} 200, & \text{春秋} \\\\ 500, & \text{夏天} \\\\ 50, & \text{冬天} \end{cases} $$⚠️ 如果某天卖得多导致库存为负,也无能为力
根据当前实际库存 $x_{k}$ 来决定今天订多少。
$$ u_{k} = \mu_{k}(x_{k}) $$例如:
$$ u_{k} = \begin{cases} 200, & \text{若 } x_{k} < 50 \\\\ 50, & \text{若 } x_{k} \ge 50 \end{cases} $$✅ 可以根据实际情况动态调整,更鲁棒
📊 直观对比
开环策略就像你提前计划好一周每天吃什么——如果某天临时有聚餐,你的计划就泡汤了。闭环策略就像你每天根据冰箱剩了什么来决定做什么——灵活、适应性强。在随机系统中,闭环几乎总是优于开环。
在存在随机扰动的情况下,开环策略面临一个根本问题:它不能纠正偏差。
假设第 3 天突然来了一大批顾客,把库存买光了($w_{3}$ 很大)。开环策略在第 4 天仍然按原计划订货,结果库存继续为负,损失惨重。而闭环策略看到库存很低,就会加大订货量来补货。
这就是控制理论的核心思想之一:反馈(Feedback)优于前馈(Feedforward)。下一讲我们将正式引入策略(Policy)的概念和 Bellman 方程——DP 求解的核心工具。
动态规划解决的基本问题 (P1) 的两个核心要素是什么?
① 一个离散时间动态系统 $x_{k+1} = f_{k}(x_{k}, u_{k}, w_{k})$;② 一个累加的代价函数 $J = \mathbb{E}\{g_{N}(x_{N}) + \sum g_{k}(x_{k}, u_{k}, w_{k})\}$。目标:选择控制序列最小化期望代价。
在 7-11 库存控制例子中,$x_{k+1} = x_{k} + u_{k} - w_{k}$ 的含义是什么?
$x_{k}$ 是第 $k$ 天开始时的库存量,$u_{k}$ 是当天订货量,$w_{k}$ 是当天销售量。今天的库存 + 订货 - 销售 = 明天的库存。这是一个经典的状态演化方程。
开环策略和闭环策略的核心区别是什么?
施老师大课堂 · 研讨会系列 KF L18 · 动态规划基础与问题形式化