- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划思想入门
作者:陈喻(2008年10月7日)
关键字:动态规划,最优子结构,记忆化搜索
引言
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decisionprocess)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。?? 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。动态规划是实质是分治思想和解决冗余例1:求A—B的最短路径
图1
这是一个利用动态规划思想的经典问题,通过直接观察图1我们可以枚举出20多条路径,并可以计算出其中最短的路径长度为16
用动态规划的思想来分析,我们可以把这个问题转换成下面这个模型
图2
阶段:根据问题的特点和需要,将问题按时间或空间特征分解为若干相互联系的阶段。在本例中,我们根据空间特性将问题分成了6个阶段。
状态: 各阶段的开始条件,本例中,A,B,C……P这些节点都属于状态,表示从该点到B的最短路径,在这里我们计做S(i),表示从第i个节点(状态)到B的最短路径
决策:某阶段状态确定后,从该状态到下阶段某状态的选择。比如S(A),它可以选择通过C到达B,也可以选择通过D到达B。
状态转移方程:系统由某阶段的一个状态转变到下一阶段的另一状态称状态转移,体现转移规律的方程称状态转移方程。在本例中,我们不难推出S(A)=MIN{S(C)+4,S(D)+3},S(C)=MIN{S(E)+5,S(F)+3}…………S(B)=0,由此我们可以得出状态转移方程S(i)=MIN{S(j)+Vij}(j为与i相邻接的节点,Vij表示邻接节点i,j之间的距离)。
一个动态规划模型应该满足以下几个性质:
1.最优子结构性质最优可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。若路线和是A到的最优路径,则根据最优化原理,路线必是从到的最优路线。用反证法证明:假设有另一路径是到的最优路径,则A到的路线取和比和更优,矛盾。从而证明必是到的最优路径。
最优是动态规划的基础,任何问题,如果失去了最优的支持,就不可能用动态规划方法计算。根据导出的是解决一切动态规划问题的基本方法。
可以看出,是满足最的。
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多少导弹,并依次输出被拦截的导弹飞来时候的高度.样例:INPUT389 207 155 300 299 170 158 65OUTPUT6 (最多能拦截的导弹数)389 300 299 170 158 65分析: 因为只有一套导弹拦截系统,并且这套系统除了第一发炮弹能到达任意高度外,以后的每一发炮弹都不能高于前一发炮弹的高度;所以,被拦截的导弹应该按飞来的高度组成一个非递增序列.题目要求我们计算这套系统最多能拦截的导弹数,并依次输出被拦截导弹的高度,实际上就是要求我们在导弹依次飞来的高度序列中寻找一个最长非递增子序列.设 X={x 1 ,x 2 ,…,x n } 为依次飞来的导弹序列, Y={y 1 ,y 2 ,…,y k } 为问题的最优解(即 X 的最长非递增子序列), s 为问题的状态(表示导弹拦截系统当前发送炮弹能够到达的最大高度,初值为 s=∞—— 第一发炮弹能够到达任意的高度).如果 y 1 =x 1 ,即飞来的第一枚导弹被成功拦截.那么,根据题意每一发炮弹都不能高于前一发的高度,问题的状态将由 s=
文档评论(0)