版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第六章动态规划
6.1动态规划的思想方法
6.2多段图的最短路径问题
6.3资源分配问题
6.4设备更新问题
6.5最长公共子序列问题
6.60/1背包问题
6.7RNA最大碱基对匹配问题26.1动态规划的思想方法
一动态规划的最优决策原理
二动态规划实例、货郎担问题
3一动态规划的最优决策原理
1.活动过程的分阶段决策
2.最优性原理
3.最优决策的形成
41.活动过程的分阶段决策把活动过程划分为若干个阶段,每一阶段的决策,依赖于前一阶段的状态,由决策所采取的动作,使状态发生转移,成为下一阶段的决策依据
52.最优性原理无论过程的初始状态和初始决策是什么,其余决策都必须相对于初始决策所产生的状态,构成一个最优决策序列
63.最优决策的形成令最优状态为s(2,22),由此倒推s(2,22)p(2,22)s(1,2)p(1,2)s0
最优决策序列:p(2,22)p(1,2)状态转移序列:s0s(1,2)s(2,2)7最优决策的形成(续)1)最优决策在最后阶段形成,然后向前倒推,直到初始阶段2)决策的具体结果及所产生的状态转移,由初始阶段开始进行计算,然后向后递归或迭代,直到最终结果3)赖以决策的策略或目标,称为动态规划函数4)动态规划函数可以递归地定义,也可以用递推公式表达5)整个决策过程,可以递归地进行,或用循环迭代的方法进行8二动态规划实例、货郎担问题
1.动态规划解货郎担问题的过程
2.复杂性分析
91.动态规划解货郎担问题的过程1)货郎担问题实例:
4城市的费用矩阵2)动态规划函数:
d(i,V’):从顶点i出发,经V’中各顶点一次,最终回到初始出发点的最短路径的长度
设初始出发点为i
103)工作过程由城市1出发,经城市2,3,4然后返回1的最短路径长度为:①②③
112.复杂性分析1)令是从顶点i出发,返回顶点i所需计算的形式为
d(k,V’–{k})的个数2)开始计算d(i,V’–{i})时,集合V’–i中有n–1个顶点3)在计算d(k,V’–{k})时,集合V’–{k}的顶点数目,在不同的决策阶段,分别为n-2,┅,04)在整个计算中,需要计算大小为j的不同顶点集合的个数为,j=0,┅,n-1。总个数为:5)当集合V’–{k}中的城市个数为j时,为计算
d(k,V’–{k}),需j次加法,j-1次比较
12复杂性分析(续)6)从顶点i出发,经其它城市再回到i,总的运算时间为:由二项式定理:令x=y=1,得:7)动态规划方法求解货郎担问题,总花费T为:
136.2多段图的最短路径问题
一多段图的决策过程
二多段图动态规划算法的实现
14一多段图的决策过程1.多段图的最短路径问题
2.多段图最短路径的决策过程
3.例子
4.多段图最短路径问题实现步骤151.多段图的最短路径问题1)多段图的定义:有向连通赋权图G=<V,E,W>,顶点集合V划分成
k个不相交的子集,1ik,k≥2,使得E中的任一边(u,v),必有u
,v,m≥1,称G为多段图。令,称为源点,为收点2)多段图的最短路径问题:求从源点到达收点的最小花费的通路162.多段图最短路径的决策过程1)顶点编号:①根据多段图的k个不相交的子集,把多段图划分为k段,每一段包含顶点的一个子集②顶点集合V中的所有顶点,按照段的顺序编号⑴子集中的顶点互不邻接,它们之间的相互顺序无关紧要⑵顶点个数为n,源点s的编号为0,收点t的编号为n–1⑶对E中的任何一条边(u,v),顶点u的编号小于顶点v的编号
172)决策过程①第一阶段,确定第k–1段的所有顶点到达收点t的花费最小的通路,及通路上该顶点的前方顶点编号②第二阶段,用第一阶段的信息,确定第k–2段的所有顶点到达收点t的花费最小的通路,及通路上该顶点的前方顶点编号③如此依次进行,直到最后确定源点s到达收点t的花费最小的通路,及通路上该顶点的前方顶点编号④最后,从源点的信息的前方顶点编号,递推地确定整条路径上的所有顶点编号183)动态规划函数⑴工作单元描述:
cost[i]:顶点i到达收点t的最小花费
path[i]:顶点i到达收点t的前方顶点编号
route[n]:源点i到达收点t的最短通路上的顶点编号⑵动态规划函数:
(1)(2)193.例子:求解图所示的最短路径问题
i=8:
path[8]=9i=7:
path[7]=9i=6:
path[6]=820例子(续1)i=5:
path[5]=8i=4:
path[4]=8i=3:
path[3]=521例子(续2)i=2:
path[2]=3i=1:
path[1]=5i=0:
path[0]=222例子(续3)path[0]=2path[1]=5path[2]=3path[3]=5path[4]=8path[5]=8path[6]=8path[7]=9
path[8]=9route[0]=0cost[0]=15route[1]=path[route[0]]=path[0]=2route[2]=path[route[1]]=path[0]=3route[3]=path[route[2]]=path[3]=5route[4]=path[route[3]]=path[5]=8route[5]=path[route[4]]=path[8]=9234.多段图最短路径问题实现步骤①
对所有的i,0i<n,置cost[i]=
,path[i]=-1cost[n–1]=0②令i=n-2③据(1),(2)式计算cost[i],path[i]④i=i-1,若i>0,转③;否则,转⑤⑤令i=0,route[0]=0⑥如果riute[i]=n–1,算法结束;否则,转⑦⑦i=i+1,route[i]=path[route[i–1]];转⑥24二多段图动态规划算法的实现
1.数据结构
2.算法描述251.数据结构structNODE{ //邻接表结点的数据结构
int v_num; //邻接顶点的编号
Typelen; //邻接顶点与该顶点的费用structNODE*next; //下一个邻接顶点};structNODEnode[n]; //多段图邻接表头结点Type cost[n]; int route[n]; int path[n]; 262.算法描述(步骤①)4.Typefgraph(structNODEnode[],introute[],intn)5.{inti;7.structNODE*pnode;8.int*path=newint[n];9.Typemin_cost,*cost=newType[n];10.for(i=0;i<n;i++){O(n)11.cost[i]=MAX_TYPE;path[i]=-1;rouet[i]=0;12.}13.cost[n-1]=ZERO_TYPE;
27算法描述(步骤
②③④)14.for(i=n-2;i>=0;i--){O(n+m)15.pnode=node[i]->next;16.while(pnode!=NULL){17.if(pnode->len+cost[pnode->v_num]<cost[i]){18.cost[i]=pnode->len+cost[pnode->v_num];19.path[i]=pnode->v_num;20.}21.pnode=pnode->next;22.}23.}nextlenv_numnextlenv_numnext28算法描述(步骤
⑤⑥⑦)24.i=0;O(k)25.while((route[i]!=n-1)&&(path[i]!=-1)){26.i++;27.route[i]=path[route[i-1]];28.}29.min_cost=cost[0];30.deletepath;deleyecost;31.returnmin_cost;32.}296.3资源分配问题
一资源分配问题的决策过程
二资源分配算法的实现
30一资源分配问题的决策过程
1.资源分配问题
2.目标函数和约束方程
3.决策过程
4.实现步骤
5.例子
311.资源分配问题资源总数为r,工程个数为n。给每项工程投入的资源不同,所获得的利润也不同。要求把总数为r的资源分配给n个工程,以获得最大利润的分配方案
322.目标函数和约束方程把资源r划分为m个相等的部分,m为整数利润函数:
x份资源分配给第i个工程所得到的利润分配m份资源给所有工程,所得到的利润总额为:
使最大的分配方案:
333.决策过程1)定义两组变量:把x份资源分配给前面i个工程所得到的最大利润:使最大时,分配给第i个工程的资源份额2)阶段划分
n个工程划分为n个阶段第一阶段把x(x=1,,m)份资源分配给第一个工程第i阶段把x(x=1,,m)份资源分配给前面i个工程
i=2,,n343)分配份额为x(x=1,,m)
时,第i阶段的最大利润
及第i工程的最优分配份额(i=1,,n)第一阶段,只把x份资源分配给第一个工程
f1(x)=G1(x)0xmd1(x)=x在第二阶段,把x份资源分配给前面两个工程
f2(x)=max{G2(z)+f1(x–z)}0xm,0zx
d2(x)=使f2(x)达最大的z在第i阶段,把x份资源分配给前面i个工程
fi(x)=max{Gi(z)+fi-1(x–z)}0xm,0zx
d2(x)=使fi(x)达最大的z354)分配份额为m时,第i阶段的最大利润gi
及前面i个工程
的最优分配份额qi(i=1,,n)5)全局最大利润optg及所分配工程项目的最大数目k
6)全局最大利润下k个工程的最优份额optx7)全局最大利润下分配给第i个工程的最优份额
368)分配给其余个工程的剩余的最优份额
9)回溯,得到分配给前面各个工程的最优份额的递推关系式
i=k–1,
,1374.实现步骤1)对各个阶段,各个不同份额的资源,计算及2)计算各个阶段的最大利润,及获得此最大利润的分配份额3)计算全局的最大利润optg,总的最优分配份额optq
及最大的工程项目说数目k4)递推计算各个工程的最优分配份额385.例子8个份额的资源,分配给3个工程,其利润函数如下第一阶段,直接给出
X012345678G10426404550515253G20515406070737475G306154080909598100X012345678F10426404550515253D101234567839例子第二阶段
X012345678G20515406070737475G306154080909598100X012345678f10426404550515253d1012345678X=10,11,0f2d2f24551X=20,21,12,0f226915260X=30,31,22,13,0f240312040400X=40,41,32,23,14,0f2454541446060440例子第二阶段
X012345678G20515406070737475G306154080909598100X012345678f10426404550515253d1012345678X=50,51,42,33,24,15,0f2d2f2505055666470705X=60,61,52,43,34,25,16,0f251556080867473864X=70,71,62,53,44,35,26,17,0f2525665851009677741004X=80,81,72,63,54,45,36,27,18,0f253576690105110997875110541例子第optg=max(53,110,140)=140q3=8k=3optx=8X012345678gf1042640455051525353d1012345678f2052640607086100110110d2010045445f30526408090106120140140d301004544442二资源分配算法的实现1.数据结构
2.算法描述
431.数据结构int m; //可分配的资源份额int n; //工程项目个数Type G[n][m+1]; //工程的利润表Type optg; //最优的总利润int optq[n]; //工程最优分配份额Type f[n][m+1]; //各阶段不同资源份额的最大利润int d[n][m+1]; //f[i][x]最大时,第i项工程的分配份额Type g[n]; //阶段的最大利润int q[n]; //第i阶段第i工程最优分配份额int optx; //最优分配时的资源最优分配份额int k; //最优分配时的工程项目数442.算法描述(步骤①)2.Typeallot_res(intn,intm,TypeG[][],intoptq[])3.{4.intoptx,k,i,j,x;5.int*q=newint[n]; //分配工作单元
6.int(*d)[m+1]=newint[n][m+1];7.Type(*f)[m+1]=newType[n][m+1];8.Type*g=newType[n];9.for(j=0;j<=m;j++){ //第一个工程的份额利润表10.f[0][j]=G[0][j];d[0][j]=j;11.}45算法描述(步骤①)12.for(i=1;i<n;i++){ 13.f[i][0]=G[i][0]+f[i-1][0];d[i][0]=0;15.for(j=1;j<=m;j++){16.f[i][j]=f[i][0];d[i][j]=0;17.for(x=0;x<=j;x++){18.if(f[i][j]<G[i][x]+f[i-1][j-x]){19.f[i][j]=G[i][x]+f[i-1][j-x];20.d[i][j]=x;21.}22.}23.}24.}46算法描述(步骤②③)25.for(i=0;i<n;i++){ 24.g[i]=f[i][0];q[i]=0;25.for(j=1;j<=m;j++)26.if(g[i]<f[i][j])27.{g[i]=f[i][j];q[i]=j;}30.}31.optg=g[0];optx=q[0];k=0;32.for(i=1;i<n;i++){ 33.if(optg<g[i]) 34.{optg=g[i];optx=q[i];k=i;}36.}47算法描述(步骤④)37.if(k<n-1){ //最大编号之后的38.for(i=k+1;i<n;i++) //工程不分配份额39.optq[i]=0;40.for(i=k;i>=0;i--){ //最大编号之前的41.optq[i]=d[i][optx]; //工程分配份额42.optx=optx–optq[i];43.}44.deleteq;deleted;45.deletef;deleteg;46.returnoptg; 47.}
486.4设备更新问题
一设备更新问题的决策过程二设备更新算法的实现
49一设备更新问题的决策过程1.设备更新问题:
设备的性能随使用年限的增加而变坏,导致收入减少
维修费增加,利润下降。而设备的更新,需付出一笔
经费,但可增加利润收入。设备的更新问题是确定设
备的最优更新策略,使得在一个确定期限里,为公司
创造最大的利润。50一设备更新问题的决策过程2.设备更新的有关数据:I=0一列,表明现有设备的有关数据;I=1一列,表示第一年购买的设备的有关数据;其余类推。使用年限中的第0列,表示当年的有关数据,第1列表示使用一年后的有关数据,其余类推;利润、维修费用、更新费用等行分别表示:在第
i年购买的设备使用了
j年后,可以创造的利润、必须付出的维修费用以及进行更新时需要付出的费用。
购买时间I=0I=1I=2I=3I=45使用年限23456012340123012010利润131211109161514131217161514181716191820维修费用23445112231122112111更新费用252627282920222425262022242520222421222151一设备更新问题的决策过程52一设备更新问题的决策过程53一设备更新问题的决策过程4.利润函数:
1)使用了t年的设备,第i年决定更新,利润函数如下
(6.4.1)2)第年决定保留继续使用,则有利润函数如下
(6.4.2)
54一设备更新问题的决策过程5.规划函数:
1)(6.4.1)2)
(6.4.2)
55一设备更新问题的决策过程
56一设备更新问题的决策过程
57一设备更新问题的决策过程
58二设备更新算法的实现1.数据结构:
int n; /*决策年限*/int D; /*设备当前的使用年限*/Typer[n][n+D]; /*使用t年后的设备,在第i年所创造的利润*/Typem[n][n+D];/*使用t年后的设备,在第i年的维修费用*/Typeu[n][n+D]; /*使用t年后的设备,在第i年的更新费用*/Typef[n][n]; /*使用t年后的设备,在第i年及其以后所创造的利润*/BOOLx[n][n]; /*使用t年后的设备,在第i年的更新决策*/BOOLp[n]; /*每年的最优决策*/59二设备更新算法的实现2.算法描述:
2.Typeupdate_dev(intn,intD,Typer[][],Typem[][],Typeu[][],BOOLp[])3.{4.inti,j,k; /*分配工作空间*/5.Typeoptg,rem;6.Type(*f)[n+1]=newType[n+2][n+1];7.BOOL(*x)[n+1]=newBOOL[n+1][n+1];8.for(i=1;i<=n;i++) /*第n+1年的利润初始化为0*/9.f[n+1][i]=0;60二设备更新算法的实现10.for(i=n;i>0;i--){ /*第1年~第n年各种设备使用年限的利润*/11.for(j=1;j<=i;j++){12.if(i>j) /*买,可得到的利润*/13.f[i][j]=r[i][0]–m[i][0]–u[i-j][j]+f[i+1][1];14.else 15.f[i][j]=r[i][0]–m[i][0]–u[0][j-1+D]+f[i+1][1];16.x[i][j]=TRUE; 17.if(i>j) /*留,可得到的利润*/18.rem=r[i-j][j]–m[i-j][j]+f[i+1][j+1];19.else20.rem=r[0][j-1+D]–m[0][j-1+D]+f[i+1][j+1];21.if(f[i][j]<rem){ /*决策,取二者中只最大者*/22.f[i][j]=rem;x[i][j]=FALSE;23.}24.}25.}61二设备更新算法的实现26.j=1; /*全局的更新决策*/27.for(i=1;i<=n;i++){28.p[i]=x[i][j]; /*从第一年的决策开始*/29.if(p[i]) /*当年的决策:更新*/30.j=1 /*下一年决策时,设备年限为1年*/31.else 32.j=j+1; /*否则,下一年决策时,设备年限增1*/33.}34.optg=f[1][1];35.deletef;deletex; /*释放工作空间*/36.returnoptg; /*返回最优更新时可得到的利润*/37.}626.5最长公共子序列问题
一最长公共子序列的搜索过程
二最长公共子序列算法的实现
63一最长公共子序列的搜索过程1.最长公共子序列问题
2.最长公共子序列的性质
3.最长公共子序列的搜索过程641.最长公共子序列问题1)字符子序列:
上的字符序列,及,若对所有的k,k=1,2,,j,有,其中,1ikn,是
A的下标递增序列,称S是A的子序列。例:
={x,y,z}
,A=xyzyxzxzxxx是长度为3的子序列
xzyzx是长度为5的子序列例:A=xyzyxzxz,B=xzyxxyzxxxx 是长度为3的公共子序列
xzyz 是长度为4的公共子序列
xzyxxz 是长度为6的最长公共子序列
652)最长公共子序列问题给定序列和,寻找A和B的一个公共子序列,使得它是A和B的最长公共子序列
662.最长公共子序列的性质令,记为序列A中最前面连续k个字符的子序列记为序列B中最前面连续k个字符的子序列1)若,是A和B的长度为k的最长公共子序列。则序列是A和B的长度为
k–1的最长公共子序列2)若,,则是和B的长度为k的最长公共子序列3)若,,则是A和的长度为k的最长公共子序列
673.最长公共子序列的搜索过程1)最长公共子序列长度的递推关系式:记为和
的最长公共子序列长度,则aiai-1bjbj-1682)阶段的划分和最长公共子序列长度的获取第一阶段:计算和的最长公共子序列的长度第二阶段:计算和的最长公共子序列的长度第n阶段:计算和的最长公共子序列的长度第n阶段的便是序列和的最长公共子序列的长度
693)最长公共子序列的获取①设置二维状态字数组
:70②
最长公共子序列的搜索设,是和的长度为k的最长公共子序列。搜索过程如下:
:下一个搜索方向是
:下一个搜索方向是
:下一个搜索方向是递推关系:若则:,i=i–1,j=j–1,k=k–1
若则:i=i–1
若则:j=j–1714.例
1xzyzxyzxyzxy012345678910111200000000000000X10111313131113131113131113Y20121221232321232321232321X30111222223133333133333133Z40122122313232414343414343Y50122231323241424251535351X60112232324142425152526163Y70122231324251535261636271Z80122132414252616362717372Z90122132414252616262717272y100122231424251626271727281724.例
1xzyzxyzxyzxy012345678910111200000000000000X10111313131113131113131113Y20121221232321232321232321X30111222223133333133333133Z40122122313232414343414343
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年北京市朝阳区高三期末高考数学试卷试题(含答案详解)
- 2026届新疆维吾尔自治区克拉玛依市第十三中学生物高三上期末达标检测模拟试题含解析
- 智能控制 课件 第六章-学习控制
- 内河海事执法培训
- 欢送仪式活动策划方案(3篇)
- 管监责任实施管理制度(3篇)
- 网络销售配送管理制度内容(3篇)
- 苗圃技术管理制度内容(3篇)
- 兽药生产技术课程
- 项目门卫值班管理制度内容(3篇)
- 质检员班组级安全培训课件
- 蓖麻醇酸锌复合除味剂的制备及其除臭效能研究
- 海岸带调查技术规程 国家海洋局908专项办公室编
- 危重病人的院前急救课件
- 矿井突水机理研究-洞察及研究
- 2025年九江职业大学单招《职业适应性测试》模拟试题(基础题)附答案详解
- 防御性驾驶安全培训内容
- 钻探原始班报表试行版
- 青年积分培养管理办法
- 市级应急广播管理制度
- 智慧检验与大数据分析知到智慧树期末考试答案题库2025年温州医科大学
评论
0/150
提交评论