Dynamic Programming
3.1 Shortest Paths
考虑一个具有非负弧长
一个最直接的方法:
- 找出所有从s到t的路径
- 评估所有s-t路径的长度
- 找出最短的长度
s−t路径的数量呈指数增长,对于大的图是不可行的。
如果s-t的最短路径经过节点p,那么子路径(s,p)和(p,t)一定分别为s到p和p到t的最短路径。
用
对于
假设
将
例:找出从A到J的最短路径
3.2 Priciple of Optimality
Richard Bellman(1952)提出了最优性和动态规划的原理。
— Richard Bellman on the Birth of Dynamic Programming. Stuart Dreyfus. Operations Research, Vol. 50, No. 1, 48-51, 2002
Principle of optimality:在决策或选择的最优序列中,每个子序列也必须是最优的。
最优原理适用于多阶段决策问题,有非常多的优化问题都满足这个原理,它适用于一类问题(而不是一个算法)。阶段可以指每个需要被计算值的节点,或者决定顺序的步骤。
最优性原理并不是一个定理,并不是所有的多阶段决策问题都满足它。
3.3 0-1 Knapsack Problem
考虑0-1背包问题
要用动态规划解决背包问题,首先要从多阶段决策的角度来分析这个问题。决定每个物品要不要拿可以看作一次决策,在这个过程中背包的容量会变化。定义
显然,当
下面,将问题写成递归的形式。对于第
初始条件:
如何求最优解呢?令
计算复杂度:
多项式时间的算法所需要的计算次数只与问题的规模n有关系。
例:0-1背包问题
3.4 Integer Knapsack Problem
考虑整数背包问题
下面,用动态规划来解决这个问题。定义
显然,当
递归方程:
对于
问:有更好的做法吗?
— 把每个阶段决定拿几个改成决定要不要拿一个,如果拿了一个要不要再拿下一个。
对于
(i)
(ii)
计算复杂度:
例:整数背包问题
注意:在整数背包问题中,表格的计算必须遵循从上到下,从左到右的顺序。
3.5 Uncapacitated Lot-Sizing
生产计划中的批量问题指的是决定最小成本生产和产品的库存保持问题从而在有限个离散阶段内满足需求。
ULS可以被看作一个 fixed-charge network flow(固定费用网络流)问题,需要决定打开哪条边
整数规划模型:
其中,
基本性质:
存在一个最优解满足
存在一个最优解使得如果
令
其中,
假设
前向递归(Wagner-Whitin算法):
其中,
对
计算复杂度: