Files
RL-learning/q_learning/q-learning.md
T
2026-08-31 17:55:15 +08:00

21 KiB
Raw Blame History

Q-Learning 走迷宫:原理与数学推导

本文是仓库配套文档,对应代码为 q_learning.py(numpy 表格型实现,可选 matplotlib 绘图。


一、问题形式化:迷宫是一个马尔可夫决策过程

把走迷宫抽象成标准 MDP 五元组 $(S,,A,,P,,R,,\gamma)$

符号 含义 本例取值
S 状态空间(所有格子坐标 $(r,c)$) 尺寸 n\times n 的网格
A 动作空间 上/下/左/右,$
P(s'\, \| \,s,a) 状态转移概率 确定性(见下)
R(s,a) 即时奖励 +100 / -1 / -10
\gamma 折扣因子 0.9

1.1 转移与奖励的具体化

动作集 A=\{0,1,2,3\} 对应位移向量 $\Delta={(-1,0),(1,0),(0,-1),(0,1)}$。执行动作 a 后:


s' \;=\; \begin{cases}
s + \Delta_a, & \text{若 } s+\Delta_a \in S \text{ 且非墙}\\
s, & \text{否则(撞墙或越界,原地不动)}
\end{cases}

因为结果由 (s,a) 唯一决定,转移概率是退化分布:$P(s'|s,a)=\delta_{,s',,f(s,a)}$。这一点至关重要——后文会看到,确定性环境下 Q-Learning 的收敛分析可以大幅简化。

奖励函数:


R(s,a) \;=\; \begin{cases}
+100, & s' = G \;\;(\text{到达终点})\\
-10, & s' = s \;\;(\text{撞墙 / 越界})\\
-1, & \text{其他(正常走一步)}
\end{cases}

1.2 策略与回报

策略 \pi(a\,|\,s) 是在状态 s 下选择动作 a 的概率分布。一次完整的交互产生轨迹 $(S_0,A_0,R_1,S_1,A_1,\dots)$,其中 S_0 为起点。**回报(Return)**是折扣后的累积奖励:


G_t \;=\; \sum_{k=0}^{\infty} \gamma^{k}\, R_{t+k+1}

由于 $|R| \le 100$,当 \gamma<1 时级数绝对收敛:


|G_t| \;\le\; \sum_{k=0}^{\infty}\gamma^{k}|R| \;=\; \frac{100}{1-\gamma}

这就是"折扣因子保证收敛"的严格理由:回报被夹在一个有限的几何级数之内

1.3 最优准则

强化学习的目标是找到一个使起点期望回报最大的策略:


\pi^{*} \;=\; \arg\max_{\pi}\;\mathbb{E}_{\pi}\!\left[\,G_{0}\;\big|\;S_{0}=s_{\text{start}}\right]

二、价值函数与贝尔曼方程

2.1 价值函数的定义

给定策略 $\pi$,定义状态价值动作价值


V^{\pi}(s) \;=\; \mathbb{E}_{\pi}\!\left[G_t\;\big|\;S_t=s\right],
\qquad
Q^{\pi}(s,a) \;=\; \mathbb{E}_{\pi}\!\left[G_t\;\big|\;S_t=s,\,A_t=a\right]

直觉:V^{\pi}(s) 是"从 s 出发、以后都按 \pi 走"的期望总收益;Q^{\pi}(s,a) 是"在 s 先做 $a$、以后按 \pi 走"的期望总收益。

2.2 贝尔曼期望方程的推导

利用 $G_t = R_{t+1} + \gamma,G_{t+1}$,代入 Q^{\pi} 的定义:


\begin{aligned}
Q^{\pi}(s,a)
&= \mathbb{E}_{\pi}\!\left[R_{t+1} + \gamma\,G_{t+1}\;\big|\;S_t=s,\,A_t=a\right]\\[2pt]
&= \mathbb{E}\!\left[R_{t+1}\;\big|\;s,a\right]
 \;+\; \gamma\,\mathbb{E}\!\left[\mathbb{E}\!\left[G_{t+1}\;\big|\;S_{t+1}\right]\;\Big|\;s,a\right] \quad (\text{塔性质/全期望公式})\\[2pt]
&= r(s,a) \;+\; \gamma \sum_{s'} P(s'|s,a)\,V^{\pi}(s')
\end{aligned}

其中关键一步是塔性质:对 G_{t+1} 先关于 S_{t+1} 取条件期望,其内层恰好是 $V^{\pi}(S_{t+1})$(因为 t+1 之后的动作都由 \pi 采样)。再结合


V^{\pi}(s) \;=\; \sum_{a} \pi(a|s)\,Q^{\pi}(s,a)

两式联立,即把"无限长的期望"化成了只与一步奖励和下一状态有关的自洽方程——这就是贝尔曼期望方程。

用途说明:期望方程并不出现在 Q-Learning 的更新公式里(更新用的是 2.3 的 max 版最优方程)。它的作用是:① 作为最优方程的内层成分($Q^{}(s,a)=r+\gamma\sum P,V^{}(s')$,其中 $V^{}=\max_a Q^{}$);② 解出任意固定策略的价值——第五节里 V(d) 的解析值、价值快照图的数值,都是把"沿最短路径走"这个策略代入本节方程算出来的;③ 理解 SARSA(其目标逼近的正是 ε-greedy 策略的期望方程)与策略评估。若只关心 Q-Learning 的更新本身,本节可先略读。

2.3 贝尔曼最优方程

记最优策略下的价值为 $V^{},,Q^{}$。在最优点上"每一步都选当前最优动作",于是


V^{*}(s) \;=\; \max_{a} Q^{*}(s,a),
\qquad
Q^{*}(s,a) \;=\; r(s,a) + \gamma \sum_{s'} P(s'|s,a)\, \max_{a'}\, Q^{*}(s',a')

在确定性迷宫中求和号退化为代入一个 $s'$,即


Q^{*}(s,a) \;=\; r(s,a) + \gamma \max_{a'} Q^{*}(s',a')

这组方程是后续一切推导的核心。它告诉我们:"最优动作的价值"由"即时奖励 + 折扣后的下一状态最优价值"决定

2.4 唯一性:压缩映射与不动点

定义贝尔曼最优算子 $T^{*}$


(T^{*}Q)(s,a) \;=\; r(s,a) + \gamma\max_{a'} Q(s',a')

则最优方程写作 $Q^{} = T^{}Q^{*}$,即 Q^{*}T^{*}不动点。为什么恰好有一个不动点?

引理(max 算子的非膨胀性):对任意两组数 ${u_a},{v_a}$


\left|\max_{a} u_a - \max_{a} v_a\right| \;\le\; \max_{a} \left|u_a - v_a\right|

证明:由 u_a \le v_a + |u_a-v_a| 两边取 max 得 $\max u \le \max v + \max|u-v|$;对称地 $\max v \le \max u + \max|u-v|$,合并即得。

由此可证 T^{*} 是 $\gamma$-压缩映射(在无穷范数 \|\cdot\|_\infty 下):


\begin{aligned}
\|T^{*}Q_1 - T^{*}Q_2\|_\infty
&\;=\; \gamma \max_{s,a}\left|\max_{a'} Q_1(s',a') - \max_{a'} Q_2(s',a')\right|\\[2pt]
&\;\le\; \gamma\,\|Q_1 - Q_2\|_\infty
\end{aligned}

Banach 不动点定理:完备度量空间上的 $\gamma$-压缩映射有唯一不动点 $Q^{*}$,且从任意初值 Q_0 反复迭代满足


\|Q_k - Q^{*}\|_\infty \;\le\; \gamma^{k}\,\|Q_0 - Q^{*}\|_\infty

\gamma^{k} 的速率几何收敛。这既证明了最优价值存在唯一,也给出了"值迭代"这一类算法收敛的理论依据。Q-Learning 正是对这一算子做样本化的异步近似

2.5 确定性环境带来的化简

因为转移是确定性的,公式中所有 E_{s'}[\,\cdot\,] 都退化为直接代入 $s'$。这意味着:

  1. TD 目标不含采样噪声,误差只来自"信息尚未从终点传播过来"bootstrap 滞后);
  2. 因此常数学习率即可精确收敛(见 3.3 的解析推导);
  3. 值迭代的收敛速率在每一层就是干净的 \gamma 打折。

三、Q-Learning 算法

3.1 从值迭代到随机近似

理论上我们可以反复计算 $Q \leftarrow T^{*}Q$(值迭代)。但现实中我们不知道 rP 的完整信息,只能在环境中试走、观测 (s,a,r,s') 四元组。于是用单次观测去近似期望:


\underbrace{r + \gamma\max_{a'}Q(s',a')}_{\text{TD 目标 }\, Y}
\;\approx\;
\underbrace{r(s,a) + \gamma \sum_{s'}P(s'|s,a)\max_{a'}Q(s',a')}_{(T^{*}Q)(s,a)}

这就是 Robbins–Monro 随机逼近的思想:用噪声样本替代期望,向不动点方程 Q - T^{*}Q = 0 的根靠近。

3.2 更新公式与 TD 误差


Q(s,a) \;\leftarrow\; Q(s,a) + \alpha\underbrace{\big[\,r + \gamma\max_{a'} Q(s',a') - Q(s,a)\,\big]}_{\delta_t \;=\; \text{TD 误差}}

TD 误差 \delta_t 是"现实所见"与"旧猜测"之差:正值说明这次发现这步比预想更值钱,负值反之。更新只朝 \delta_t 的方向挪 \alpha 一步。

与贝尔曼最优方程逐项对照

表达式 角色
旧估计 Q(s,a) 当前猜测
即时奖励 r 实际到手
未来价值 \gamma\max_{a'} Q(s',a') 对最优未来的乐观估计(打 \gamma 折)
目标值 Y = r + \gamma\max_{a'} Q(s',a') 单样本的 (T^{*}Q)(s,a)
TD 误差 \delta = Y - Q(s,a) 修正方向

3.3 收敛性

WatkinsDayan 定理1992):若

  1. 每个状态—动作对 (s,a) 被访问无穷多次;
  2. 学习率 \alpha_k(s,a) 满足 RobbinsMonro 条件 $\sum_k\alpha_k=\infty,\ \sum_k\alpha_k^{2}<\infty$
  3. 奖励有界,

Q_t \to Q^{*} 以概率 1 成立。

实践中本实现取常数 $\alpha=0.1$,并不满足条件 2。但在确定性迷宫里这无害,可以给出精确的解析结论:固定某个 $(s,a)$,把目标值 Y 暂视为常数,则更新为线性差分方程


Q_{k+1} = Q_k + \alpha\,(Y - Q_k)
\;\Longrightarrow\;
Q_k = (1-\alpha)^{k}\,Q_0 + \big[1-(1-\alpha)^{k}\big]\,Y

误差 |Q_k - Y|(1-\alpha)^{k} 几何衰减。例如 \alpha=0.1 时,$(1-\alpha)^{22} \approx 0.098$,即每约 22 次访问该状态—动作对,误差缩小一个数量级。真正的收敛瓶颈是传播的"层次":距终点 d 层的格子必须等 d-1 层价值稳定后才稳定,故总学习量级 $\sim O(D\times \text{每层更新次数})$,其中 D 为最短路长——这与"迷宫越大、需要越多局"的直观一致。

3.4 离策略(Off-policy)特性

更新公式中的未来项用的是 $\max_{a'}Q(s',a')$,即假设到达 s' 后走最优动作的价值。这与智能体实际用来选动作的行为策略无关——即使实际是用随机策略在探索,学习的目标依然是"如果以后都走最优"的价值。这正是 Q-Learning 收敛到 $Q^{*}$(贪心策略的价值)而不是 \pi_{\varepsilon} 的价值的原因。

3.5 与 SARSA 的数学差别

SARSA 把未来项换成实际执行的下一动作 a' 的价值:


Q_{\text{SARSA}}(s,a) \;\leftarrow\; Q(s,a) + \alpha\big[\,r + \gamma\,Q(s',a')\;-\;Q(s,a)\big]

其中 a' 由当前行为策略(含探索)采样。期望上它逼近的是


Q^{\pi_{\varepsilon}}(s,a) = r(s,a) + \gamma \sum_{a'} \pi_{\varepsilon}(a'|s')\,Q^{\pi_{\varepsilon}}(s',a')

即**$\varepsilon$-greedy 行为策略自身的价值**,而非最优价值。数学差异集中在一个算子:


\max_{a'} \quad\text{vs}\quad \mathbb{E}_{a'\sim \pi_{\varepsilon}}[\cdot]

Q-Learning 悲观/乐观地用 max(乐观偏差),SARSA 如实反映探索的代价。在带陷阱(危险吸收态)的环境里,SARSA 会学出"绕开陷阱"的保守路线,而 Q-Learning 学的是理论上最优、但执行时需承担探索风险的路线。两种方法都收敛,只是目标函数不同。

3.6 终止状态的边界条件

到达终点 G 后没有"下一步"。若把 G 的 Q 值写成不动点形式 $Q(G,a) = +100 + \gamma\max Q(G,\cdot)$,会引入不存在的自引用。因此终止状态的目标值不含 bootstrap 项


Q(s,a) \leftarrow Q(s,a) + \alpha\big[\,r - Q(s,a)\,\big], \qquad s' = G

实现上即"done 时目标值仅为 $r$"。若不区分,换成带随机奖励的环境就会算错。


四、探索:为什么必须乱走

4.1 覆盖条件

收敛定理要求每个 (s,a) 被访问无穷多次。若一直贪心($a = \arg\max_a Q(s,a)$),许多从未被试探过的动作会被永久错过,错误的估计也无法纠正——这违反了覆盖条件。因此必须引入探索。

4.2 ε-greedy 策略


\pi_{\varepsilon}(a\,|\,s) \;=\; \begin{cases}
\dfrac{1}{|A|}, & \text{以概率 }\varepsilon \quad(\text{均匀随机})\\[8pt]
\mathbb{1}\!\left[a = \arg\max_{a'}Q(s,a')\right], & \text{以概率 }1-\varepsilon \quad(\text{贪心})
\end{cases}

数学上写作:


\pi_{\varepsilon}(a|s) \;=\; \frac{\varepsilon}{|A|} + (1-\varepsilon)\,\mathbb{1}\!\left[a = \arg\max_{a'}Q(s,a')\right]

4.3 衰减与 GLIE

GLIEGreedy in the Limit with Infinite Exploration)要求:每个动作仍被访问无穷多次,但策略逐渐退化为贪心。本实现采用指数衰减:


\varepsilon_k \;=\; \max\!\left(\varepsilon_{\min},\; \varepsilon_0\,\lambda^{k}\right), \qquad \varepsilon_0=1.0,\ \lambda=0.99,\ \varepsilon_{\min}=0.05

何时到达下限?解 $\varepsilon_0\lambda^{k}=\varepsilon_{\min}$


k^{*} \;=\; \frac{\ln(\varepsilon_{\min}/\varepsilon_0)}{\ln \lambda}
\;=\; \frac{\ln 0.05}{\ln 0.99}
\;\approx\; \frac{-2.996}{-0.01005}
\;\approx\; 298

即前约 300 局以探索为主,之后进入利用阶段;保留 \varepsilon_{\min}=0.05 是防止早期偶然形成的错误估值被完全固化。


五、奖励设计的数学分析

5.1 定理:每步 -1 诱导最短路径

设从某状态沿一条长度为 d 的无撞墙路径走到终点,途中共 d 步:前 d-1 步各拿 $-1$,最后一步拿 $+100$。该路径的(最优)价值为


V(d) \;=\; -\!\sum_{k=0}^{d-2}\gamma^{k} \;+\; 100\,\gamma^{d-1}
\;=\; \gamma^{d-1}\!\left(100 + \frac{1}{1-\gamma}\right) - \frac{1}{1-\gamma}

单调性:对任意 $0<\gamma<1$d 越大 \gamma^{d-1} 越小,而括弧内 $100 + \tfrac{1}{1-\gamma}>0$,故


d_1 < d_2 \;\Longrightarrow\; V(d_1) > V(d_2)

结论:只要每步奖励为负、终点奖励为正,最优策略一定是步数最短的路径,且这一结论对所有 \gamma\in(0,1) 无条件成立。 若把每步奖励改成 $0$,则 V(d) 不再依赖 $d$,任何能到终点的路径价值相同,智能体就会随意游荡——这就是奖励设计为什么"每步 $-1$"。

5.2 价值沿最短路径的分布(数值实例)

以当前默认的 9×9 迷宫(seed 固定)为例,起点到终点 D=16 步,$\gamma=0.9$。距终点 d 步处的稳态价值:

$d$(距终点步数) V(d) = 100\gamma^{d-1} - \frac{1-\gamma^{d-1}}{1-\gamma} 约值
1 100 100.0
2 90-1 89.0
3 81-1.9 79.1
8 100\cdot 0.9^{7}-\frac{1-0.9^{7}}{0.1} 41.8
16(起点) 100\cdot 0.9^{15}-\frac{1-0.9^{15}}{0.1} 12.7

起点价值为正(12.7 > 0),说明该路径"划算";且价值沿路径单调递减,颜色从终点向起点变暗——这正是价值热力图快照中看到的"波从 G 向 S 回传"。训练前期该分布被层层填入,快照图记录的就是这个传播过程。

5.3 撞墙惩罚的作用

设状态 s 下某动作撞墙($s'=s$),其最优值为 $Q^{}(s,\text{撞墙})$。代入不动点方程:$Q^{} = -10 + \gamma\max_{a'}Q^{}(s,a') = -10 + \gamma V^{}(s)$。因此


Q^{*}(s,\text{撞墙}) \;<\; V^{*}(s) \;\iff\; V^{*}(s) > \frac{-10}{1-\gamma} = -100

只要该格的可达价值高于 $-100$(一般成立),撞墙动作永远不是最优。撞墙惩罚不改变最优策略集合,但把"错误动作"的 Q 值压得明显更低($\gamma V^{*}(s)-10$),形成清晰的负样本,加速排除而非改变极限

5.4 信号淹没:γ 过小的后果

价值传播的关键项是 $\gamma^{d-1}\cdot 100$。以 15×15D=28 步)为例:

\gamma 起点价值 \gamma^{27}\cdot100 - \frac{1-\gamma^{27}}{1-\gamma} 观察
0.5 \approx 0.006 - 2.0 = -2.0 信号被路费扣光,学不动
0.9 5.8 - 9.4 = -3.6 收敛慢,价值微弱
0.99 76.3 - 23.7 = 52.6 信号充足

注意 5.1 的排序定理依然成立,所以即使 \gamma=0.5 理论上仍选最短路径;但 |\Delta V| \sim \gamma^{d-1}(100+\tfrac{1}{1-\gamma}) 小到与撞墙惩罚、局部噪声同量级,学习变得极其缓慢。路径越长,γ 越应接近 1——这就是"远见"的数学含义。


六、迷宫生成与拓扑

6.1 递归回溯 = 生成树

迷宫取奇数尺寸 $n\times n$:房间格位于偶数坐标,隔墙位于奇数坐标。房间数为


N_{\text{room}} = \left(\frac{n+1}{2}\right)^2

9×9 时 $N_{\text{room}}=25$。递归回溯算法相当于:从 (0,0) 出发做深度优先搜索,每访问一个新房间打通相邻一堵墙。最终所有房间连通、且"回路数"为零,即形成一棵生成树——树的边数恰为


|E| = N_{\text{room}} - 1 = 24

生成树的性质决定了:任意两个房间之间有且仅有一条路径(完美迷宫)。这正是"分支不够复杂"的数学根源:树的分支因子低、死胡同长而少。

为什么必须奇数:若 n 为偶数,终点 (n-1,n-1) 落在奇数坐标上,永远是隔墙,迷宫无解。

6.2 braid:加弦成环

迷宫内所有"两侧都是路"的隔墙总数为(每对相邻房间一堵墙,横向与纵向各 \frac{n+1}{2}\cdot\frac{n-1}{2} 堵):


|E_{\max}| = 2\cdot\frac{n+1}{2}\cdot\frac{n-1}{2} \;=\; \frac{n^{2}-1}{2}

9×9 时为 40。生成树用了 24 堵,剩余 40-24=16 堵"可拆墙"。braid 参数 p 即以概率 p 拆掉这些墙——每拆一堵,就在树上加一条。图论中"回路数"等于圈秩(cyclomatic number):


\mu \;=\; |E| - |V| + 1

弦的条数就是独立环的个数。p=0.3 时期望拆掉 0.3\times16\approx 4.8 堵,即引入约 5 个独立环路。环路的引入使同一对起终点出现多条路径,Q 表必须在"步数相当的多条备选"之间真正比较,分支复杂度显著上升;p 越大越接近"开阔场地 + 散墙"。


七、运行与观察

7.1 参数

参数 默认 含义
--rows / --cols 9 迷宫尺寸(必须为 ≥3 的奇数)
--seed 0 迷宫生成与训练的随机种子
--episodes 500 训练局数
--braid 0.0 拆墙成环概率(0=完美迷宫)
--plot 生成两张训练过程图

运行示例(一句话):python q_learning.py --rows 15 --cols 15 --braid 0.3 --episodes 2000 --plot

输出物:控制台打印迷宫、每格最优动作(箭头)、贪心走出的一条路径、成功统计;--plot 时额外生成 qlearning_training.pngqlearning_snapshots.png

7.2 四联训练曲线

子图 数学对象 判读标准
逐局回报 G_0 的单次实现(含探索噪声) 整体上升、波动收窄
滑动成功率 到达概率的滑动频率估计(大数定律) 趋近 1
单局步数 回合内步数,对比 BFS 最短步 D 曲线逼近红线 D 即学会最短路
ε 曲线 \varepsilon_k = \max(\varepsilon_{\min},\varepsilon_0\lambda^{k}) 前约 300 局探索为主

其中红线 D 由广度优先搜索求出,等于 5.1 中 V(d) 的极值点对应的步数,作为"已学会最短路"的基准。

7.3 价值快照:传播过程的定格

qlearning_snapshots.png 在若干训练时刻各拍一张 V(s)=\max_a Q(s,a) 的热力图(同一色标),对应 3.3 的层次收敛分析:

  • 早期:全表接近 0(只有被偶然走到终点的格有正值);
  • 中期:G 附近的格子率先变亮,价值以每层 \gamma 的比例向四周"渗出",同时回填每步 $-1$;
  • 后期:整条最短路径被点亮,远处格子的价值沿 5.2 的公式 V(d)=\gamma^{d-1}(100+\frac{1}{1-\gamma})-\frac{1}{1-\gamma} 单调排列。

快照图是"价值从终点反向传播"这一数学事实最直观的证据。

7.4 常见现象排查

现象 数学原因 调整
走不到终点 / 绕圈 信号 \gamma^{D}R_{g} 被路费淹没(见 5.4 增大 \gamma 或终点奖励
学了很久不收敛 传播层次 D 大,覆盖不足(见 3.3 增大 --episodes
前期好后期退化 ε 衰减过快,覆盖条件被破坏(见 4.3) 衰减系数调大(0.995
路径不是最短路 每步奖励改为 0V(d) 失去单调性(见 5.1 保持每步 -1
结果不可复现 探索随机性来自 ε-greedy 采样 固定 --seed

八、进阶实验设计

  1. γ 扫描:分别取 \gamma=0.1/0.5/0.9/0.99 训练,对照 5.2/5.4 的解析值验证"远见程度"。
  2. ε 扫描:比较不同 \lambda 下的收敛曲线,观察覆盖—利用的权衡(4.3)。
  3. braid 扫描$p=0/0.15/0.3/0.5$,用 6.2 的圈秩公式预估环路数,观察步数曲线是否仍收敛到红线 $D$。
  4. 加陷阱:把某些格子设为吸收态,踩中奖励 -50 并终止。V 方程中这些状态加入终态集合,观察策略是否绕行;并对比 SARSA(3.5)——Q-Learning 学最优、SARSA 学安全。
  5. 随机风:以概率把智能体吹向随机方向,使 P(s'|s,a) 从退化分布变为非退化。此时 E_{s'}[\max Q]\max_{a'}E_{s'}[Q] 不再相等,2.5 的化简失效,随机性真正登场。
  6. 迁移到标准环境:把同一套更新套到 FrozenLake 等接口一致的环境,体会表格型方法的适用边界(状态太多时转 DQN)。

九、小结

走迷宫虽小,却完整覆盖了强化学习的核心数学:MDP 形式化 → 贝尔曼最优方程 → 压缩映射与唯一性 → 样本化的随机逼近(Q-Learning)→ 探索—利用权衡 → 奖励设计的数值分析

贯穿全文的一条主线是:Q^{*} 是贝尔曼最优算子 T^{*} 的唯一不动点,Q-Learning 只是用单步样本 (s,a,r,s') 去逼近它;收敛的快慢由"信号传播层次 $\gamma^{d}$"与"覆盖是否充分"决定。理解这条主线后,把"格子"换成任意可枚举状态、把"上下左右"换成任意离散动作,同一套数学框架即可迁移到调度、寻路、资源分配等实际问题。