第3章动态规划00.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 动态规划 3.1 矩阵连乘问题 3.2 动态规划算法的基本要素 3.3 最长公共子序列 3.4 凸多边形最优三角剖分 3.5 多边形游戏 多阶段决策问题 多阶段决策过程:事件的发展过程分为若干个相互联系的阶段。事件的发展总是初始状态开始,依次经过第一阶段、第二阶段、第三阶段、…,直至最后一个阶段结束。假设事件在初始状态后需要经过n个这样的阶段。一般情况下,从i阶段发展到i+1阶段(0≤i<n)可能有多种不同的途径,而事件必须从中选择一条途径往前进展。在两个阶段间选择发展途径的行为称为一次“决策”。事件的发展过程之中需要做n次“决策”,这些“决策”就构成了事件整个发展过程的一个决策序列——具备这一性质的过程称为多阶段决策过程(multistep decision process) ,求解多阶段决策过程问题就是求取事件发展的决策序列。 讨论这一性质的问题:对任意的i,阶段i以后的行为仅依赖于i阶段的状态,而与i阶段之前,过程如何达到这种状态的方式无关(与此相反的问题如回溯等)。 最优化问题:每一决策都附有一定的“成本”,决策序列的成本是序列中所有决策的成本之和。设从阶段i到阶段i+1有pi种不同的选择,则从阶段1至阶段n共有p1p2……pn种不同的路径(每条路径对应一个决策序列)。问:这些路径里面,哪一条的成本最小?——如何求取最优决策序列? 多阶段决策过程的求解策略 问题的决策序列表示为:(x1,x2,…,xn)其中xi表示第i阶段的决策:x1x2x3 …xnS0→ S1 → S2 →…… → Sn 1)枚举法穷举可能的决策序列,从中选取可以获得最优解的决策序列:若问题的决策序列由n次决策构成,每一阶段分别有p1、p2、…、pn选择,则可能的决策序列将有p1p2…pn个。 2)动态规划20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,把多阶段过程转化为一系列单阶段问题,创立了解决这类过程优化问题的新方法——动态规划。动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。应用领域:动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。 最优性原理(Principle of Optimality)过程的最优决策序列具有如下性质:无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。动态规划算法的基本要素: 最优子结构性质和重叠子问题 最优子结构性质:问题的最优解包含着它的子问题的最优解。即不管前面的策略如何,此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。 重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。对每个子问题只解一次,然后将其解保存起来,以后再遇到同样的问题时就可以直接引用,不必重新求解。 动态规划基本步骤 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 3.1 矩阵连乘问题 问题的提出: 给定n个矩阵{A1, A2, …,An},其中,Ai与Ai+1是可乘的,计算这n个矩阵的连乘积。 问题分析: 由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。 若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积 完全加括号的矩阵连乘积可递归地定义为: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC) public static void matrixMultiply(int [][]a,int [][]b,int [][]c,int ra,int ca,int rb,int cb) { if(ca!=rb) throw new IllegalArgumentException(矩阵不可乘); for(int i=0;ira;i++) for (int j=0;jcb;j++) { int sum =a[i][0]*b[0][j]; for(int k=1;kca;k++) sum+=a[i][k]*b[k][j]; c[i][j]=sum; } } 设有四个矩阵A,B,C,D ,它们的维数分别是: 完全加括号的方式乘运算次数 (1)穷举法: 列举出所有可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘次数最少的计算次序。 复杂度分析:n个矩阵的连乘积,设不同的计算

文档评论(0)

cc880559 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档