第8讲+动态规划算法和实例分析ppt课件.ppt

上传人:飞****2 文档编号:28279610 上传时间:2022-07-26 格式:PPT 页数:21 大小:1.93MB
返回 下载 相关 举报
第8讲+动态规划算法和实例分析ppt课件.ppt_第1页
第1页 / 共21页
第8讲+动态规划算法和实例分析ppt课件.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《第8讲+动态规划算法和实例分析ppt课件.ppt》由会员分享,可在线阅读,更多相关《第8讲+动态规划算法和实例分析ppt课件.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 动态规划动态规划(DP(DP:Dynamic Programming)Dynamic Programming)是一种重要的程是一种重要的程序设计手段,其基本思想是在对一个问题的多阶段决策中,序设计手段,其基本思想是在对一个问题的多阶段决策中,按照某一顺序,根据每一步所选决策的不同,会引起状态的按照某一顺序,根据每一步所选决策的不同,会引起状态的转移,最后转移,最后会在变化的状态中获取到一个决策序列。会在变化的状态中获取到一个决策序列。 动态规划就是为了使获取的决策序列在某种条件下达动态规划就是为了使获取的决策序列在某种条件下达到最优。动态规划是一种将多阶段决策过程转化为一系列单到最优。动态规

2、划是一种将多阶段决策过程转化为一系列单阶段问题,然后逐个求解的程序设技方法。阶段问题,然后逐个求解的程序设技方法。引例:引例:已知已知6 6种物品和一个可载重量为种物品和一个可载重量为6060的背包,物品的背包,物品i(i=1,2,6)i(i=1,2,6)的的重量重量w wi i分别为分别为(15,17,20,12,9,14)(15,17,20,12,9,14),产生,产生的效益的效益p pi i分别为分别为(32,37,46,26,21,30)(32,37,46,26,21,30)。装包时每一件物品。装包时每一件物品可以装入,也可以不装,但不可拆开装。确定如何装包,使可以装入,也可以不装,但

3、不可拆开装。确定如何装包,使所得装包总效益最大。所得装包总效益最大。n引例分析引例分析多阶段决策问题,装每一件物品就是一个阶段,每个阶段都多阶段决策问题,装每一件物品就是一个阶段,每个阶段都有一个决策:物品装还是不装。有一个决策:物品装还是不装。n约束条件和约束条件和目标函数目标函数n按照单位效益最大化装按照单位效益最大化装包,得包,得x xi i的序列为的序列为(0,1,1,1,1,0)(0,1,1,1,1,0),总效益为,总效益为130130n按重量最大化装包,得按重量最大化装包,得x xi i的序列为的序列为( (0,1,1,0,1,1)0,1,1,0,1,1),总效,总效益为益为134

4、134n结论:决策序列结论:决策序列( (0,1,1,0,1,1)0,1,1,0,1,1)为最优决策序列为最优决策序列n将所求最优化问题分成若干个阶段,找出最优解的性质,将所求最优化问题分成若干个阶段,找出最优解的性质,并刻画其结构特征。并刻画其结构特征。n将问题发展到将问题发展到各个阶段时所处的不同状态表示出来,确定各个阶段时所处的不同状态表示出来,确定各个阶段状态之间的递推关系,并确定初始各个阶段状态之间的递推关系,并确定初始( (边界边界) )条件。条件。n应用递推求解最优值。应用递推求解最优值。n根据计算最有值时所得到的信息根据计算最有值时所得到的信息,构造最优解。,构造最优解。n最优

5、最优子结构。问题的最优解包含了其子问题的最优解,则子结构。问题的最优解包含了其子问题的最优解,则称该问题具有最优子结构性质。称该问题具有最优子结构性质。n重叠子问题重叠子问题。用递归算法自顶向下解问题时,有些子问题。用递归算法自顶向下解问题时,有些子问题会被反复计算多次,称这些字问题重叠。动态规划算法利会被反复计算多次,称这些字问题重叠。动态规划算法利用这种子问题重叠性质,对每个字问题只解一次用这种子问题重叠性质,对每个字问题只解一次( (保存下保存下来来) ),已有尽可能多的利用这些子问题的解。,已有尽可能多的利用这些子问题的解。n建立递推关系建立递推关系设设m(m(i,ji,j) )为背包

