第五章 动态规划详解
合集下载
第5章动态规划
而演变到下一阶段的某个状态,这种选择手段称为决 策(decision) 。
描述决策的变量称决策变量(decision variable)。 变量允许取值的范围称允许决策集合(set of admissible decisions)。用uk(xk)表示第k阶段处于 状态xk时的决策变量,它是xk的函数,用Uk(xk)表示 了xk的允许决策集合。
序列
2)动态规划
20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过 程的优化问题时,提出了著名的最优化原理(principle of optimality), 把多阶段过程转化为一系列单阶段问题,创立了解决这类过程优化问 题的新方法——动态规划。
动态规划(dynamic programming)是运筹学的一个分支,是求解 决策过程(decision process)最优化的数学方法。
决策变量简称决策。
2019/10/22
4)策略 决策组成的序列称为策略(policy)。由初始状态x1开始的全
过程的策略记作p1,n(x1),即p1,n(x1)={u1(x1), u2(x2),...,un(xn)}。 由第k阶段的状态xk开始到终止状态的后部子过程的策略记作
pk,n(xk),即pk,n(xk)={uk(xk),uk+1(xk+1),...,un(xn)}。类似地, 由第k到第j阶段的子过程的策略记作 pk,j(xk)={uk(xk),uk+1(xk+1),...,uj(xj)}。 对于每一个阶段k的某一给定的状态xk,可供选择的策略
描述决策的变量称决策变量(decision variable)。 变量允许取值的范围称允许决策集合(set of admissible decisions)。用uk(xk)表示第k阶段处于 状态xk时的决策变量,它是xk的函数,用Uk(xk)表示 了xk的允许决策集合。
序列
2)动态规划
20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过 程的优化问题时,提出了著名的最优化原理(principle of optimality), 把多阶段过程转化为一系列单阶段问题,创立了解决这类过程优化问 题的新方法——动态规划。
动态规划(dynamic programming)是运筹学的一个分支,是求解 决策过程(decision process)最优化的数学方法。
决策变量简称决策。
2019/10/22
4)策略 决策组成的序列称为策略(policy)。由初始状态x1开始的全
过程的策略记作p1,n(x1),即p1,n(x1)={u1(x1), u2(x2),...,un(xn)}。 由第k阶段的状态xk开始到终止状态的后部子过程的策略记作
pk,n(xk),即pk,n(xk)={uk(xk),uk+1(xk+1),...,un(xn)}。类似地, 由第k到第j阶段的子过程的策略记作 pk,j(xk)={uk(xk),uk+1(xk+1),...,uj(xj)}。 对于每一个阶段k的某一给定的状态xk,可供选择的策略
管理运筹学第5章动态规划
总结词
通过动态规划解决定价问题,实现利润的最大化。
详细描述
定价问题是指如何制定产品的价格,以最大化企业的利 润。动态规划可以通过对问题的阶段划分和状态转移, 求解出最优的价格策略,使得企业的利润达到最大。在 实践中,定价问题需要考虑市场需求、竞争状况等多种 因素,动态规划可以为企业的定价决策提供科学的依据 。
05
动态规划的优化策略
多阶段决策优化
01
02
03
阶段划分
将问题划分为若干个相互 关联的阶段,每个阶段都 有自己的决策变量和状态 转移方程。
状态转移
在每个阶段,根据前一阶 段的决策和状态,计算当 前阶段的状态和最优决策。
最优解
通过逆序求解,从最后一 个阶段开始,逐步向前推 导,最终得到整个问题的 最优解。
递推关系的建立
根据阶段划分、状态转移方程和最优解的性质,建立递推关系。
递推关系的求解
通过递推关系求解各阶段的最优解,最终得到整个问题的最优解。
03
动态规划的求解方法
逆推法
总结词
逆推法是从目标状态出发,逆向推算出达到目标状态的最优决策,逐步推算出初始状态的最优决策。
详细描述
逆推法的基本思想是将问题分解为若干个相互联系的阶段,从最后阶段开始,依次向前推算出每个阶 段的最优决策,直到达到初始状态。这种方法适用于具有重叠子问题和最优子结构的问题,可以避免 重复计算,提高求解效率。
通过动态规划解决定价问题,实现利润的最大化。
详细描述
定价问题是指如何制定产品的价格,以最大化企业的利 润。动态规划可以通过对问题的阶段划分和状态转移, 求解出最优的价格策略,使得企业的利润达到最大。在 实践中,定价问题需要考虑市场需求、竞争状况等多种 因素,动态规划可以为企业的定价决策提供科学的依据 。
05
动态规划的优化策略
多阶段决策优化
01
02
03
阶段划分
将问题划分为若干个相互 关联的阶段,每个阶段都 有自己的决策变量和状态 转移方程。
状态转移
在每个阶段,根据前一阶 段的决策和状态,计算当 前阶段的状态和最优决策。
最优解
通过逆序求解,从最后一 个阶段开始,逐步向前推 导,最终得到整个问题的 最优解。
递推关系的建立
根据阶段划分、状态转移方程和最优解的性质,建立递推关系。
递推关系的求解
通过递推关系求解各阶段的最优解,最终得到整个问题的最优解。
03
动态规划的求解方法
逆推法
总结词
逆推法是从目标状态出发,逆向推算出达到目标状态的最优决策,逐步推算出初始状态的最优决策。
详细描述
逆推法的基本思想是将问题分解为若干个相互联系的阶段,从最后阶段开始,依次向前推算出每个阶 段的最优决策,直到达到初始状态。这种方法适用于具有重叠子问题和最优子结构的问题,可以避免 重复计算,提高求解效率。
管理运筹学 第5章 动态规划
0 - - - - -
- 4 - - - -
- - 6 - - -
-
-
-
0 4
0 1 2 3 4 5
- - - - 11 - - -
6 11 12 12
- - 12 - 12
- -
第二阶段:
( s 0 , 1 , 2 , 3 , 4 , 5 ) 台设备分配给第2工厂 当把 s 2 2 和第3工厂时,则对每个 s 2 值,有一种最优分配方案, 使最大盈利即最优2子过程最优指标函数值为 f ( s ) max [ r ( s , x ) f ( s )] 2 2 2 2 2 3 3
1
x1 s1 5 0 1
r1(5,x1)+f2(5-x1) 2 3 4
12+5
f1(x) 5
13+0
X1*
0+21 3+16 7+14 9+10
21
0,2
然后按计算表格的顺序推算,可知最优分配方案有两个: 甲:0台 乙:2台 丙:3台 甲:2台 乙:2台 丙:1台
5.3 动态规划的应用
背包问题
设有n种物品,每一种物品数量无限。第i种物品每
咨询项目类型 待处理客户数 处理每个客户所 处理每个客 需工作日数 户所获利润
1 3 4 7 2 8 11 20
1 2 3 4
《动态规划》课件
总结词
利用矩阵运算代替动态规划中的嵌套循环
详细描述
在动态规划中,对于二维问题,通常使用嵌套循环来计 算状态转移。矩阵优化则是将问题转化为矩阵运算,利 用矩阵的乘法、转置等运算代替嵌套循环,从而减少计 算量,提高算法效率。
滚动窗口优化
总结词
通过固定长度的窗口在问题中滚动来减少计算量
详细描述
滚动窗口优化是一种将问题分解为多个固定长度的子问 题,并利用子问题的解来求解原问题的策略。通过滚动 窗口,可以减少动态规划过程中的状态转移次数,提高 算法的效率。滚动窗口优化在解决最长公共子序列、最 长递增子序列等问题中有着广泛的应用。
《动态规划》ppt课 件
xx年xx月xx日
• 动态规划概述 • 动态规划的基本概念 • 动态规划的求解方法 • 动态规划的应用实例 • 动态规划的优化技巧 • 动态规划的总结与展望
目录
01
动态规划概述
定义与特点
定义ห้องสมุดไป่ตู้
动态规划是一种通过将原问题分解为 相互重叠的子问题,并存储子问题的 解以避免重复计算的方法。
特点
动态规划适用于具有重叠子问题和最 优子结构的问题,通过将问题分解为 子问题,可以找到最优解。
动态规划的适用范围
最优化问题
01
动态规划适用于解决最优化问题,如最大/最小化问题、决策问
题等。
利用矩阵运算代替动态规划中的嵌套循环
详细描述
在动态规划中,对于二维问题,通常使用嵌套循环来计 算状态转移。矩阵优化则是将问题转化为矩阵运算,利 用矩阵的乘法、转置等运算代替嵌套循环,从而减少计 算量,提高算法效率。
滚动窗口优化
总结词
通过固定长度的窗口在问题中滚动来减少计算量
详细描述
滚动窗口优化是一种将问题分解为多个固定长度的子问 题,并利用子问题的解来求解原问题的策略。通过滚动 窗口,可以减少动态规划过程中的状态转移次数,提高 算法的效率。滚动窗口优化在解决最长公共子序列、最 长递增子序列等问题中有着广泛的应用。
《动态规划》ppt课 件
xx年xx月xx日
• 动态规划概述 • 动态规划的基本概念 • 动态规划的求解方法 • 动态规划的应用实例 • 动态规划的优化技巧 • 动态规划的总结与展望
目录
01
动态规划概述
定义与特点
定义ห้องสมุดไป่ตู้
动态规划是一种通过将原问题分解为 相互重叠的子问题,并存储子问题的 解以避免重复计算的方法。
特点
动态规划适用于具有重叠子问题和最 优子结构的问题,通过将问题分解为 子问题,可以找到最优解。
动态规划的适用范围
最优化问题
01
动态规划适用于解决最优化问题,如最大/最小化问题、决策问
题等。
运筹学第五章动态规划1
s3 T2 ( B3 , d2 ( B3 ))
D2 ( B3 ) {B3C1 , B3C2 , B3C3 }
C D f 4 ( D1 ) f3 (C1 ) min 1 1 v3 (C1 , d3 (C1 )) f 4 (s4 ) d (Cmin 3 1 )D3 ( C1 ) C D f ( D ) 1 2 4 2
vk (sk , xk , yk ) qk yk pk xk k 4,3, 2,1 ; (5) 阶段指标: ,
(6) 动态规划基本方程:
max vk ( sk , xk , yk ) f k 1 ( sk 1 ) f k ( sk ) ( xk , y k )Dk ( sk ) k 4,3, 2,1 f5 ( s5 ) 0
5.2.1 动态规划的最优化原理
下面我们先研究一下例5.1这个特殊问题的求解。 最短路线问题有一个重要特性:如图
有
AB1 f 2 ( B1 ) f1 ( A) min AB2 f 2 ( B2 ) min v1 ( A, d1 ( A)) f 2 ( s2 ) d ( A )D1 ( A ) AB f ( B ) 1 2 3 3
求解(要求板书)
辅图1
辅图2
辅图3
5.2.3 动态规划的顺序解法
【 例 5.3】 图 5.3 所 示 为 一 水 利 网 络 , A 为 水 库 , B1 , B2 , B3 ; C1 , C2 , C3 ; D1 , D2 分别为不同的供水目的地,试找出给各供水目的地供水 的最短路线。
五动态规划.
第五章 动态规划
内容
多阶段决策过程与方法 动态规划的基本概念和递归方程 最优性原理与建模方程 动态规划的应用案例 实际应用案例:机器生产负荷分配 习 题
概 述
动态规划(dynamic programming)是求解多阶段决 策问题的一种最优化方法。20世纪50年代初,R. E. Bellman等人在研究多阶段决策过程 (multiple step decision process)的优化问题时,提出了著名的最优性原 理(principle of optimality),即把多阶段决策过程转 化为一系列单阶段问题,逐个求解,创立了解决这类多阶 段优化问题的新方法—动态规划。1957年R. E. Bellman出 版了《Dynamic Programming》,这是该领域的第一本著作。
5.2 动态规划的基本概念和递归方程
(1)阶段(step) 是对整个决策过程的自然划分。
通常根据时间顺序或空间顺序的特征,来划分阶段,以便 按阶段的次序解优化问题。阶段变量一般用 k=1,2, …,n 表示。
(2)状态(state)
--表示每个阶段开始时决策过程所处的自然状况。 能描述过程的特征并且无后效性,即当某阶段的状态变量给 定时,这个阶段以后过程的演变与该阶段以前各阶段的状态 无关。通常要求状态是直接的或间接可以观测的。 状态变量(state variable)---描述状态的变量称简称为状态 状态集合(set of admissible states)--变量允许取值的范围 用xk表示第k阶段的状态变量,它可以是一个数或一个向量。 用Xk表示第k阶段的允许状态集合,有xk ∈ Xk 。 n个阶段的决策过程有n+1个状态变量, xn+1表示xn演变的结果 根据过程演变的具体情况,状态变量可以是离散的或连续的
内容
多阶段决策过程与方法 动态规划的基本概念和递归方程 最优性原理与建模方程 动态规划的应用案例 实际应用案例:机器生产负荷分配 习 题
概 述
动态规划(dynamic programming)是求解多阶段决 策问题的一种最优化方法。20世纪50年代初,R. E. Bellman等人在研究多阶段决策过程 (multiple step decision process)的优化问题时,提出了著名的最优性原 理(principle of optimality),即把多阶段决策过程转 化为一系列单阶段问题,逐个求解,创立了解决这类多阶 段优化问题的新方法—动态规划。1957年R. E. Bellman出 版了《Dynamic Programming》,这是该领域的第一本著作。
5.2 动态规划的基本概念和递归方程
(1)阶段(step) 是对整个决策过程的自然划分。
通常根据时间顺序或空间顺序的特征,来划分阶段,以便 按阶段的次序解优化问题。阶段变量一般用 k=1,2, …,n 表示。
(2)状态(state)
--表示每个阶段开始时决策过程所处的自然状况。 能描述过程的特征并且无后效性,即当某阶段的状态变量给 定时,这个阶段以后过程的演变与该阶段以前各阶段的状态 无关。通常要求状态是直接的或间接可以观测的。 状态变量(state variable)---描述状态的变量称简称为状态 状态集合(set of admissible states)--变量允许取值的范围 用xk表示第k阶段的状态变量,它可以是一个数或一个向量。 用Xk表示第k阶段的允许状态集合,有xk ∈ Xk 。 n个阶段的决策过程有n+1个状态变量, xn+1表示xn演变的结果 根据过程演变的具体情况,状态变量可以是离散的或连续的
运筹学 第五章 动态规划
例 最短路线问题
如图 5-11 说示,给定一个线路网络图,要从 v1向 v10
铺设一条输油管道,各点间连线上的数字表示距离,问应选 择什么路线,可使总距离最短?
图5-11 运输网络图示
1.阶段和阶段变量
阶段—把所给问题按时间或空间先后顺序划分 为若干个相互联系又有区别的子问题
一个阶段就是需要作出一个决策的子问题。
(1)阶段指标函数(也称阶段效应) 第 k 段指标函数是指第 k 段,从 sk 状态且所作决策为 uk(sk)时的效益,用 gk(sk,uk)表示简记为 gk 。
(2)过程指标函数(也称目标函数)
程用效R果k(优sk劣,u的k)数表量示指k部标子过程的指标函数,指k部子过 Rp应kk((表sskk示,)u有为k)关:不,仅因跟此当它前是状s态k和spk有k(s关k),的还函跟数该,子严过格程说策来略,
描述阶段的变量叫做阶段变量,一般以k表示 阶段变量。
2.状态、状态变量和可能状态集 (1)状态、状态变量。
状态—各阶段开始时的客观条件 状态变量—描述状态变化的量,
常用 sk 表示第 k 阶段的状态变量
用以描述事物在某特定的时间与空间域中所处位置 及运动特征的量
图5-11 运输网络图示
(2)可能状态集
构成的决策序列,简称策略,表示为 p1 u1,u2 , ,un 。
k 部子策略是指从 k 阶段到第 n 阶段,依次进行的阶段决策构成的决策
如图 5-11 说示,给定一个线路网络图,要从 v1向 v10
铺设一条输油管道,各点间连线上的数字表示距离,问应选 择什么路线,可使总距离最短?
图5-11 运输网络图示
1.阶段和阶段变量
阶段—把所给问题按时间或空间先后顺序划分 为若干个相互联系又有区别的子问题
一个阶段就是需要作出一个决策的子问题。
(1)阶段指标函数(也称阶段效应) 第 k 段指标函数是指第 k 段,从 sk 状态且所作决策为 uk(sk)时的效益,用 gk(sk,uk)表示简记为 gk 。
(2)过程指标函数(也称目标函数)
程用效R果k(优sk劣,u的k)数表量示指k部标子过程的指标函数,指k部子过 Rp应kk((表sskk示,)u有为k)关:不,仅因跟此当它前是状s态k和spk有k(s关k),的还函跟数该,子严过格程说策来略,
描述阶段的变量叫做阶段变量,一般以k表示 阶段变量。
2.状态、状态变量和可能状态集 (1)状态、状态变量。
状态—各阶段开始时的客观条件 状态变量—描述状态变化的量,
常用 sk 表示第 k 阶段的状态变量
用以描述事物在某特定的时间与空间域中所处位置 及运动特征的量
图5-11 运输网络图示
(2)可能状态集
构成的决策序列,简称策略,表示为 p1 u1,u2 , ,un 。
k 部子策略是指从 k 阶段到第 n 阶段,依次进行的阶段决策构成的决策
第5章动态规划
这样的问题可以转化为一系列相互联系的单阶段优 化问题。 在每个阶段都需要作出决策。
每个阶段的决策确定以后,就得到一个决策序列, 称为策略。
多阶段决策问题就是求一个策略,使各阶段的总体
4
目标达到最优(如最小化费用,或最大化收益)。 相对于线性规划一次性地对一个问题求出整体最优解,
多阶段决策问题的这种解决办法(一个阶段一个阶段 地 , 而 不 是 一 次 性 地 ) 称 为 动 态 规 划 ( Dynamic Programming)。而原来的线性规划方法被称为静态规 划。
28
动态规划的子问题重叠性质
从算法角度而言,(离散变量的)动态规划所依赖的 另一个要素是子问题重叠性质:一个问题的求解可 以划分成若干子问题的求解,而处理这些子问题的 计算是部分重叠的。 动态规划法利用问题的子问题重叠性质设计算法, 能够节省大量的计算。对一些看起来不太可能快速 求解的问题,往往能设计出多项式时间算法。
今有 1000 台机床(x = 1000),投放到 A、B 两个 部门。 若给部门 A 投放 z 台机床,则产生效益 g(z) = z2, 回收 0.8z 台机床(a = 0.8)。 若给部门 B 投放 z 台机床,则产生效益 h(z) = 2z2, 回收 0.4z 台机床(b = 0.4)。 问连续投放 5 年(n = 5),每年如何投放,可使 5 年
则有如下递推方程:当 k = 2..n 时,
每个阶段的决策确定以后,就得到一个决策序列, 称为策略。
多阶段决策问题就是求一个策略,使各阶段的总体
4
目标达到最优(如最小化费用,或最大化收益)。 相对于线性规划一次性地对一个问题求出整体最优解,
多阶段决策问题的这种解决办法(一个阶段一个阶段 地 , 而 不 是 一 次 性 地 ) 称 为 动 态 规 划 ( Dynamic Programming)。而原来的线性规划方法被称为静态规 划。
28
动态规划的子问题重叠性质
从算法角度而言,(离散变量的)动态规划所依赖的 另一个要素是子问题重叠性质:一个问题的求解可 以划分成若干子问题的求解,而处理这些子问题的 计算是部分重叠的。 动态规划法利用问题的子问题重叠性质设计算法, 能够节省大量的计算。对一些看起来不太可能快速 求解的问题,往往能设计出多项式时间算法。
今有 1000 台机床(x = 1000),投放到 A、B 两个 部门。 若给部门 A 投放 z 台机床,则产生效益 g(z) = z2, 回收 0.8z 台机床(a = 0.8)。 若给部门 B 投放 z 台机床,则产生效益 h(z) = 2z2, 回收 0.4z 台机床(b = 0.4)。 问连续投放 5 年(n = 5),每年如何投放,可使 5 年
则有如下递推方程:当 k = 2..n 时,
[理学]第五章动态规划
24.11.2020
h
12
▪ 于是
24.11.2020
h
13
▪ ▪ (3)在第二阶段 ▪ 在第二阶段,还有三步才能到达终点 ▪ 同理f2 (s2)=min { d2 (s2, X2) +f3 (s3)}
24.11.2020
h
14
24.11.2020
h
15
▪ (4)在第一阶段
▪ 在第一阶段f1(s1)=min {d1(s1, x1)+f2 (s2)} ▪ 目前状态s1是①,即为出发点,可选择的
24.11.2020
hBiblioteka Baidu
9
▪ 根据最短路线这一特性,寻找最短路线的方
法,就是从最后一段开始,用由后向前逐步递推 的方法,求出各点到终点的最短路线,最终求得
由起点至终点的最短路线。所以,可以利用动态
规划的方法从终点逐段向始点方向寻找最短的路 线。
▪
首先,将这一问题看成是四个阶段的问题,
由①到 (②,③,④)中的点是第一阶段;由 (② 、
▪ 动态规划所研究的对象是多阶段决策问题。
▪ 多阶段决策问题是指一类活动过程,它可以 分为若干个相互联系的阶段,在每个阶段都需要 作出决策。这个决策不仅决定这一阶段的效益, 而且决定下一阶段的初始状态。
24.11.2020
h
第5章 动态规划 .ppt
5.4.1 动态规划的函数方程(DP)
Dynamic Programming
建立DP函数方程是指确定过程 的阶段及阶段数,规定状态变量和决 策变量的取法,给出各阶段的状态集 合,允许决策集合,状态转移方程和 指标函数等。
上面的计算过程是个逆推过程,利 用了第n阶段与第n+1阶段的关系:
fn+1(S’)= min{ d(S,dn(S))+ fn(S) } n=1,2,3,4,5
D3 5
E2
3
2
D2
4
F
4
2 E1
D1
A
B
C
D
E
F
2 状态(State)
各阶段开始时的客观条件叫做状态。
描述各阶段状态的变量称为状态变量,
常用 s 表示
状态变量的取值集合称为状态集合,
用 S 表示。
3 决策和策略(Decision and Policy)
当处于状态s时,就可以做出决定 (或选择),从而确定下一阶段的状态, 这种决定称为决策。
=min{(3+5,2+7)}=8 最短路线: C2——D2——E2——F
如果S=C3,则下一步只能取D3,故 f3(C3)= min{d(C3,D3)+ f2(D3)} =(4+7)=11 最短路线: C3——D3——E2——F
运筹学-第3版-课件-第5章 动态规划
5
B1
4 4
6
3 6
C1
2
1 2
2
D1 D2
3 4
2
A
B2
5
C2
6
E
2
3
B3
C3
3
D3
可以看出,各个阶段的决策不同,铺设的管道也不 同,并且当某个阶段的 始点给定后,它直接影响着后 面各阶段的行进路线和管道的长短,而后面各阶段的路 线 的选取不受这点以前各阶段路线的影响。 因此,最短路线问题可简化为四个阶段决策问题, 使由这四个阶段决策组成决策序列,也 称为策略所决 定的一条路线的总长度最短。
第13页
例2
多阶段资源分配问题-续(2)
因此,我们的问题就变成:求 y,y1,y2,…,yn-1 ,以 使g(y)+h(x-y)+ g(y1)+h(x1-y1)+ …+g(yn-1)+h(xn-1-
yn-1) 达到最大,且满足条件
x1=ay+b(x-y) x2=ay1+b(x1-y1) ……… xn-1=ayn-2+b(xn-2-yn-2)
例2 多阶段资源分配问题
设有数量为 x 的某种资源,将它投入两种
生产方式 A 和 B 中:以数量 y 投入生产方式 A ,
剩下的量投入生产方式B,则可得到收入
大学运筹学经典课件第五章动态规划
100%
重叠子问题
动态规划适用于具有重叠子问题 的情况,通过存储子问题的解, 避免重复计算,提高求解效率。
80%
边界和状态转移方程
动态规划需要确定问题的边界条 件和状态转移方程,以便递推求 解。
动态规划的应用领域
01
02
03
04
资源分配问题
动态规划可以应用于资源分配 问题,如背包问题、装载问题 等,通过合理分配资源达到最 优目标。
03
动态规划的经典模型
背包问题
问题描述
给定一组物品,每种物品都有一定的重量和价值,在限定的总重量内,如何选 择物品使得物品的总价值最大。
解决方案
使用动态规划,定义状态为前i个物品中选择总重量不超过j的情况下能达到的最 大价值。通过状态转移方程逐步求解,最终得到最优解。
最长公共子序列问题
问题描述
给定两个序列,求它们的最长公共子序列的长度。
解决方案
使用动态规划,定义状态为前i个元素和前j个元素之间的最长公共子序列的长度 。通过状态转移方程逐步求解,最终得到最长公共子序列的长度。
矩阵链乘法问题
问题描述
给定一个矩阵链,如何确定乘法运算 的顺序,使得计算该矩阵链所需的总 次数最少。
解决方案
使用动态规划,定义状态为计算矩阵i 到矩阵j所需的最少乘法次数。通过状 态转移方程逐步求解,最终得到最优 的计算顺序和最少乘法次数。
算法设计与分析05动态规划课件
repeat P(1)←1; P(k)←n for j←2 to k-1 do //找路径上的第j个结点//
P(j) ←D(P(j-1)) //回溯求出该路径//
repeat
end FGRAPH
算法的时间复杂度 若G采用邻接表表示,总计算时间为:
如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案, 就可以避免大量重复计算,从而得到多项式时间算法。
TphasoTts(nea) rwehdoooc==amnendnonttorermepeemabt eitr. the
——George Santayana,
nn/2/2
n/2n/2 Thne/2life of Rena/n2s/2on,
策序列——最优性原理成立。 反证:若不然,设v2,q3,…,qk-1,t是一条由v2到t的更短
的路径,则s, v2,q3,…,qk-1,t将是比s,v2,v3,…,vk-1,t更短的 从s到t的路径。与假设矛盾。
故,最优性原理成立
4. 最优决策序列的表示
设 ● S0:问题的初始状态 ● n次决策:问题需要做n次决策
最优化问题:问题的每一阶段可能有多种可供选择的决策,必须从 中选择一种决策。各阶段的决策构成一个决策序列。决策序列不同,所 导致的问题的结果可能不同。
多阶段决策的最优化问题就是:求能够获得问题最优解的决策序 列——最优决策序列。
P(j) ←D(P(j-1)) //回溯求出该路径//
repeat
end FGRAPH
算法的时间复杂度 若G采用邻接表表示,总计算时间为:
如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案, 就可以避免大量重复计算,从而得到多项式时间算法。
TphasoTts(nea) rwehdoooc==amnendnonttorermepeemabt eitr. the
——George Santayana,
nn/2/2
n/2n/2 Thne/2life of Rena/n2s/2on,
策序列——最优性原理成立。 反证:若不然,设v2,q3,…,qk-1,t是一条由v2到t的更短
的路径,则s, v2,q3,…,qk-1,t将是比s,v2,v3,…,vk-1,t更短的 从s到t的路径。与假设矛盾。
故,最优性原理成立
4. 最优决策序列的表示
设 ● S0:问题的初始状态 ● n次决策:问题需要做n次决策
最优化问题:问题的每一阶段可能有多种可供选择的决策,必须从 中选择一种决策。各阶段的决策构成一个决策序列。决策序列不同,所 导致的问题的结果可能不同。
多阶段决策的最优化问题就是:求能够获得问题最优解的决策序 列——最优决策序列。
运筹学--第五章 动态规划
Outline
1. 2. 3. 4. 5. 6. 7. 8.
多阶段决策问题 动态规划的基本概念 动态规划的基本思想 基本方程 动态规划的建模 动态规划的最优性原理 动态规划的优缺点 动态规划的应用举例
1 多阶段决策问题 多阶段决策问题举例:
例1 生产负荷问题:
某种机器可以在高、低两种负荷下进行生产。高负荷年产量 8,年完好率0.7;低负荷年产量5,年完好率0.9。现有完好机 器1000台,需制定一个5年计划,以决定每年安排多少台机器 投入高、低负荷生产,使5年的总产量最大。
2 10 6 6 10 12 14
C1
9
3
f4(D1)=5
D1
5
f5(E)=0
A
5
B2
4 13
C2
5 8
E D2
2
1
B3
12 11
C3
10
f 4 ( D1 ) = d( D1 → E) + f 5 ( E) = 5 + 0 = 5
3 动态规划的基本思想
B1
2 10 6 6 10 12 14
C1
9
3
1 多阶段决策问题 多阶段决策问题举例
例2 最短路径问题
B1
2 10 6 6 10
求A到E的最短路径?
12 14
C1
9
第五章 动态规划
xk X k (Sk )
边界条件:fn1(sn1) 0
§ 乘法合成
n
若Vk,n vi (si , xi ),过程指标等于各阶段指标之积 ik
opt 基本方程:fk (sk )
vk (sk , xk ) fk1(sk1)
xk X k (Sk )
边界条件:fn1(sn1) 1
上午9时13分
S13 1 4
6 S23
3
3
S33 3
进
口 港
阶段3
S14 3 ST
4 S24
城 市 阶段4
某 公 司
经过枚举计算: 从始点 S1到终点ST共有3×3×2×1=18条不同路线 最短路径 S1→S12→S33→S14→ST,最短路长11
上午9时13分
二、动态规划的求解思路
• 最优性原理:美国运筹学家贝尔曼提出
Sk1 Sk xk dk
n 阶段指标 vk (Sk , xk ) 表示第 k月的费用。 当 xk 0时, vk (Sk , xk ) H Sk 30;0Sk 当 xxkk >0时,vk (Sk , xk ) F cv xk H Sk 4000 5000xk 300Sk
n 最优指数函数fk(Sk):第k 阶段从期初库存 Sk开始到最后阶 段采用最优生产策略实现的最低生产费用。
• 全过程策略 p1,n(s1)= {x1, x2,…, xn} • k子过程策略 pk,n(sk)= {xk, xk+1,…, xn}
运筹学 第05章 动态规划
则
fk ( xk ) = opt ⊕ ri ( xi , ui ')
n uk ,Lun i=k ,
执行条件最优策略时的阶段状态序列称为 条件最优路线,表示为{xk, xk+1',…, xn', xn+1'} 条件最优路线
贝尔曼函数(3) 贝尔曼函数
动态规划方法的原理就是建立起fk(xk )与 fk+1(xk+1 )之间的递推关系,然后逐步求出所 有的fk(xk )
不一定等于最优路 线中的k阶段状态
为了将多阶段决策过程的任一阶段状态xk 的最优策略和最终的最优策略相区别,称 系统从xk出发,在k-后部 前者为条件最优策略 条件最优策略
子过程中的最优策略
贝尔曼函数(2) 贝尔曼函数
构成条件最优策略的决策称为条件最优决策 条件最优决策 将k阶段状态xk的条件最优决策表示为uk'(xk ), 简记为uk',相应的条件最优策略表示为 {uk', uk+1',…, un'}
u 决 策 Z x2
动态规划概念(4) 动态规划概念
如果上例中的生产计划不是只在一天里进行, 而是连续一周,每天投入一定量的原料,剩 余的原料后面可以继续使用,每天只允许生 产一种产品并获得相应的利润.问怎样决策 才能使一周的总利润最大? 解决这样的问题需要将决策过程分为多个阶 段,本问题需要分为如下的7个阶段.
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
16
4
n=4 时:前1堆的第2种情况。
4级 44 31 24 7 2 8 3 f(1, 4) = 24 + 31 + 44 = 99 = f(2, 4) + g(1, 4) w不变 = f(3, 4) + g(2, 4) + g(1, 4) 若f(2,4)越小,则f(1,4)就越小。 16 4 f(1, 4) = 20 + 24 + 44 = 88
求解算法
动态的含义:求解算法施加的状态是变化的。 当前状态只与其直接前趋状态有关,对其直接 前趋状态施加求解算法,成为当前状态。 最优性原则 (Principle of Optimality): 一个最优问题任何实例的最优解,是由该实例
......
求解算法
阶段 2
求解算法
的子实例的最优解组成的。对特定问题该原则
递推求解中的交叠子问题 (非最优化问题)
实例:计算裴波那契数的递归版本。 动态规划法:自底向上计算 递推式: 依次计算F(0), F(1), F(2), ..., F(n) n > 1 ,F(n) = F(n-1) + F(n-2) 一次,各次计算结果存入数组, 最后一个元素就是F(n)。用一个 F(0) = 0, F(1) = 1 例如,F(5) 计算过程用 递归树 表示: 单循环即可简单实现。 F(5) F(4) F(3) F(2) F(1) F(3) F(2) F(1) F(0)
F(2)
F(1)
F(1)
F(0)
F(1)
F(0)
树中可以看出,计算F(5)时要重复计算F(2)、F(3) 显然降低时间效率。此即交叠子问题,F(5) 分为 两个子问题 F(4) 和 F(3),F(4)包含了F(3) 。
★ 单起点最短路径问题 (区别于完全最短路径问题)
概念:给定一个连通图(有向或者无向),求给定起始顶点到结束顶点 的最短路径,此即单起点(单源)最短路径问题。完全最短路径 问题要求找到从每个顶点到其他所有顶点之间的最短路径。 分段:顶点集分为k个不相交子集Vd ,1≤d≤k , k≥2 , 级内顶点不相邻。 任一条边 (u,v),u∈Vd,v∈Vd+m,m≥1。令 |V1| = |Vk| = 1。 分级 k = 1 V1 从源点到收 点依次编号 16 源 1 点 k=2 V2 19 2 k=3 V3 12 10 5 k=4 V4 k=5 V5 计算方向
w[k ]
k i
j
f[i,j] ← 0(1 ≤ i ≤ n,1 ≤ j ≤ n); for i ←2 to n do //i表示层次,也是归并沙子的堆数,在上图中,表示行号 for j ←1 to n-i+1 do //表示列号 begin min ←f[i-1,j]; for k ←i-1 step -1 untill 1 do if min>f[k,j]+f[i-k,j+k] then //min{ f(1,n-1),f(1,2)+f(3,n),f(1,3)+f(4,n)… min ← f[k,j]+f[i-k,j+k] ; f[i,j] ←g[j,i+j-1]+min; end; return(f[n,1]); endp;
★ 数塔
问题:设有一三角形数塔如图。求一条自塔顶到塔底的路径,该路径上 节点值之和最大。 5级 91 13 46 7
78 4级
67 3级 11
73
8 65 26
18
2级 1级
40
27 14
39 15
32 8
6 12
7
13
24
11
分段:每一级台阶自然划分为一个阶段,成为多阶段决策的优化问题。 无法分段的问题,不能用动态规划法求解。 求解:动态规划法求解。自底向上计算,各实例计算满足最优性原则,
7 2
8 3
16 4
f(1, 4) = 15 + 28 + 44 = 87 最优 = f(1, 3) + g(1, 4) w不变
n=4 时:前3堆的第2种情况。 4级 3级 2级 1级 13 序号 1
44 28 15 7
2
= f(2, 3) + g(1, 3) + g(1, 4)
若f(1,3)越小,则f(1,4)就越小。
3级
2级 1级 13 序号 1
n=4 时:前2堆情况。 3级 2级 1级 13 序号 1 44
= f(1, 2) + f(3, 4) + g(1, 4) 24
若f(1,2)+f(3,4)越小,f(1,4)就越小 16 4
20
7 2 8 3
n=4 时:前3堆的第1种情况。 4级
3级 2级 1级 13 序号 1 20 28 44 f(1, 4) = 20 + 28 + 44 = 92 = f(1, 3) + g(1, 4) w不变 = f(1, 2) + g(1, 3) + g(1, 4) 若f(1,3)越小,则f(1,4)就越小。
28 15
7 2 8 3
f(i, j) —— 从第 i 堆到第 j 堆的代价和。 g(i, j) —— 从第 i 堆到第 j 堆的重量和。 f(1, 3) = 15 + 28 = 43 (最优结果) = f(2, 3) + g(1, 3)
2级
1级 13 序号 1
n=3时:第二种归并方法,前2堆后1堆。
的一种通用方法,对最优化问题提出最优性原则,从而创建最优化问题
的一种新算法设计技术——动态规划,它是一种重要的应用数学工具。 至少在计算机科学圈子里,人们不仅用它解决特定类型的最优化问题, 而最终把它作为一种通用的算法设计技术,即包括某些非最优化问题。 多阶段决策过程最优化: 现实世界里有许多问题属于这种情况:它有很多解,应用要求最优解。 穷举法通过找出全部解,再从中选出最优解。这种方法对于那些计算
复杂度很高、计算量很大的问题(如求最佳子集的组合问题),要找出
一切可能解,所耗费的计算时间可能是不可以接受的。因此,人们为了 降低求解问题的难度,把求解过程分为一系列阶段,各个阶段依次按照 最优性原则计算,最后阶段计算得到最优解。包括 分段、求解 两大步。 注:不能段化的问题不能用动态规划法求解。
阶段 n
因3堆有2种归并法,所以一共5小类归并法。前1堆第1种情况:
4级 3级 2级 1级 13 序号 1
44 31 15 7
2
f(1, 4) = 15 + 31 + 44 = 90 = f(2, 4) + g(1, 4) w不变 = f(2, 3) + g(2, 4) + g(1, 4)
若f(2,4)越小,则f(1,4)就越小。 8
如实例18的子实例为12和7,max(12+6, 7+6)=18。
数塔:动态规划法与穷举法的时间效率比较
输入规模:为便于分析,选择数塔层数k (k>0); 基本操作:节点值求和运算;增长函数:加法次数与 k 的关系; 效率类别:没有最佳、最差情况;(都要从塔顶计算到塔底) 增长率(次数): 各层节点数升序:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 节点总数 n 升序:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 层数k(顶为1):1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 路径总数 t 升序: 2, 4, 8, 16, 32, ..., t = 2k-1, k>1 1. 穷举法:T(k) = (k-1) 2k-1,k>1 (指数级) 本例k=5,每条路径上5个节点做4次加法,共64次加法。 2. 动态规划法:(层节点数 = 层数) 自底向上计算,k层加法总数为k-1层节点数×2,有效率计算式: T(k) = 2×(k-1+...+3+2+1) = k(k-1), k>1 (平方级) 本例加法总数 2×(4+3+2+1) = 20次,比64次少很多。
8
3
16
4
将 n = 4 归纳为 3 大类情况: f(1,4) = min { f(2,4), f(1,2) + f(3,4), f(1,3) } + g(1,4) 前 1堆 前 2堆 前 3堆
将n=4 计算式推广,对于任意的 n (n>1),归纳出如下公式:
f(1,n) = min{f(2,n), f(1,2)+f(3,n), f(1,3)+f(4,n), ... , f(1,n-1)} + g(1,n) 前 1堆 前 2堆 前 3堆 ...... 前n-1堆
3级 28 20 7 2 8 3 f(i, j) —— 从第 i 堆到第 j 堆的代价和。 g(i, j) —— 从第 i 堆到第 j 堆的重量和。 f(1, 3) = 20 + 28 = 48 = f(1, 2) + g(1, 3)
2级
1级 13 序号 1
n=4时:有3大类归并法。前1堆后3堆、前2堆后2堆、前3堆后1堆。
第5章 动态规划
★ 动态规划概述 ★ 数塔 ★ 最小代价子母树 ★ 非优化问题实例 ★ 单起点最短路径问题 ★最优二叉查找树 ★ 01背包问题
★ 动态规划概述
动态规划(Dynamic Programming),在20 世纪50年代由美国数学家 Richard Bellman(理查德 .贝尔曼)发明,作为多阶段决策过程最优化
4 2
17 3 13 4
9 6
7
4
3
10
3
10 6 8 7
8
6 5
4
8
9
8
4 9
8
4
收 10 点
8
本 例 : 带 权 有 向 图
图示求解过程:红色数字为实例求解结果(最优性原则)
★对于一个有k级的动态规划,需要列出从s到t的每一条路上的k2次判定结果.其中第i级判定是利用最优化原理 确定Vi+1中的哪 一个顶点在可能得到的最佳线路上.
★设D(i,j)是从顶点集Vi中的点j到t的一条最小耗费路线,cost(i,j) 是这条路线的耗费.由后向前推算,得:
cost(i,j)=min{C(j,l)+cost(i+1,l)} C(j,l):表示顶点集Vi中的顶点j到顶点集Vi+1中的点l的耗费 cost(i+1,l):表示顶点集Vi+1中的点l到目标点t的耗费
★ 非最优化问题实例
求中国象棋马的路径
6 5 4 3 2 1 6
可用回溯法和递归法求解, 但递归法效率 很低,栈空间占用很大。
5 4 3 2 1 6 5 4 3 2 1
问题:在m×n棋盘上,求马从P点跳到Q点的所有路径。
Q
P P
Q
P
Q
ห้องสมุดไป่ตู้
Q
P P
Q
P
Q
★ 最小代价子母树
问题:n (n>1) 堆沙子,重量向量 W = (w1,...wn)。要将它们归并为1堆, 归并规则:每次只能将相邻2堆归并为1堆,经过 n-1 次归并后, 最终归并为一堆。总代价为归并过程中新产生的沙堆质量之和, 这个代价最小的归并树称为最小代价子母树。 分析:属于最优化问题,目标为总代价最小。 分段:显然需要 n-1 次归并才能将 n 堆归并为 1 堆。自然地可以将每次 归并划分为一个阶段,成为多阶段决策问题,尝试动态规划法。 求解:(此处采用自底向上的分析,找规律较简洁) 当 n=2 时:仅一种归并法即2合1。 13 7 8 16 21 4 18 当 n=3 时:有2种归并方法,第一种归并方法如图,前1堆后2堆。 3级
// w[1...n]:n堆沙子的质量序列 // g[1...n;1...n]: g[i,j]= procedure mincpt(w) begin 计算g[i,j]=g[j,i]=
w[k ]
k i
j
//f[1…n:1…n]:f[I,j]表示第i层从第j个位置开始i堆沙子的最小归并代价,并约定f[1,i]=0
上式称为动态方程,即用方程给出的动态规划算法。很多动态规划算法
不能用方程形式给出,只能是描述性的。
13 20
7 15 43 87
8 24 46 98
16 37 69 98 127 178 185 239
21 25 66 118 156
4 22 65
18
145
F(1,n)在(13,7,8,16,21,4,18)上的结果
不一定满足(罕见),有必要检查其适用性。 子实例组成父实例,父实例分解为子实例。
阶段 1
对于某些多阶段决策问题,问题本身没有最优化要求,比如后面要讲到的
求中国象棋马从棋盘上一点移动到另一点的全部路径问题,又如计算裴波
那契序列的动态规划算法,它们属于非最优化问题的动态规划法。 动态规划法的特点: 1. 分阶段(级)决策。对最优化问题,用最优性原则设计。 2. 一般采用自顶向下分析(规模减小),自底向上计算(规模增加)。 计算过程是一级一级(一阶段一阶段)地向前推进,直到最终状态。
16
4
n=4 时:前1堆的第2种情况。
4级 44 31 24 7 2 8 3 f(1, 4) = 24 + 31 + 44 = 99 = f(2, 4) + g(1, 4) w不变 = f(3, 4) + g(2, 4) + g(1, 4) 若f(2,4)越小,则f(1,4)就越小。 16 4 f(1, 4) = 20 + 24 + 44 = 88
求解算法
动态的含义:求解算法施加的状态是变化的。 当前状态只与其直接前趋状态有关,对其直接 前趋状态施加求解算法,成为当前状态。 最优性原则 (Principle of Optimality): 一个最优问题任何实例的最优解,是由该实例
......
求解算法
阶段 2
求解算法
的子实例的最优解组成的。对特定问题该原则
递推求解中的交叠子问题 (非最优化问题)
实例:计算裴波那契数的递归版本。 动态规划法:自底向上计算 递推式: 依次计算F(0), F(1), F(2), ..., F(n) n > 1 ,F(n) = F(n-1) + F(n-2) 一次,各次计算结果存入数组, 最后一个元素就是F(n)。用一个 F(0) = 0, F(1) = 1 例如,F(5) 计算过程用 递归树 表示: 单循环即可简单实现。 F(5) F(4) F(3) F(2) F(1) F(3) F(2) F(1) F(0)
F(2)
F(1)
F(1)
F(0)
F(1)
F(0)
树中可以看出,计算F(5)时要重复计算F(2)、F(3) 显然降低时间效率。此即交叠子问题,F(5) 分为 两个子问题 F(4) 和 F(3),F(4)包含了F(3) 。
★ 单起点最短路径问题 (区别于完全最短路径问题)
概念:给定一个连通图(有向或者无向),求给定起始顶点到结束顶点 的最短路径,此即单起点(单源)最短路径问题。完全最短路径 问题要求找到从每个顶点到其他所有顶点之间的最短路径。 分段:顶点集分为k个不相交子集Vd ,1≤d≤k , k≥2 , 级内顶点不相邻。 任一条边 (u,v),u∈Vd,v∈Vd+m,m≥1。令 |V1| = |Vk| = 1。 分级 k = 1 V1 从源点到收 点依次编号 16 源 1 点 k=2 V2 19 2 k=3 V3 12 10 5 k=4 V4 k=5 V5 计算方向
w[k ]
k i
j
f[i,j] ← 0(1 ≤ i ≤ n,1 ≤ j ≤ n); for i ←2 to n do //i表示层次,也是归并沙子的堆数,在上图中,表示行号 for j ←1 to n-i+1 do //表示列号 begin min ←f[i-1,j]; for k ←i-1 step -1 untill 1 do if min>f[k,j]+f[i-k,j+k] then //min{ f(1,n-1),f(1,2)+f(3,n),f(1,3)+f(4,n)… min ← f[k,j]+f[i-k,j+k] ; f[i,j] ←g[j,i+j-1]+min; end; return(f[n,1]); endp;
★ 数塔
问题:设有一三角形数塔如图。求一条自塔顶到塔底的路径,该路径上 节点值之和最大。 5级 91 13 46 7
78 4级
67 3级 11
73
8 65 26
18
2级 1级
40
27 14
39 15
32 8
6 12
7
13
24
11
分段:每一级台阶自然划分为一个阶段,成为多阶段决策的优化问题。 无法分段的问题,不能用动态规划法求解。 求解:动态规划法求解。自底向上计算,各实例计算满足最优性原则,
7 2
8 3
16 4
f(1, 4) = 15 + 28 + 44 = 87 最优 = f(1, 3) + g(1, 4) w不变
n=4 时:前3堆的第2种情况。 4级 3级 2级 1级 13 序号 1
44 28 15 7
2
= f(2, 3) + g(1, 3) + g(1, 4)
若f(1,3)越小,则f(1,4)就越小。
3级
2级 1级 13 序号 1
n=4 时:前2堆情况。 3级 2级 1级 13 序号 1 44
= f(1, 2) + f(3, 4) + g(1, 4) 24
若f(1,2)+f(3,4)越小,f(1,4)就越小 16 4
20
7 2 8 3
n=4 时:前3堆的第1种情况。 4级
3级 2级 1级 13 序号 1 20 28 44 f(1, 4) = 20 + 28 + 44 = 92 = f(1, 3) + g(1, 4) w不变 = f(1, 2) + g(1, 3) + g(1, 4) 若f(1,3)越小,则f(1,4)就越小。
28 15
7 2 8 3
f(i, j) —— 从第 i 堆到第 j 堆的代价和。 g(i, j) —— 从第 i 堆到第 j 堆的重量和。 f(1, 3) = 15 + 28 = 43 (最优结果) = f(2, 3) + g(1, 3)
2级
1级 13 序号 1
n=3时:第二种归并方法,前2堆后1堆。
的一种通用方法,对最优化问题提出最优性原则,从而创建最优化问题
的一种新算法设计技术——动态规划,它是一种重要的应用数学工具。 至少在计算机科学圈子里,人们不仅用它解决特定类型的最优化问题, 而最终把它作为一种通用的算法设计技术,即包括某些非最优化问题。 多阶段决策过程最优化: 现实世界里有许多问题属于这种情况:它有很多解,应用要求最优解。 穷举法通过找出全部解,再从中选出最优解。这种方法对于那些计算
复杂度很高、计算量很大的问题(如求最佳子集的组合问题),要找出
一切可能解,所耗费的计算时间可能是不可以接受的。因此,人们为了 降低求解问题的难度,把求解过程分为一系列阶段,各个阶段依次按照 最优性原则计算,最后阶段计算得到最优解。包括 分段、求解 两大步。 注:不能段化的问题不能用动态规划法求解。
阶段 n
因3堆有2种归并法,所以一共5小类归并法。前1堆第1种情况:
4级 3级 2级 1级 13 序号 1
44 31 15 7
2
f(1, 4) = 15 + 31 + 44 = 90 = f(2, 4) + g(1, 4) w不变 = f(2, 3) + g(2, 4) + g(1, 4)
若f(2,4)越小,则f(1,4)就越小。 8
如实例18的子实例为12和7,max(12+6, 7+6)=18。
数塔:动态规划法与穷举法的时间效率比较
输入规模:为便于分析,选择数塔层数k (k>0); 基本操作:节点值求和运算;增长函数:加法次数与 k 的关系; 效率类别:没有最佳、最差情况;(都要从塔顶计算到塔底) 增长率(次数): 各层节点数升序:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 节点总数 n 升序:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 层数k(顶为1):1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 路径总数 t 升序: 2, 4, 8, 16, 32, ..., t = 2k-1, k>1 1. 穷举法:T(k) = (k-1) 2k-1,k>1 (指数级) 本例k=5,每条路径上5个节点做4次加法,共64次加法。 2. 动态规划法:(层节点数 = 层数) 自底向上计算,k层加法总数为k-1层节点数×2,有效率计算式: T(k) = 2×(k-1+...+3+2+1) = k(k-1), k>1 (平方级) 本例加法总数 2×(4+3+2+1) = 20次,比64次少很多。
8
3
16
4
将 n = 4 归纳为 3 大类情况: f(1,4) = min { f(2,4), f(1,2) + f(3,4), f(1,3) } + g(1,4) 前 1堆 前 2堆 前 3堆
将n=4 计算式推广,对于任意的 n (n>1),归纳出如下公式:
f(1,n) = min{f(2,n), f(1,2)+f(3,n), f(1,3)+f(4,n), ... , f(1,n-1)} + g(1,n) 前 1堆 前 2堆 前 3堆 ...... 前n-1堆
3级 28 20 7 2 8 3 f(i, j) —— 从第 i 堆到第 j 堆的代价和。 g(i, j) —— 从第 i 堆到第 j 堆的重量和。 f(1, 3) = 20 + 28 = 48 = f(1, 2) + g(1, 3)
2级
1级 13 序号 1
n=4时:有3大类归并法。前1堆后3堆、前2堆后2堆、前3堆后1堆。
第5章 动态规划
★ 动态规划概述 ★ 数塔 ★ 最小代价子母树 ★ 非优化问题实例 ★ 单起点最短路径问题 ★最优二叉查找树 ★ 01背包问题
★ 动态规划概述
动态规划(Dynamic Programming),在20 世纪50年代由美国数学家 Richard Bellman(理查德 .贝尔曼)发明,作为多阶段决策过程最优化
4 2
17 3 13 4
9 6
7
4
3
10
3
10 6 8 7
8
6 5
4
8
9
8
4 9
8
4
收 10 点
8
本 例 : 带 权 有 向 图
图示求解过程:红色数字为实例求解结果(最优性原则)
★对于一个有k级的动态规划,需要列出从s到t的每一条路上的k2次判定结果.其中第i级判定是利用最优化原理 确定Vi+1中的哪 一个顶点在可能得到的最佳线路上.
★设D(i,j)是从顶点集Vi中的点j到t的一条最小耗费路线,cost(i,j) 是这条路线的耗费.由后向前推算,得:
cost(i,j)=min{C(j,l)+cost(i+1,l)} C(j,l):表示顶点集Vi中的顶点j到顶点集Vi+1中的点l的耗费 cost(i+1,l):表示顶点集Vi+1中的点l到目标点t的耗费
★ 非最优化问题实例
求中国象棋马的路径
6 5 4 3 2 1 6
可用回溯法和递归法求解, 但递归法效率 很低,栈空间占用很大。
5 4 3 2 1 6 5 4 3 2 1
问题:在m×n棋盘上,求马从P点跳到Q点的所有路径。
Q
P P
Q
P
Q
ห้องสมุดไป่ตู้
Q
P P
Q
P
Q
★ 最小代价子母树
问题:n (n>1) 堆沙子,重量向量 W = (w1,...wn)。要将它们归并为1堆, 归并规则:每次只能将相邻2堆归并为1堆,经过 n-1 次归并后, 最终归并为一堆。总代价为归并过程中新产生的沙堆质量之和, 这个代价最小的归并树称为最小代价子母树。 分析:属于最优化问题,目标为总代价最小。 分段:显然需要 n-1 次归并才能将 n 堆归并为 1 堆。自然地可以将每次 归并划分为一个阶段,成为多阶段决策问题,尝试动态规划法。 求解:(此处采用自底向上的分析,找规律较简洁) 当 n=2 时:仅一种归并法即2合1。 13 7 8 16 21 4 18 当 n=3 时:有2种归并方法,第一种归并方法如图,前1堆后2堆。 3级
// w[1...n]:n堆沙子的质量序列 // g[1...n;1...n]: g[i,j]= procedure mincpt(w) begin 计算g[i,j]=g[j,i]=
w[k ]
k i
j
//f[1…n:1…n]:f[I,j]表示第i层从第j个位置开始i堆沙子的最小归并代价,并约定f[1,i]=0
上式称为动态方程,即用方程给出的动态规划算法。很多动态规划算法
不能用方程形式给出,只能是描述性的。
13 20
7 15 43 87
8 24 46 98
16 37 69 98 127 178 185 239
21 25 66 118 156
4 22 65
18
145
F(1,n)在(13,7,8,16,21,4,18)上的结果
不一定满足(罕见),有必要检查其适用性。 子实例组成父实例,父实例分解为子实例。
阶段 1
对于某些多阶段决策问题,问题本身没有最优化要求,比如后面要讲到的
求中国象棋马从棋盘上一点移动到另一点的全部路径问题,又如计算裴波
那契序列的动态规划算法,它们属于非最优化问题的动态规划法。 动态规划法的特点: 1. 分阶段(级)决策。对最优化问题,用最优性原则设计。 2. 一般采用自顶向下分析(规模减小),自底向上计算(规模增加)。 计算过程是一级一级(一阶段一阶段)地向前推进,直到最终状态。