算法设计 动态规划_第1页
算法设计 动态规划_第2页
算法设计 动态规划_第3页
算法设计 动态规划_第4页
算法设计 动态规划_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

动态规划法

9/29/20231方法概述:发展及研究内容动态规划(dynamicprogramming)是运筹学的一个分支,20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistepdecisionprocess)的优化问题时,提出了著名的最优化原理(principleofoptimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、资源分配、设备更新等问题,用动态规划比用其它方法求解更为方便。9/29/20232方法概述:发展及研究内容虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),可以人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。9/29/20233方法概述:基本思想动态规划的思想实质是分治思想和解决冗余。与分治法类似的是,将原问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,经分解的子问题往往不是互相独立的。若用分治法来解,有些共同部分(子问题或子子问题)被重复计算了很多次。如果能够保存已解决的子问题的答案,在需要时再查找,这样就可以避免重复计算、节省时间。动态规划法用一个表来记录所有已解的子问题的答案。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表方式。9/29/20234方法概述:求解步骤1、找出最优解的性质,并刻画其结构特征;2、递归地定义最优值(写出动态规划方程);3、以自底向上的方式计算出最优值;4、根据计算最优值时记录的信息,构造最优解。注:-步骤1-3是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤4可以省略;-若需要求出问题的一个最优解,则必须执行步骤4,步骤3中记录的信息是构造最优解的基础9/29/20235方法概述:适用条件

动态规划法的有效性依赖于问题本身所具有的两个重要性质最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解。9/29/20236方法概述:最优性原理及举例Bellman给出这个原理作为动态规划的适用条件,后来Morin在1982年证明了这只是一个充分条件而非必要条件。Bellman的原定义如下:Anoptimalpolicyhasthepropertythatwhatevertheinitialstateandinitialdecisionare,thenremainingdecisionsmustconstituteanoptimalpolicywithregardtothestateresultingfromfirstdecision.

最优性原理又称为最优子结构性质:

如果有一决策序列包含有非最优的决策子序列,则该决策序列一定不是最优的。即一个最优策略的子策略总是最优的。9/29/20237方法概述:最优性原理及举例(续)

例1:设G是一个有向加权图,则G从顶点i到顶点j之间的最短路径具有最优子结构性质。证明:(反证)设i~ip~iq~j是一条最短路径,但其中子路径ip~iq~j不是最优的,假设最优的路径为ip~iq’~j则我们重新构造一条路径:i~ip~iq’~j显然该路径长度小于i~ip~iq~j,与i~ip~iq~j是顶点i到顶点j的最短路径相矛盾.所以,原问题满足最优性原理。

9/29/20238方法概述:设计技巧动态规划的设计技巧:阶段的划分和状态的表示;在动态规划的设计过程中,阶段的划分和状态的表示是非常重要的两步,这两步会直接影响该问题的计算复杂性,有时候阶段划分或状态表示的不合理还会使得动态规划法不适用。9/29/20239方法概述:存在的问题空间溢出的问题,是动态规划解决问题时一个普遍遇到的问题;动态规划需要很大的空间以存储中间产生的结果,这样可以使包含同一个子问题的所有问题共用一个子问题解,从而体现动态规划的优越性,但这是以牺牲空间为代价的,为了有效地访问已有结果,数据也不易压缩存储,因而空间矛盾是比较突出的。9/29/202310例1:多段图的最短路问题多段图:设G=<V,E>是一个有向连通图,

其中|V|=n,|E|=m,V有划分{V1,V2,···,Vk},

这里V1={s},s称为源点,Vk={t},t称为

终点,其中k≥2。对于每条有向边

<u,v>∈E都存在Vi

∈V,使得u∈Vi

和v∈Vi+1,其中1≤i<k且每条边<u,v>均