6、容量为背包容量j j,可取物品范围为,可取物品范围为i,i+1,ni,i+1,n的最大的最大效益值。则效益值。则n当当0=jw(0=j=w(j=w(i i) )时,有两种选择:时,有两种选择:不装入物品不装入物品i i,这时的最大效益值与,这时的最大效益值与m(i+1,j)m(i+1,j)相同相同;装入物品装入物品i i,这时会产生效益,这时会产生效益p(p(i i) ),背包剩余容量为,背包剩余容量为j-w(j-w(i i) ),可以选择物品,可以选择物品i+1i+1,n n来装,最大效益值为来装,最大效益值为m(i+1,j-w(m(i+1,j-w(i i)+p()+p(i i) );n最优

7、值计算最优值计算根据边界条件计算根据边界条件计算m(m(n,jn,j) )for(j=0;j=for(j=0;j=wn) if(j=wn) mnj=pn; mnj=pn; else else mnj=0; mnj=0;n最优值计算最优值计算逆推计算逆推计算m(m(i,ji,j) ) for(for(i i=n-1;i=1;i-) =n-1;i=1;i-) /逆推计算逆推计算m(m(i,ji,j),),i i=n-1.1=n-1.1 for(j=0;j= for(j=0;j=w if(j=wi i&mi+1jmi+1j-w&mi+1j m(i+1,cw), ) m(i+1,cw), i i=1,

8、2,n-1=1,2,n-1 则则x(x(i i)=1)=1,装载,装载w(w(i i) ); ; 其中:其中:cwcw从从c c开始开始( (cwcw=c)=c),cwcw= =cwcw-x(-x(i i) )* *w(w(i i) )elseelse x(x(i i)=0)=0,不装载,不装载w(w(i i););cw=c;for(sp=0,sw=0,i=1;imi+1cw) /x(i)=1,装载装载w(i) cw-=wi; /cw=cw-x(i)*w(i) sw+=wi; sp+=pi; printf(%2dt%3dt%3dn,i,wi,pi); n构造最优解构造最优解步骤步骤2 2比较所

9、装载的物品效益之和与最优值,决定比较所装载的物品效益之和与最优值,决定w(n)w(n)是否装载,是否装载,方法:方法: if (m1c-if (m1c-效益之和效益之和) ) 等于等于 物品物品n n的效益的效益pnpn 装入装入w(n)w(n)if(m1c-sp=pn)/判断判断w(n)是否装载是否装载 sw+=wi; sp+=pi; printf(%2dt%3dt%3dn,n,wn,pn);knapsack(0-1)n子子序列序列一个给定序列的子序列是在该序列中删去若干元素后所得到一个给定序列的子序列是在该序列中删去若干元素后所得到的序列。即:给定的序列。即:给定X=xX=x1 1,x,x

10、2 2,x xm m 和和Z=zZ=z1 1,z,z2 2,z zk k ,X X的的子序列是指存在一个严格递增下标序列子序列是指存在一个严格递增下标序列ii1 1,i,i2 2,i ik k ,使得,使得对于所有的对于所有的j=1,2,kj=1,2,k,有,有z zj j= =x xijij。例如:。例如:Z=Z=b,d,c,ab,d,c,a 是是X=X=a,b,c,d,c,b,aa,b,c,d,c,b,a 的一个子序列的一个子序列n公共子序列公共子序列若序列若序列Z Z是序列是序列X X的子序列,又是序列的子序列,又是序列Y Y的子序列,则称的子序列,则称Z Z是序是序列列X X和序列和序

11、列Y Y的公共子序列。例如:的公共子序列。例如:序列序列 bcbabcba 是是 abcbdababcbdab 与与 bdcababdcaba 的公共子序列的公共子序列给定两个序列给定两个序列X=xX=x1 1,x,x2 2,x xm m 和和Y=yY=y1 1,y,y2 2,y yn n ,找出序列,找出序列X X和和Y Y的最长公共子序列。的最长公共子序列。根据边界条件计算根据边界条件计算c(c(i,ni,n) )和和c(c(m,jm,j) )m=m=strlenstrlen(x); (x); n=n=strlenstrlen(y);(y);for(for(i i=0;i=0;i=m;im

12、;i+)+) c ci in=0; n=0; for(j=0;j=for(j=0;j=0;i-)=m-1;i=0;i-) for(j=n-1;j=0;j-) for(j=n-1;j=0;j-) if(x if(xi i=yj)=yj) c ci ij=ci+1j+1+1;j=ci+1j+1+1; else else if(c if(ci ij+1ci+1j)j+1ci+1j) c ci ij=cj=ci ij+1;j+1; else else c ci ij=ci+1j;j=ci+1j; 经过上述推导,最优值在经过上述推导,最优值在c00c00中。中。最优值推导示例最优值推导示例为了能够构造最

13、优解,在逆推计算最优值的过程中,利用为了能够构造最优解,在逆推计算最优值的过程中,利用s(s(i,ji,j) )记录记录x(x(i i) )与与y(j)y(j)比较的结果:比较的结果:l当当x(x(i i)=y(j)=y(j)时,时, s( s(i,ji,j)=1)=1l当当x(x(i i) )! !=y(j)=y(j)时,时,s(s(i,ji,j)=0)=0X X序列的每一项与序列的每一项与Y Y序列的每一项逐一比较,根据序列的每一项逐一比较,根据s(s(i,ji,j) )与与c(c(i,ji,j) )的取值构造最长公共子序列。对的取值构造最长公共子序列。对x(x(i i) )与与y(j)y

14、(j)比较,其比较,其中中i i=0,1,m-1; j=t,n-1(t=0,1,m-1; j=t,n-1(t从从0 0开始),当确定最长公开始),当确定最长公共子序列中的一项时,通过共子序列中的一项时,通过t=t+1t=t+1操作避免重复取项。操作避免重复取项。l若若s(s(i,ji,j)=1)=1且且c(c(i,ji,j)=c(0,0)=c(0,0)时,取时,取x(x(i i) )为最长公共序列为最长公共序列中的第中的第1 1项。项。l若若s(s(i,ji,j)=1)=1且且c(c(i,ji,j)=c(0,0)-w)=c(0,0)-w时,取时,取x(x(i i) )为最长公共序为最长公共序列

15、中的第列中的第w w项(其中,项(其中,w w从从0 0开始,每确定最长公共子序列开始,每确定最长公共子序列中的一项,中的一项,w w增一)。增一)。for(t=0,w=0,i=0;i=m-1;i+)for(t=0,w=0,i=0;i=m-1;i+) for(j= for(j=t;jt;j=n-1;j+)=n-1;j+) if(s if(si ij=1 & cj=1 & ci ij=c00-w)j=c00-w) printfprintf(%(%c,xc,x i i););w+;w+;t=j+1;t=j+1;break;break; CommonSubsequenceCommonSubsequence

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