研讨会系列 · KF L18 · 动态规划 · 第一部分

动态规划基础与问题形式化

DP 的基本要素、标准问题 (P1) 的形式化、7-11 便利店库存控制例子、开环控制 vs 闭环控制

📅 2026-06-27 🧩 动态规划 📦 库存控制 🔄 开环 vs 闭环

🎯 学完本节,你应能

理解动态规划的三要素与7-11库存控制模型

📖 前置知识

建议先完成前面的课程,或具备线性代数与概率论基础。

🎯 本讲目标

理解动态规划解决的基本问题——离散时间动态系统 + 累加代价函数。通过 7-11 便利店库存控制例子建立直觉,并区分开环与闭环策略。

🔑 核心思想

动态规划通过"最优性原理"将多步决策问题分解为一系列单步优化子问题,每个子问题的解只需基于当前状态,无需记忆完整历史。

📖 目录

1. 什么是动态规划?

动态规划(Dynamic Programming, DP) 既不是单一算法,也不是某个具体公式——它是一类解决序贯决策问题的方法论。

🧠 直觉

当你面临一系列需要先后做出的决定,而今天的决定会影响明天的局面时,动态规划就是告诉你:"从最后一步往前想,每一步都选当前最好的"。

我们来想一个简单的问题:假设你每天要决定吃多少零食。今天多吃一点会让你今天开心,但明天可能就胖了。你希望一周的总"开心值"最大。你怎么决定每天吃多少?

这就是一个典型的 DP 问题:

DP 告诉你的方法是:不要从第一天开始想,而是从最后一天倒着推——最后一天你做出最优决定,然后前一天的你根据"最后一天怎么做最好"来决策,以此类推。

2. 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}) $$

序贯决策,后一步受前一步影响

3. 基本问题 (P1) 的形式化

标准 DP 问题 (P1) 包含两个核心要素:

① 离散时间动态系统

$$ x_{k+1} = f_{k}(x_{k}, u_{k}, w_{k}), \quad k = 0, 1, \dots, N-1 $$

② 累加代价函数

$$ J = \mathbb{E}\left\{ g_{N}(x_{N}) + \sum_{k=0}^{N-1} g_{k}(x_{k}, u_{k}, w_{k}) \right\} $$

求解方法:动态规划!

📌 注意

DP 的理论适用范围很广——系统可以是线性的也可以是非线性的,扰动可以是高斯的也可以是非高斯的。关键在于代价的可加性和状态的马尔可夫性(未来只依赖于当前状态和当前控制)。

4. 例子:7-11 便利店库存控制

🏪 场景设定

你是一家 7-11 便利店老板,只卖一种商品(比如可可粉)。每天你需要决定:今天订多少货?

变量定义

系统模型

$$ x_{k+1} = x_{k} + u_{k} - w_{k} $$
  • $x_{k}$:第 $k$ 天开始时的库存(罐数)
  • $u_{k}$:当天订货量(罐数)
  • $w_{k}$:当天销售量(随机需求)

代价函数

$$ J = \mathbb{E}\left\{ R(x_{N}) + \sum_{k=0}^{N-1} \left[ r(x_{k}) + c u_{k} - \beta w_{k} \right] \right\} $$
  • $r(x_{k})$:库存惩罚(如 $r(x_{k}) = |x_{k}|^2$)
  • $c u_{k}$:采购成本
  • $\beta w_{k}$:销售收入
  • $R(x_{N})$:终端成本

问题解读

目标:选择订货策略 $u_{0}, u_{1}, \dots, u_{N-1}$ 最小化总期望成本 $J$

直觉上,如果订货太少,你会缺货、亏销售;如果订货太多,你会被库存惩罚压垮。DP 会告诉你:在库存高的时候少订,在库存低的时候多订——但具体"高"和"低"的阈值怎么定,就是 DP 要算出来的。

5. 开环控制 vs 闭环控制

同样是"决定每天订多少货",可以有不同的决策方式:

🔓 Off-line 开环策略

提前预定好每天的订货量,不考虑实际销售情况。

例 1:$u_{k} = 100, \forall k$(每天固定订 100 罐)

例 2:根据季节预设

$$ u_{k} = \begin{cases} 200, & \text{春秋} \\\\ 500, & \text{夏天} \\\\ 50, & \text{冬天} \end{cases} $$

⚠️ 如果某天卖得多导致库存为负,也无能为力

🔒 On-line 闭环策略

根据当前实际库存 $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} $$

✅ 可以根据实际情况动态调整,更鲁棒

📊 直观对比

开环策略就像你提前计划好一周每天吃什么——如果某天临时有聚餐,你的计划就泡汤了。闭环策略就像你每天根据冰箱剩了什么来决定做什么——灵活、适应性强。在随机系统中,闭环几乎总是优于开环。

6. 为什么闭环策略更好?

在存在随机扰动的情况下,开环策略面临一个根本问题:它不能纠正偏差。

开环:$u_{k}$ 只依赖于时间 $k$($\{u_{0}, u_{1}, \dots, u_{N-1}\}$ 提前固定)

闭环:$u_{k}$ 依赖于当前状态 $x_{k}$($u_{k} = \mu_{k}(x_{k})$)

假设第 3 天突然来了一大批顾客,把库存买光了($w_{3}$ 很大)。开环策略在第 4 天仍然按原计划订货,结果库存继续为负,损失惨重。而闭环策略看到库存很低,就会加大订货量来补货。

❌ 开环的脆弱性

  • 扰动累积——小偏差会变成大偏差
  • 没有反馈纠正机制
  • 最优性只在"平均意义"上成立

✅ 闭环的鲁棒性

  • 反馈纠正——偏差被实时修正
  • 利用最新信息做决策
  • 在随机扰动下始终接近最优

这就是控制理论的核心思想之一:反馈(Feedback)优于前馈(Feedforward)。下一讲我们将正式引入策略(Policy)的概念和 Bellman 方程——DP 求解的核心工具。

📝 自测题

问题 1

动态规划解决的基本问题 (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})\}$。目标:选择控制序列最小化期望代价。

问题 2

在 7-11 库存控制例子中,$x_{k+1} = x_{k} + u_{k} - w_{k}$ 的含义是什么?

点击查看答案

$x_{k}$ 是第 $k$ 天开始时的库存量,$u_{k}$ 是当天订货量,$w_{k}$ 是当天销售量。今天的库存 + 订货 - 销售 = 明天的库存。这是一个经典的状态演化方程。

问题 3

开环策略和闭环策略的核心区别是什么?

施老师大课堂 · 研讨会系列 KF L18 · 动态规划基础与问题形式化