附有代价C(u,v),则称G是一个k段图。9/29/202311123456789101112s97324212711118654356425V1V2V3V4V5t9/29/202312最短路:从源点s到终点t的整条路上的代价之和为最小。每个子集Vi构成图中的一段。由于E的约束,每条从s到t的路径都是从第一段开始,然后顺次经过第2段,第3段,···,最后在第k段终止。对于每条从s到t的路径,可以把它看成在k-2个阶段中做出的某个决策序列的相应结果。9/29/202313假设s,v2,v3,···,vk-1,t是一条从s到t的最短路径,还假定从源点s(初始状态)开始,已做出了到结点v2的决策(初始决策),因此v2就是初始决策所产生的状态。如果把v2看成是原问题的一个子问题的初始状态,解这个子问题就是找出一条由v2到t的最短路径。这条路径显然是v2,v3,···,vk-1,t,否则设v2,q3,···,qk-1,t是一条由v2到t的更短路径,则s,v2,q3,···,qk-1,t是一条比路径s,v2,v3,···,vk-1,t更短的由s到t的路径,与假设矛盾,故最优化原理成立。9/29/202314cost(i,j)=min{C(j,r)+cost(i+1,r)}

r∈Vi+1<j,r>∈EjrtViVi+1最短最短向前处理法:设P(i,j)是从Vi中的点j到t的一条最短路,cost(i,j)是这条路线的耗费。由后向前推算,得到9/29/202315123456789101112s97324212711118654356425V1V2V3V4V5tcost(4,9)=4cost(i,j)=min{C(j,r)+cost(i+1,r)}

cost(4,10)=2cost(4,11)=5cost(3,6)=min{6+cost(4,9),5+cost(4,10)}=min{6+4,5+2}=7从第3段的顶点6到t的最短路径是6-10-t5+29/29/202316123456789101112s97324212711118654356425V1V2V3V4V5tcost(3,7)=min{4+cost(4,9),3+cost(4,10)}=min{4+4,3+2}=5从第3段的顶点7到t的最短路径是7-10-tcost(3,8)=7从第3段的顶点8到t的最短路径是8-10-t9/29/202317123456789101112s97324212711118654356425V1V2V3V4V5tcost(2,2)=7从第2段顶点2到t的最短路是2-7-10-tcost(2,3)=9从第2段顶点3到t的最短路是3-6-10-tcost(2,4)=18从第2段顶点4到t的最短路是4-8-10-tcost(2,5)=15从第2段顶点5到t的最短路是5-8-10-tcost(1,1)=16从第1段顶点1到t的最短路径由两条:1-2-7-10-t和1-3-6-10-t9/29/202318从s到t的一条最短路径的代价为16。用D(i,j)表示使C(j,r)+cost(i+1,r)取得最小值

的r,则在上述求解过程中同时得到:D(3,6)=10,D(3,7)=10,D(3,8)=10D(2,2)=7,D(2,3)=6,D(2,4)=8D(2,5)=8,D(1,1)=2设从s到t的最短路径为s,w2,w3,···,wk-1,t则有w2=D(1,1)=2w3=D(2,D(1,1))=D(2,2)=7w4=D(3,D(2,D(1,1)))=D(3,D(2,2))=D(3,7)=10所以这条路径是1-2-7-10-t所以这条路径是1-2-7-10-t9/29/202319为了便于描述算法,对一个k段图的顶点,按段的顺序给它的每个顶点编号。设图中有n个顶点,则编号为1,2,···,n。首先,给s编为1号;然后给V2中的各个顶点分别编为2,3,···

,|V2|+1号;以此类推,最后t编号为n。这样编号使Vi+1中的任何顶点的编号大于Vi中所有顶点的编号。于是,可以按n-1,n-2,···,1的顺序计算出cost(i,j)和D(i,j)。算法中可以利用顺序编号的特点,而不再考虑顶点所在的段。9/29/202320设顶点的编号已知,边已知及边的代价函

数C(i,j)已知。用cost[i]表示顶点i到t的最小

