动态规划(动态程序设计)课件.ppt
《动态规划(动态程序设计)课件.ppt》由会员分享,可在线阅读,更多相关《动态规划(动态程序设计)课件.ppt(247页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、动态规划动态规划上海市控江中学上海市控江中学 王建德王建德讨论的问题讨论的问题1 1、动态规划的基本概念、动态规划的基本概念2 2、动态规划的基础题型、动态规划的基础题型3 3、动态规划的综合题型、动态规划的综合题型 基本概念基本概念动态程序设计是解决多阶段决策最优化问动态程序设计是解决多阶段决策最优化问题的一种思想方法。所谓题的一种思想方法。所谓“动态动态”,指的,指的是在问题的多阶段决策中,按某一顺序,是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起根据每一步所选决策的不同,将随即引起状态的转移,最终在变化的状态中产生一状态的转移,最终在变化的状态中产生一个决策序列
2、。动态规划就是为了使产生的个决策序列。动态规划就是为了使产生的决策序列在符合某种条件下达到最优。决策序列在符合某种条件下达到最优。DAGCKBNPOMJFHELI312345214323142212223344阶段阶段1阶段阶段2阶段阶段3阶段阶段4阶段阶段5问题的引出:问题的引出:P P是出发点,从是出发点,从P P到到A A,求最短路径求最短路径思路令 从从P A的最短路径为的最短路径为P(A);P(A)=minP(B)+2,P(C)+3;从从P B的最短路径为的最短路径为P(B);P(B)=minP(D)+1,P(E)+2;从从P C的最短路径为的最短路径为P(C);P(C)=minP(
3、E)+5,P(F)+4;上述递推公式告诉我们,要求上述递推公式告诉我们,要求P(A)P(A)需要先求出阶段需要先求出阶段5 5中的中的P(B)P(B)和和P(C)P(C);要求要求 P(B)(P(B)(或者或者P(C)P(C)),),又要先求出阶段又要先求出阶段4 4中的中的 P(D)P(D)和和 P(E)(P(E)(或或P(F)P(F)和和P(E)P(E)(倒推)(倒推)显然,要依照上述递推过程求解,需要倒过来,从显然,要依照上述递推过程求解,需要倒过来,从P(P)P(P)出发,先求出第一阶段的出发,先求出第一阶段的P(O)P(O)和和P(N)P(N),再求第二阶段的再求第二阶段的P(K)P
4、(K),P(L)P(L),P(M)P(M);,最后得到最后得到P(A)P(A)(顺推)。(顺推)。h30h31h32h20h21h22h10h11h12h00h01h02v20v21v22v23v10v11v12v13v00v01v02v03(3,3)0213213yx数据结构数据结构将每条路经的长度存在数组中东西方向上的道路长度存将每条路经的长度存在数组中东西方向上的道路长度存在两维数组在两维数组h43h43中中,规定数组的第一维为行号,第二规定数组的第一维为行号,第二维为列号。维为列号。h43=3,2,3,2,1,4,3,4,5,3,1,2;南北方向上道路长度存至数组南北方向上道路长度存至
5、数组v34v34中,也规定中,也规定第一维为行号,第二维为列号。第一维为行号,第二维为列号。v34=2,2,3,4,4,1,2,4,1,2,2,3;求解过程为从(0,0)到(3,3)求最短路径问题定义二维数组,P44=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,第一维为行,第二维为列。这时P(O)为P01;P(N)为P10;P(A)为P33,以下为分阶段递推求解过程。P00=0;阶段阶段1:P01=P00+h00=0+3=3;P10=P00+v00=0+2=3;阶段阶段2:P11=min P01+v01,P10+h10=min3+1,2+2=4 P02=P01+h10=3+
6、2=5;P20=P10+v10=2+4=6 阶段阶段3:P12=min P02+v02,P11+h11=min5+3,4+1=5 P03=P02+h02=5+3=8;P30=P20+v20=6+1=7 P21=min P11+v11,P20+h20=min4+1,6+1=5阶段阶段4:P13=min P03+v03,P12+h12=min8+4,5+4=9 P22=min P12+v12,P21+h21=min5+2,5+4=7 P31=min P21+v21,P30+h30=min5+2,7+3=7 阶段阶段5:P23=min P13+v13,P22+h22=min9+4,7+5=12 P3
7、2=min P22+v22,P31+h31=min7+2,7+1=8最后最后:P33=min P23+v23,P32+h32=min/*12+3,8+2=10综上,数组综上,数组P P的通项表示为的通项表示为Pij=min(pi-1j+vi-1j),(pij-1+hij-1)Pij=min(pi-1j+vi-1j),(pij-1+hij-1)(i,j0)(i,j0)P0j=P0j-1+h0j-1P0j=P0j-1+h0j-1(i=0,j0)(i=0,j0)Pi0=Pi-10+vi-10Pi0=Pi-10+vi-10(i0,j=0)(i0,j=0)P P数组数据数组数据圆圈内为路口对圆圈内为路口
8、对P P点的最小距点的最小距离离,箭头为最佳行走路径。箭头为最佳行走路径。for j 1 to 4 do /*计算计算0行上的每点的距离行上的每点的距离*/p0j p0j-1+h0j-1;For i 1 to 4 do /*计算计算0列上的每点的距离列上的每点的距离*/pi0 pi-10+vi-10;for i 1 to 4 do for j 1 to 4 do pijmin(pi-1j+vi-1j),(pij-1+hij-1);For i3 downto 0 do /*输出每个路口对输出每个路口对P点的最小距离点的最小距离*/for j 0 to 3 do write(pij:4)write
9、ln;/*for*/程序程序 阶段:据空间顺序或时间顺序对问题的求解划分阶段。阶段:据空间顺序或时间顺序对问题的求解划分阶段。状态:描述事物的性质,不同事物有不同的性质,因状态:描述事物的性质,不同事物有不同的性质,因而用不同的状态来刻画。对问题的求解状态的描述是分而用不同的状态来刻画。对问题的求解状态的描述是分阶段的。阶段的。决策:根据题意要求,对每个阶段所做出的某种选择决策:根据题意要求,对每个阶段所做出的某种选择性操作。性操作。状态转移方程:用数学公式描述与阶段相关的状态间状态转移方程:用数学公式描述与阶段相关的状态间的演变规律。的演变规律。多阶段决策过程:将所研究的过程划分为若干个相互
10、多阶段决策过程:将所研究的过程划分为若干个相互联系的阶段,在求解时,对每一个阶段都要做出决策,联系的阶段,在求解时,对每一个阶段都要做出决策,前一个决策确定以后,常常会影响下一个阶段的决策。前一个决策确定以后,常常会影响下一个阶段的决策。动态规划的几个要素动态规划的几个要素 “最优性原理最优性原理”:不论初始状态和第一步:不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。产生的新状态,构成一个最优决策序列。最优决策序列的子序列,一定是局部最优决最优决策序列的子序列,一定是局部最优决策子序列。注意包含有非局部最
11、优的决策子序策子序列。注意包含有非局部最优的决策子序列,一定不是最优决策序列列,一定不是最优决策序列,例如贪心法。例如贪心法。动态规划的依据动态规划的依据“最优性原理最优性原理”动态规划的指导思想动态规划的指导思想在做每一步决策时,列出各种可能的局部解,之后在做每一步决策时,列出各种可能的局部解,之后依据某种判定条件,舍弃那些肯定不能得到最优解依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。这样,在每一步都经过筛选,以每一步的局部解。这样,在每一步都经过筛选,以每一步都是最优的来保证全局是最优的。筛选相当于最大都是最优的来保证全局是最优的。筛选相当于最大限度地有效剪枝(从搜索角度看),效
12、率会十分高。限度地有效剪枝(从搜索角度看),效率会十分高。但它又不同于贪心法。但它又不同于贪心法。贪心法贪心法:产生一个按贪心策略形成的判定序列,该产生一个按贪心策略形成的判定序列,该序列不保证解是全局最优的,因为有些问题不符合序列不保证解是全局最优的,因为有些问题不符合最优性原理。最优性原理。动态规划动态规划:产生许多判定序列,再按最优性原理对产生许多判定序列,再按最优性原理对这些序列加以筛选,去除那些非局部最优的子序列这些序列加以筛选,去除那些非局部最优的子序列。2 2、动态规划的基础题型、动态规划的基础题型1 1、路径问题、路径问题2 2、0101背包问题背包问题3 3、求最佳子序列问题
13、、求最佳子序列问题4 4、双重动态规划、双重动态规划路径问题的讨论路径问题的讨论问题的一般形式:问题的一般形式:1 1、计算所有路径方案、计算所有路径方案 2 2、计算一条最佳路径、计算一条最佳路径 3 3、计算两条最佳路径(多进程的最优化决策)、计算两条最佳路径(多进程的最优化决策)一般方法:一般方法:按照出发点走出的步数划分阶段,将当前步可达按照出发点走出的步数划分阶段,将当前步可达的顶点集定义为状态,当前步如何走定义为决策。的顶点集定义为状态,当前步如何走定义为决策。注意:注意:1 1、可能需要将原题转化为路径问题、可能需要将原题转化为路径问题 2 2、如果最佳路径问题不满足最优子结构特
14、征特、如果最佳路径问题不满足最优子结构特征特征的话,可以转化为判定性问题求解。征的话,可以转化为判定性问题求解。一、计算所有方案一、计算所有方案 对于一些阶段性强、但不属于最优化的问题,是对于一些阶段性强、但不属于最优化的问题,是否也可以借助动态规划方法呢?如果我们可以找出否也可以借助动态规划方法呢?如果我们可以找出状态转移的关系,并在状态转移方程状态转移的关系,并在状态转移方程中去掉最佳性要求中去掉最佳性要求optopt(minmin或或maxmax),将扩展子状),将扩展子状态的所有行动作为决策,则可以例举出由初始状态的所有行动作为决策,则可以例举出由初始状态至目标状态的所有方案。显然,在
15、计数类问题态至目标状态的所有方案。显然,在计数类问题中使用这种方法要比回溯法等搜索算法简捷许多。中使用这种方法要比回溯法等搜索算法简捷许多。例题 过河卒 如如图图,A A点点有有一一个个过过河河卒卒,需需要要走走到到目目标标B B点。卒行走的规则:可以向下、或者向右。点。卒行走的规则:可以向下、或者向右。同同时时在在棋棋盘盘上上的的任任一一点点有有一一个个对对方方的的马马(如如上上图图的的C C点点),该该马马所所在在的的点点和和所所有有跳跳跃跃一一步步可可达达的的点点称称为为对对方方马马的的控控制制点点。例例如如上上图图C C点点上上的的马马可可以以控控制制8 8个个点点(图图中中的的P1P
16、1,P2P2.P8.P8)。卒卒不不能能通通过过对对方方马的控制点。马的控制点。棋棋盘盘用用坐坐标标表表示示,A A点点(0 0,0 0)、B B点点(n n,m m)(n,m(n,m为为不不超超过过2020的的整整数数,并并由由键键盘盘输输入入),同同样样马马的的位位置置坐坐标标是是需需要要给给出出的的(约约定定:CACA,同同时时CBCB)。现现在在要要求求你你计计算算出出卒卒从从A A 点点能能够够到到达达B B点点的路径的条数。的路径的条数。输输 入入:键键盘盘输输入入B B点点的的坐坐标标(n,m)(n,m)以以及及对对方方马马的的坐坐标标(X X,Y Y)输输 出:屏幕输出一个整数
17、(路径的条数)。出:屏幕输出一个整数(路径的条数)。按照题意,对方的马所在的点和所有跳跃一步可达的点称为对方马的控制点,卒不能通过对方马的控制点。在卒出发之前,必须计算对方马的所有控制点。显然,若(0,0)或(n,m)为控制点,则输出路径数为0。设constconstmove:array1.8,1.2of move:array1.8,1.2of integer integer /*/*movekmovek,1.21.2为马沿为马沿k k方向跳跃一步的水平增量和垂直增量方向跳跃一步的水平增量和垂直增量*/=(1,-2),(1,2),(2,1),(2,-1),(-1,2),(-=(1,-2),(1
18、,2),(2,1),(2,-1),(-1,2),(-1,-2),(-2,1),(-2,-1)1,-2),(-2,1),(-2,-1);varvar list:array-1.20,-1.20of list:array-1.20,-1.20of compcomp;/*/*listi,jlisti,j 为卒从为卒从(0,0)(0,0)到到(i,j)(i,j)的路径数的路径数*/can:array0.20,0.20of can:array0.20,0.20of booleanboolean;/*/*cani,jcani,j 为允许卒通行为允许卒通行(i,ji,j)的标志的标志*/1 1、计算对方马的
19、控制点、计算对方马的控制点设马的初始位置为(设马的初始位置为(x,yx,y)。按照下述方)。按照下述方式计算式计算cancan序列序列canx,y false;/*对方马所在的点为控制点对方马所在的点为控制点*/for i1 to 8 do /*从(从(x,y)出发,沿)出发,沿8个方向计算控制点个方向计算控制点*/jx+movei,1;/*计算计算i方向的跳马位置方向的跳马位置(j,k)*/ky+movei,2;if(j=0)and(k=0)and(j=n)and(k=m)/*若若(j,k)在在界界内内,则为控制点则为控制点*/then canj,kfalse;/*for*/if(not c
20、an0,0)or(not cann,m)/*若若卒卒的的起起点点和和终终点点为为控制点,则输出路径数控制点,则输出路径数0*/then writeln(0)else计计算算和和输输出出卒卒从从(0,0)走走到到(n,m)点点的的路路径径数数listn,m;/*else*/我我们们按按照照由由上上而而下下、由由左左而而右右的的顺顺序序,将将卒卒可可能能到到达达的的每每一一个位置个位置(i,ji,j)(0in(0in,0jm)0jm)设为阶段和状态。设为阶段和状态。首首先先,将将卒卒的的出出发发点点(0 0,0 0)的的路路径径数数设设为为1 1,该该位位置置设设为为控控制制点点(list0,01
21、;can0,0 list0,01;can0,0 falsfals)。然然后后从从(0 0,0 0)出出发发,按按照照由由上上而而下下、由由左左而而右右的的顺顺序序计计算算卒卒经经过过每每一一个个可可行行点点的的路路径径数数:若若(i i,j j)为为可可行行点点,则则走走前前位位置置(i-1,ji-1,j)和和(i,j-1i,j-1)的的路路径数加起来,即为从(径数加起来,即为从(0 0,0 0)走到()走到(i i,j j)的路径数,即的路径数,即listi,j=listi-1,j+listi,j-1listi,j=listi-1,j+listi,j-1(i i,j j)非控制点非控制点依次
22、类推,最后得出的依次类推,最后得出的listn,mlistn,m即为问题的解。由此得出算法:即为问题的解。由此得出算法:fillchar(list,sizeof(list),0);/*路路径径数数序序列列初初始始化化*/list0,01;can0,0 false;/*卒卒从从(0,0)出出发发的的路路径数为径数为1,该位置不再允许卒通行,该位置不再允许卒通行*/for i0 to n do /*按按照照由由上上而而下下、由由左左而而右右计计算从算从(0,0)到每个可行点的路径数到每个可行点的路径数*/for j0 to m do if cani,jthen listi,jlisti-1,j+l
23、isti,j-1;输出卒从(输出卒从(0,0)走到()走到(n,m)点的路径条数点的路径条数listn,m;2 2、计算和输出卒从(、计算和输出卒从(0 0,0 0)走到()走到(n,mn,m)点的路径条数)点的路径条数计算一条最佳路径计算一条最佳路径以路径长度划分阶段,从出发点走以路径长度划分阶段,从出发点走i i步可达的顶点集合为状态。步可达的顶点集合为状态。设设fi,jfi,j 为到达阶段为到达阶段i i的顶点的顶点j j的最优解。的最优解。枚举第枚举第i-1i-1阶段中与状态阶段中与状态j j相连的状态相连的状态k,k,其子问题的最优解其子问题的最优解 fi-1,k+fi-1,k+状态
24、状态k k至状态至状态j j的决策代价的决策代价w wk,jk,j即为阶段即为阶段i i的状态的状态j j的的一种方案。枚举了所有可能方案后即可得出一种方案。枚举了所有可能方案后即可得出fi,jfi,j。fi-1,k1Wk1,jfi-1,k2Wk2,jfi-1,kpWkp,j寻宝游戏寻宝游戏 分析分析在“藏宝图”中寻求一条含len个顶点的路径,使得(1klen)(xk,yk)-ak)2最小。数据结构数据结构const ex:array1.4of shortint=(0,0,1,-1);ey:array1.4of shortint=(1,-1,0,0);var n,m,len,i,j,k,l,i
25、0,j0:integer;/*n,m为为“藏宝图藏宝图”的规模的规模*/mp:array1.50,1.50of integer;/*“藏宝图藏宝图”*/c0,c1:array1.50,1.50of longint;/*c0I,j为为ck-1,I,j;c1I,j为为ck,I,j*/a:array1.150of integer;/*数列数列*/ans:longint;/*数列与表格的接近程度数列与表格的接近程度*/输入信息,计算c0的初始值readln(f,n,m);/*输入输入“藏宝图藏宝图”的规模的规模*/for i1 to n do /*输入输入“藏宝图藏宝图”*/for j1 to m d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 程序设计 课件
限制150内