ACM动态规划算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B
1
9 5 4
C
1
1 5 8
D
1
4 2 E
1
3 A 4 B
3
5
B
2
3
C
2
4 6
D
2
6 9
1 F
5
1 7
E
C
3
2
4 2
4
D
3
7 5
2
29
B
1
9 5 4 5 1 7
C
1
1 5 8
D
1
4
2 E
1
3
A 4
5
B
2
3
C
2
4 6
D
2
6 9
1 F
E B
3
2
C
3
4 2
4
D
3
7 5
2
1、阶段(stage)n: n = 1、2、3、4、5。 2、状态(state)Sn: S1={A},S2={B1,B2,B3},S3={C1,C2,C3},S4={D1,D2,D3},S5={E1,E2}。 3、决策(decision)Xn:决策集Dn(Sn)。 D1(S1)={X1(A)}={B1,B2,B3}= S2, D2(S2)={X2(B1),X2(B2),X2(B3)}={C1,C2;C1,C2,C3 ;C2,C3 }={C1,C2,C3}=S3, D3(S3)={X3(C1),X3(C2),X3(C3)}={D1,D2;D1,D2,D3; D1,D2,D3}={D1,D2,D3}=S4, D4(S4)={X4(D1),X4(D2),X4(D3)}={E1,E2;E1,E2;E1,E2}={E1,E2}=S5, D5(S5)={X5(E1),X5(E2)}={F;F}={F}。 4、状态转移方程:Xn = Sn+1
二、最短路径问题
例一、从A 地到D 地要铺设一条煤气管道,其中需经过 两级中间站,两点之间的连线上的数字表示距离,如 图所示。问应该选择什么路线,使总距离最短?
3
2 A 4 B2 B1 2 1 3 C2 4 C3 3
C1
1 D
3 1
3
2 A 4 B2 B1 2 1 3
C1
C2 4 C3 3
1 D
d( B1,C1 ) + f1 (C1 ) 3+1 f2 ( B1 ) = min d( B1,C2 ) + f1 (C2 ) = min 3+3 d( B1,C3 ) + f1 (C3 ) 1+4 4 = min 6 = 4 (最短路线为B1→C1 →D) 5
3
2 A 4 B2 B1 2 1 3
知识案例回顾
【例】数塔问题
如图所示的一个数塔,从顶部出发,在每一结点可以选 择向左走或是向右走,一直走到底层,要求找出一条路径,使 路径上的数值和最大。
问题分析 用贪婪的策略,则路径和分别为: 自上而下: 自下而上:
9
12 10 2 19 7
18 18
9
15 12 8 9 5 4 16 19 2 7 10 18 10 6 9 4 15 8 5 16
2 A 4 B2 B1 2 1 3
C1
C2 4 C3 3
1 D
3 1
第三阶段( A → B ): A 到B 有二条路线。
f3(A)1 = d(A, B1 )+ f2 ( B1 ) =2+4=6 f3 (A)2 = d(A, B2 )+ f2 ( B2 ) =4+3=7 ∴ f3 (A) = min d(A, B1 )+ f2 ( B1 ) = min{6,7}=6 d(A, B2 )+ f2 ( B2 ) (最短路线为A→B1→C1 →D)
2、算法框架
1. 动态规划的基本思想
动态规划方法的基本思想是,把求解的问题分成许多阶 段或多个子问题,然后按顺序求解各子问题。最后一个子问 题就是初始问题的解。
由于动态规划的问题有重叠子问题的特点,为了减少重 复计算,对每一个子问题只解一次,将其不同阶段的不同状 态保存在一个二维数组中。
2.适合动态规划的问题特征
以上的决策结果将五阶数塔问题变为4阶子问题,递推 出第四层与第五层的和为:
21(2+19),28(18+10),19(9+10),21(5+16)。
用同样的方法还可以将4阶数塔问题,变为3阶数塔问题。 …… 最后得到的1阶数塔问题,就是整个问题的最优解。
2.数据结构设计 1) 原始信息存储 原始信息有层数和数塔中的数据,层数用一个整型
3. 设计动态规划算法的基本步骤
设计一个标准的动态规划算法的步骤: 1) 划分阶段 划分阶段是运用动态规划求解多阶段决策问题的第一步, 在确定多阶段特性后,按时间或空间先后顺序,将过程划分 为若干相互联系的阶段。对于静态问题要人为地赋予“时间” 概念,以便划分阶段。 2) 选择状态 选择变量既要能确切描述过程演变又要满足无后效性, 而且各阶段状态变量的取值能够确定。一般地,状态变量的 选择是从过程演变的特点中寻找。 3) 确定决策并写出状态转移方程 通常选择所求解问题的关键变量作为决策变量,同时要 给出决策变量的取值范围
29 19 10
21 4
16
数塔及动态规划过程数据
总结
动态规划=贪婪策略+递推(降阶)+存储递推结果 贪婪策略、递推算法都是在“线性”地解决问题,而动态 规划则是全面分阶段地解决问题。可以通俗地说动态规划是 “带决策的多阶段、多方位的递推算法”。
1 认识动态规划
在动态规划算法策略中:
体现在它的决策不是线性的而是全面考虑不同的情况分别
3 1
解:整个计算过程分三个阶段,从最后一个阶段开始。
第一阶段(C →D): C 有三条路线到终点D 。
显然有 f1 (C1 ) = 1 ; f1(C2 ) = 3 ; f1 (C3 ) = 4
3
2 A 4 B2 B1 2 1 3
C1
C2 4 C3 3
1 D
3 1
第二阶段(B →C): B 到C 有六条路线。
d3(C2,D3)=6
等。
Z=opt[r1(s1,x1)*
如上例中,
rn(sn,xn)]。其中:opt为max或min,*为运算符号。 Z=min[d1(s1,x1)+ +dn(sn,xn)]=min[d1+d2+…+ dn] 28
*
二、典型动态决策问题建模及其求解 1、最短路线问题 例:求下列图中A到F的最短路线及最短路线值。
3 2 A 4 B2 B1 2 3 1 3 1
C1 C2 4 3
1 D
C3
最短路线为
A→B1→C1 →D
路长为 6
3、动态规划应用
B
1
9 5
C
1
1 5 8
D
1
4 2 E
1
3 A 4 B
3
5
B
2
4 5 1 7
3
C
2
4 6
D
2
6 9
1 F
E C
3
2
4 2
4
D
3
7 5
2
1、阶段(stage)n: 作出决策的若干轮次。n = 1、2、3、4、5。 2、状态(state)Sn:每一阶段的出发位置。构成状态集,记为Sn S1={A},S2={B1,B2,B3},S3={C1,C2,C3},S4={D1,D2,D3}, S5={E1,E2}。阶段的起点。 3、决策(decision)Xn:从一个阶段某状态演变到下一个阶段某状 态的选择。 构成决策集,记为Dn(Sn)。 阶段的终点。 D1(S1)={X1(A)}={B1,B2,B3}= S2, 27 ;C ,C D2(S2)={X2(B1),X2(B2),X2(B3)}={C1,C2;C1,C2,C 3 2 3
B
1
9 5 4 5 1 7
C
1
1 5 8
D
1
4 2 E
1
3 A 4 B
3
5
B
2
3
C
2
4 6
D
2ຫໍສະໝຸດ Baidu
6
1 F
9
E 7 5
2
2
C
3
4 2
4
D
3
4、策略(policy):全过程中各个阶段的决策Xn组成的有序总体{Xn}。 如 A B2 C1 D1 E2 F 上例从 A F 共有38种走法,即有38条路线,38个策略。 5、子策略(sub-policy) :剩下的n个阶段构成n子过程,相应的决策系列叫n子策略。 如 C1 D 1 E2 F 6、状态转移方程:前一阶段的终点(决策)是后前一阶段的起点(状态)。 Xn = Sn+1 7、指标函数:各个阶段的数量指标,记为rn(sn,xn)。 如上例中,用dn(sn,xn)表示距离。 d2(B3,C2)=1, 8、目标函数:策略的数量指标值,记为
变量n存储,数塔中的数据用二维数组data,存储成如 下的下三角阵: 9 12 10 2 19
15 6 18 7
8 9 10
5 4
16
2) 动态规划过程存储 必需用二维数组a存储各阶段的决策结果。二维数组a 的存储内容如下: a[n][j]=data[n][j] j=1,2,„„,n; i=n-1,n-2,„„1,j=1,2,„„,i;时 a[i][j]=max(d[i+1][j],d[i+1][j+1])+data[i][j]
6
10
9+15+8+9+10=51
19+2+10+12+9=52
问题分析
这个问题用贪婪算法有可能会找不到真正的最大和。 以上图为例就是如此。用贪婪的策略,则路径和分别为: 9+15+8+9+10=51 (自上而下), 19+2+10+12+9=52(自下而上)。 都得不到最优解,真正的最大和是:
9+12+10+18+10=59。
算法设计与分析
--动态规划算法
学习目标及内容
学习目 标 理解动态规划算法原理 掌握态规划算法应用
重点难点 动态规划原理 多阶段动态规划问题
动态规划算法
1 2 3 认识动态规划算法 算法框架 动态算法应用 动态规划总结 课后作业
4 5 6
【例1】数塔问题
方法:自底向上用“动态规划”选择
59 9 50 12 49 15
最后a[1][1]存储的就是问题的结果。
3) 最优解路径求解及存储
仅有数组data和数组a可以找到最优解的路径, 但需要 自顶向下比较数组data和数组a是可以找到。
数组data 数组a
9 12 10 2 19
15 6 18 7
8 9 10
5 4
16
59 50 38 21 19
49 34 28 7
38 10
34 6
29 8
21 2
19 19 7 7
28 18
19 9
10 10 4 4
21 5
16 16
算法设计
动态规划设计过程如下: 1.阶段划分: 第一步对于第五层的数据,我们做如下决策: 对经过第四层2的路径选择第五层的19, 对经过第四层18的路径选择第五层的10, 对经过第四层9的路径也选择第五层的10, 对经过第四层5的路径选择第五层的16。
动态规划算法的问题及决策应该具有三个性质: 1) 最优子结构。问题的最优解包含着其子问题的最优解。 这种性质称为最优子结构性质。 2) 有重叠子问题。每次产生的子问题并不总是新问题, 有些子问题被反复计算多次。这种性质称为子问题的 重叠性质。 3) 无后向性。如果某阶段状态给定后,则在这个阶段以 后过程的发展不受这个阶段以前各段状态的影响。
5、指标函数(距离):dn(sn,xn)。
6、指标递推方程:fn*(Sn)
d2(B3,C2)=1, d3(C2,D3)=6 等。 = min [rn(sn,xn)+ fn+1*(Sn+1) ], n=4、3、2、1
30
xn∈Dn(Sn) f5*(S5) = min [r5(s5,x5)]
课前导读
前一章学习了贪心算法,贪心算法总是作出在当前看来 最好的选择。也就是说贪心算法并不从整体最优考虑,它所 作出的选择只是在某种意义上的局部最优选择。 虽然贪心算法不能对所有问题都得到整体最优解,但对 许多问题它能产生整体最优解。如单源最短路经问题,最小 生成树问题等 贪心算法则通常以自顶向下的方式进行,以迭代的方式 作出相继的贪心选择,每作一次贪心选择就将所求问题简化 为规模更小的子问题。
进行决策, 并通过多阶段决策来最终解决问题。 在各个阶段采取决策后, 会不断决策出新的数据,直到找 到最优解.每次决策依赖于当前状态, 又随即引起状态的转移。 一个决策序列就是在变化的状态中产生出来的,故有“动
态”的含义。所以,这种多阶段决策最优化的解决问题的过程称
为动态规划。
动态规划的基本概念
1.阶段:把一个问题的过程,恰当地分为若干个相互联系的阶 段,以便于按一定的次序去求解。 2.状态:表示每个阶段开始所处的自然状况或客观条件。通常 一个阶段有若干个状态。 3.决策:表示当过程处于某一阶段的某个状态时,可以作出不 同的决定,从而确定下一阶段的状态,这种决定称为决策。 4.多阶段决策过程 可以在各个阶段进行决策,去控制过程发展的多段过程;其发 展是通过一系列的状态转移来实现的。
C1
C2 4 C3 3
1 D
3 1
d( B2,C1 ) + f1 (C1 ) 2+1 f2 ( B2 ) = min d( B2,C2 ) + f1 (C2 ) = min 3+3 d( B2,C3 ) + f1 (C3 ) 1+4 3 = min 6 = 3 (最短路线为B2→C1 →D) 5
3