代价,1≤i≤n。用D[i]表示从顶点i到t的最短路径上顶点i的后继顶点号,用P[i]表示最短路径经过第i级的顶点号,1≤i≤k9/29/202321求两点间最短路径的算法:ProcedureFgraph

1.{fori←1toncost[i]←0;

2.forj=n-1step–1to1do

{

3.找顶点r,使<j,r>∈E,且C(j,r)+cost[r]最小;

4.cost[j]←C(j,r)+cost[r];

5.D[j]←r;

}

6.P[1]←1;P[k]←n;

7.forj=2tok-1doP[j]←D[P[j-1]]

}O(n+|E|)9/29/202322123456789101112s97324212711118654356425V1V2V3V4V5t(从前)向后:设BPij是从源点s到Vi中顶点j的最小成本路径,bcost(i,j)是这条路径的代价bcost(i,j)=min{bcost(i-1,r)+C(r,j)}r∈Vi-1<r,j>∈E9/29/202323格路问题:求从起点O(0,0)到终点E(m,n)的最短路。则分别用穷举法和动态规划法的加法次数和比较次数各是多少?E(m,n)O(0,0)xy9/29/202324E(m,n)O(0,0)xy9/29/202325E(m,n)O(0,0)xymn个点9/29/202326例2:货郎担问题1243105209128913156810∞1015205∞910613∞12889∞v1

v2v3v4v1v2v3v49/29/202327不失一般性,考虑以结点1为起点和终点的一条哈密顿回路。每一条这样的路线都由一条边<1,k>和一条由结点k到结点1的路径组成,其中k∈V-{1},而这条由结点k到结点1的路径通过V-{1,k}的每个结点各一次。如果这条周游路线是最优的,则这条由结点k到结点1的路径必定是通过V-{1,k}的每个结点各一次的由k到1的最短路径。9/29/202328设T(i,S)是由结点i出发,经过结点集S中每个结点各一次并回到初始结点1的一条最

短路径长度,则T(1,V-{1})就是一条最优的周游路线长度。动态规划模型:T(1,V-{1})=min{d1k+T(k,V-{1,k})}2≤k≤nT(i,s)=min{dij+T(j,S-{j})}j∈S,i∉S9/29/202329∞1015205∞910613∞12889∞v1

v2v3v4v1v2v3v4T(1,{2,3,4})=min{d12+T(2,{3,4}),

d13+T(3,{2,4}),d14+T(4,{2,3})}T(2,{3,4})=min{d23+T(3,{4}),d24+T(4,{3})}T(3,{4})=d34+T(4,Φ)T(4,Φ)=d419/29/202330T(1,{2,3,4})T(2,{3,4})T(3,{2,4})T(4,{2,3})T(3,{4})T(4,{3})T(2,{4})T(4,{2})T(2,{3})T(3,{2})T(4,Φ)T(3,Φ)T(4,Φ)T(2,Φ)T(3,Φ)T(4,Φ)9/29/202331T(1,{2,3,4,5})T(2,{3,4,5})T(3,{2,4,5})T(3,{4,5})T(4,{5})T(5,{4})T(2,{4,5})T(5,{4})T(4,{5})9/29/202332T(1,{2,3,4})T(2,{3,4})T(3,{2,4})T(4,{2,3})T(3,{4})T(4,{3})T(2,{4})T(4,{2})T(2,{3})T(3,{2})T(4,Φ)T(3,Φ)T(4,Φ)T(2,Φ)T(3,Φ)T(4,Φ)1(n-1)C(n-2,n-2)(n-1)C(n-2,n-3)第k层(n-1)C(n-2,n-k-1)n-1一共层9/29/202333第k层(n-1)C(n-2,n-k-1);一共n-1层1+Σ(n-1)C(n-2,n-k-1)k=1n-1k=1=1+(n-1)ΣC(n-2,)n-1=1+(n-1)ΣC(n-2,)k=0n-2k-1k2n=1+C(n,1)+C(n,2)+…+C(n,n)=ΣC(n,k)k=0n=1+(n-1)2n-2空间复杂性O(n2n)9/29/202334矩阵链乘法问题描述加括号的方案数动态规划法9/29/202335矩阵链乘法:问题描述给定n个矩阵A1,A2,…,An,Ai的维数为pi-1×pi(1≤i≤n),要求计算连乘积A1A2…An由于矩阵乘法满足结合率,所以可以有许多不同的计算次序,这种计算次序可以用加括号的方式来确定。比如:A1,A2,A3,A4

(A1(

A2(

A3(A4)))(A1((

A2A3)A4))(A1A2)(

A3A4)((A1(

A2A3))

A4)((A1A2)

A3)A4)9/29/202336不同的计算次序有不同的计算量注:1.设Ap×q,Aq×r两矩阵相乘,普通乘法的次数为p×q×r2.加括号对乘法次数的影响如:A10×100×B100×5×C5×50((AB)C):10×100×5+10×5×50=7500次(A(BC)):100×5×50+10×100×50=75000次9/29/202337穷举法:将n个矩阵从第k和第k+1处隔开,对二个子序列再分别加括号,则可以得到下面递归式:因此,穷举法不是一个有效算法9/29/202338计算m[1][4]过程如下:自顶向下递归求解最优解的值如A[3:4]被计算了2次,保存下来可以节省许多时间9/29/202339matrixChain(int[]p,int[][]m,int[][]s){intn=p.length-1;for(inti=1;i<=n;i++)m[i][i]=0;for(intr=2;r<=n;r++)for(inti=1;i<=n-r+1;i++){intj=i+r-1;m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];s[i][j]=i;

for(intk=i+1;k<j;k++){intt=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];if(t<m[i][j]){m[i][j]=t;s[i][j]=k;}}

}}9/29/202340矩阵链乘法:动态规划算法自底向上记忆化方式求解m[i][j]-计算方向:j

m[1][1],m[1][2],m[1][3],…,m[1][n]m[2][2],m[2][3],…,m[2][n]i………m[n-1][n-1],m[n-1][n]m[n][n]

9/29/202341矩阵链乘法:动态规划算法(续)

计算示例:

行x列A1 30x35A2 35x15A3 15x5A4 5x10A5 10x20A6 20x256555443333i33322333111654321sj6543i21654321mj0000001512550003500100053752500750105007125437526251187593757875157509/29/202342矩阵链乘法:动态规划算法(续)

计算示例:

行x列A1 30x35A2 35x15A3 15x5A4 5x10A5 10x20A6 20x256555443333i33322333111654321sjResult((A1(A2A3))((A4A5)A6))traceback(inti,intj){ if(i==j)return; traceback(i,s[i][j]); traceback(s[i][j]+1,j); print(“A”,i,”*A”,s[i][j]); print(“andA”,s[i][j]+1,”*A”,j);}9/29/2023431.矩阵链乘问题满足最优性原理记A[i:j]为AiAi+1…Aj链乘的一个最优括号方案,设A[i:j]的最优次序中含有二个子链A[i:k]和A[k+1:n],则A[i:k]和A[k+1:n]也是最优的。(反证可得)2.矩阵链乘的子问题空间:A[i:j],1≤i≤j≤nA[1:1],A[1:2],A[1,:3],…,A[1:n]A[2:2],A[2:3],…,A[2:n]………A[n-1:n-1],A[n-1,n]A[n,n]9/29/202344递归求解最优解的值记m[i][j]为计算A[i:j]的最少乘法数,则原问题的最优值为

m[1][n](AiAi+1…Ak)pi-1×pk×(Ak+1Ak+2…Aj)pk×pj9/29/202345依据递归式自底向上计算。在计算过程中,保存已经解决的子问题答案。A1,A2,A3,A4,A5,A6m[2][5]=minm[2][2]+m[3][5]+p[1]p[2]p[5]m[2][3]+m[4][5]+p[1]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论