《动态规划算法原理及应用.doc》由会员分享,可在线阅读,更多相关《动态规划算法原理及应用.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、动态规划算法 刘兴田浙江工业大学 计算机学院 软件工程1205班 2摘要:动态规划是解决最优化问题的根本方法,本文介绍了动态规划的根本思想与根本步骤,并通过几个实例的分析,研究了利用动态规划设计算法的具体途径。关键词:动态规划 算法Dynamic Programming Liu xingtian(Zhe Jiang University Of Technology, Computer Science and Technology Campus, Software Engineering 1205 26630512)Abstract: Dynamic Programming is the mos
2、t effective way to solve the problem of optimization .This dissertation introduce the thinking of Dynamic Programming and the step to using Dynamic Programming ,it also gives some examples to help analysis Dynamic Programming and the specific method to use Dynamic Programming .Key words : Dynamic Pr
3、ogramming , Alsgorithm1.引言 规划问题的最终目的就是确定各决策变量的取值,以使目标函数到达极大或极小。在线性规划与非线性规划中,决策变量都是以集合的形式被一次性处理的;然而,有时我们也会面对决策变量需分期、分批处理的多阶段决策问题。所谓多阶段决策问题是指这样一类活动过程:它可以分解为假设干个互相联系的阶段,在每一阶段分别对应着一组可供选取的决策集合;即构成过程的每个阶段都需要进展一次决策的决策问题。将各个阶段的决策综合起来构成一个决策序列,称为一个策略。显然,由于各个阶段选取的决策不同,对应整个过程可以有一系列不同的策略。当过程采取某个具体策略时,相应可以得到一个确定的
4、效果,采取不同的策略,就会得到不同的效果。多阶段的决策问题,就是要在所有可能采取的策略中选取一个最优的策略,以便得到最正确的效果。动态规划是一种求解多阶段决策问题的系统技术,可以说它横跨整个规划领域线性规划与非线性规划。在多阶段决策问题中,有些问题对阶段的划分具有明显的时序性,动态规划的“动态二字也由此而得名。动态规划的主要创始人是美国数学家贝尔曼Bellman。20世纪40年代末50年代初,当时在兰德公司Rand Corporation从事研究工作的贝尔曼首先提出了动态规划的概念。1957年贝尔曼发表了数篇研究论文,并出版了他的第一部著作?动态规划?。该著作成为了当时唯一的进一步研究与应用动
5、态规划的理论源泉。在贝尔曼及其助手们致力于开展与推广这一技术的同时,其他一些学者也对动态规划的开展做出了重大的奉献,其中最值得一提的是爱尔思Aris与梅特顿Mitten。爱尔思先后于1961年与1964年出版了两部关于动态规划的著作,并于1964年同尼母霍思尔Nemhauser、威尔德Wild一道创立了处理分枝、循环性多阶段决策系统的一般性理论。梅特顿提出了许多对动态规划后来开展有着重要意义的根底性观点,并且对明晰动态规划路径的数学性质做出了巨大的奉献。动态规划问世以来,在工程技术、经济管理等社会各个领域都有着广泛的应用,并且获得了显著的效果。在经济管理方面,动态规划可以用来解决最优路径问题、
6、资源分配问题、生产调度问题、库存管理问题、排序问题、设备更新问题以及生产过程最优控制问题等,是经济管理中一种重要的决策技术。许多规划问题用动态规划的方法来处理,常比线性规划或非线性规划更有效。特别是对于离散的问题,由于解析数学无法发挥作用,动态规划便成为了一种非常有用的工具。 动态规划可以按照决策过程的演变是否确定分为确定性动态规划与随机性动态规划;也可以按照决策变量的取值是否连续分为连续性动态规划与离散性动态规划。虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划
7、方法方便地求解。2.动态规划的根本思想 一般来说,只要问题可以划分成规模更小的子问题,并且原问题的最优解中包含了子问题的最优解,那么可以考虑用动态规划解决。动态规划的实质是分治思想与解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而防止计算重复的子问题,以解决最优化问题的算法策略。由此可知,动态规划法与分治法与贪心法类似,它们都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。其中贪心法的当前选择可能要依赖已经作出的所有选择,但不依赖于有待于做出的选择与子问题。因此贪心法自顶向下,一步一步地作出贪心选择;而分治法中的各个子问题是独立
8、的 (即不包含公共的子子问题),因此一旦递归地求出各子问题的解后,便可自下而上地将子问题的解合并成问题的解。但缺乏的是,如果当前选择可能要依赖子问题的解时,那么难以通过局部的贪心策略到达全局最优解;如果各子问题是不独立的,那么分治法要做许多不必要的工作,重复地解公共的子问题。解决上述问题的方法是利用动态规划。该方法主要应用于最优化问题,这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解。假设存在假设干个取最优值的解的话,它只取其中的一个。在求解过程中,该方法也是通过求解局部子问题的解到达全局最优解,但与分治法与贪心法不同的是,动态规划允许这些子问题不独立,也
9、允许其通过自身子问题的解作出选择,该方法对每一个子问题只解一次,并将结果保存起来,防止每次碰到时都要重复计算。 因此,动态规划法所针对的问题有一个显著的特征,即它所对应的子问题树中的子问题呈现大量的重复。动态规划法的关键就在于,对于重复出现的子问题,只在第一次遇到时加以求解,并把答案保存起来,让以后再遇到时直接引用,不必重新求解。动态规划的数学描述离不开它的一些根本概念与符号,因此有必要在介绍多阶段决策过程的数学描述的根底上,系统地介绍动态规划的一些根本概念。3.1多阶段决策问题如果一类活动过程可以分为假设干个互相联系的阶段,在每一个阶段都需作出决策,一个阶段的决策确定以后,常常影响到下一个阶
10、段的决策,从而就完全确定了一个过程的活动路线,那么称它为多阶段决策问题。各个阶段的决策构成一个决策序列,称为一个策略。每一个阶段都有假设干个决策可供选择,因而就有许多策略供我们选取,对应于一个策略可以确定活动的效果,这个效果可以用数量来确定。策略不同,效果也不同,多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下到达最好的效果.3.2动态规划问题中的术语阶段:把所给求解问题的过程恰当地分成假设干个相互联系的阶段,以便于求解,过程不同,阶段数就可能不同描述阶段的变量称为阶段变量。在多数情况下,阶段变量是离散的,用k表示。此外,也有阶段变量是连续的情形。如果过程可以
11、在任何时刻作出决策,且在任意两个不同的时刻之间允许有无穷多个决策时,阶段变量就是连续的。状态:状态表示每个阶段开场面临的自然状况或客观条件,它不以人们的主观意志为转移,也称为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前一阶段某支路的终点。过程的状态通常可以用一个或一组数来描述,称为状态变量。一般,状态是离散的,但有时为了方便也将状态取成连续的。当然,在现实生活中,由于变量形式的限制,所有的状态都是离散的,但从分析的观点,有时将状态作为连续的处理将会有很大的好处。此外,状态可以有多个分量(多维情形),因而用向量来代表;而且在每个阶段的状态维数可以不同。无
12、后效性:我们要求状态具有下面的性质:如果给定某一阶段的状态,那么在这一阶段以后过程的开展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也就确定了。换句话说,过程的每一次实现可以用一个状态序列表示,在前面的例子中每阶段的状态是该线路的始点,确定了这些点的序列,整个线路也就完全确定。从某一阶段以后的线路开场,当这段的始点给定时,不受以前线路所通过的点的影响。状态的这个性质意味着过程的历史只能通过当前的状态去影响它的未来的开展,这个性质称为无后效性。决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择行动称为决策。在最优控制中,也称为控制。在许多间题中,决策可以自然而然
13、地表示为一个数或一组数。不同的决策对应着不同的数值。描述决策的变量称决策变量,因状态满足无后效性,故在每个阶段选择决策时只需考虑当前的状态而无须考虑过程的历史。决策变量的范围称为允许决策集合。策略:由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称为允许策略集合。允许策略集合中到达最优效果的策略称为最优策略。给定k阶段状态变量x(k)的值后,如果这一阶段的决策变量一经确定,第k+1阶段的状态变量x(k+1)也就完全确定,即x(k+1)的值随x(k)与第k阶段的决策u(k)的值变化而变化,那么可以把这一关系看成(x(k),u(k)与x(
14、k+1)确定的对应关系,用x(k+1)=Tk(x(k),u(k)表示。这是从k阶段到k+1阶段的状态转移规律,称为状态转移方程。最优性原理: 作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略。4.动态规划求解的根本步骤动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开场,通过对中间阶段决策的选择,到达完毕状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。如下图。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。初始状态决策决策决策完毕状态 动态规划决策过程示意图(1)划分阶段:,按照问题
15、的时间或空间特征,把问题分为假设干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否那么问题就无法求解。 (2)确定状态与状态变量:将问题开展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。 (3)确定决策并写出状态转移方程:因为决策与状态转移有着天然的联系,状态转移就是根据上一阶段的状态与决策来导出本阶段的状态。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做,根据相邻两段各状态之间的关系来确定决策。 (4)寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。 (5)程序设计实现:动态规划
16、的主要难点在于理论上的设计,一旦设计完成,实现局部就会非常简单。根据上述动态规划设计的步骤,可得到大体解题框架如下图。 动态规划设计的一般模式图 上述提供了动态规划方法的一般模式,对于简单的动态规划问题,可以按部就班地进展动态规划的设计。下面,给出一个利用动态规划方法求解的典型例子。 上图示出了一个数字三角形宝塔。数字三角形中的数字为不超过100的整数。现规定从最顶层走到最底层,每一步可沿左斜线向下或右斜线向下走。 任务一:假设三角形行数10,键盘输入一个确定的整数值M,编程确定是否存在一条路径,使得沿着该路径所经过的数字的总与恰为M,假设存在那么给出所有路径,假设不存在,那么输出“NOAns
17、wer!字样。 任务二:假设三角形行数100,编程求解从最顶层走到最底层的一条路径,使得沿着该路径所经过的数字的总与最大,输出最大值。输人数据:由文件输入数据,任务一中文件第一行是三角形的行数N与整数值M。以后的N行分别是从最顶层到最底层的每一层中的数字。任务二中文件数据格式同任务一,只是第一行中没有整数值M。在例子中任务二的文件数据表示如下: 输入:5 7 输出: 输出路径与最大值 3 8 7 或“No Answer!字样。 8 1 0 38 2 7 7 4 810 4 5 2 6 5 2744图3 数字三角形 45265【分析】对于这一问题,很容易想到用枚举的方法去解决,即列举出所有路径并
18、记录每一条路径所经过的数字总与。然后判断数字总与是否等于给定的整数值M或寻找出最大的数字总与,这一想法很直观,而且对于任务一,由于数字三角形的行数不大(10),因此其枚举量不是很大,应该能够实现。但对于任务二,如果用枚举的方法,当三角形的行数等于100时,其枚举量之大是可想而知的,显然,枚举法对于任务二的求解并不适用。其实,只要对对任务二稍加分析,就可以得出一个结论: 如果得到一条由顶至底的某处的一条最正确路径,那么对于该路径上的每一个中间点来说,由顶至该中间点的路径所经过的数字与也为最大。因此该问题是一个典型的多阶段决策最优化的问题。算法设计与分析如下: 对于任务一,合理地确认枚举的方法,可
19、以优化问题的解法。由于从塔顶到底层每次都只有两种走法,即左或右。设“0表示左,“1表示右,对于层数为N的数字塔,从顶到底的一种走法可用一个N-1位的二进制数表示。如例中二进制数字串1011,其对应的路径应该是:8146。这样就可以用一个Nl位的二进制数来模拟走法与确定解的范围。穷举出从0到2n-1个十进制数所对应的N-1位二进制串对应的路径中的数字总与,判定其是否等于M而求得问题的解。 对于任务二,采用动态规划中的顺推解法。按三角形的行划分阶段,假设行数为n,那么可把问题看做一个n-1个阶段的决策问题。从始点出发,依顺向求出第一阶段、第二阶段第n1阶段中各决策点至始点的最正确路径,最终求出始点
20、到终点的最正确路径。 设:fk(Uk)为从第k阶段中的点Uk至三角形顶点有一条最正确路径,该路径所经过的数字的总与最大,fk(Uk)表示为这个数字与;由于每一次决策有两个选择,或沿左斜线向下,或沿右斜线向下,因此设: Uk1为k-1阶段中某点Uk沿左斜线向下的点; Uk2为k-1阶段中某点Uk沿右斜线向下的点; dk(Uk1)为k阶段中Uk1的数字;dk(Uk2)为k阶段中Uk2的数字。因而可写出顺推关系式(状态转移方程)为: fk(Uk)=maxfk-1(Uk)+dk(Uk1),fk-1(Uk)+dk(Uk2)(k=1,2,3,n) f0(U0)0经过一次顺推,便可分别求出由顶至底N个数的N
21、条路径,在这N条路径所经过的N个数字与中,最大值即为正确答案。例1 现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图1所示,试找出从结点A到结点E的最短距离。我们可以用深度优先搜索法来解决此问题,该问题的递归式为其中是与v相邻的节点的集合,w(v,u)表示从v到u的边的长度。这个程序的效率如何呢?我们可以看到,每次除了已经访问过的城市外,其他城市都要访问,所以时间复杂度为O(n!),这是一个“指数级的算法。首先,我们来观察一下这个算法。在求从B1到E的最短距离的时候,先求出从C2到E的最短距离;而在求从B2到E的最短距离的时候,又求了一遍从C2到E的最短距离。
22、也就是说,从C2到E的最短距离我们求了两遍。同样可以发现,在求从C1、C2到E的最短距离的过程中,从D1到E的最短距离也被求了两遍。而在整个程序中,从D1到E的最短距离被求了四遍。如果在求解的过程中,同时将求得的最短距离记录在案,随时调用,就可以防止这种情况。于是,可以改良该算法,将每次求出的从v到E的最短距离记录下来,在算法中递归地求MinDistance(v)时先检查以前是否已经求过了MinDistance(v),如果求过了那么不用重新求一遍,只要查找以前的记录就可以了。这样,由于所有的点有n个,因此不同的状态数目有n个,该算法的数量级为O(n)。更进一步,可以将这种递归改为递推,这样可以
23、减少递归调用的开销。所谓资源分配问题,就是将一定数量的一种或假设干种资源如原材料、机器设备、资金、劳动力等恰当地分配给假设干个使用者,以使资源得到最有效地利用。设有m种资源,总量分别为bii = 1,2,m,用于生产n种产品,假设用xij代表用于生产第j种产品的第i种资源的数量j = 1,2,n,那么生产第j种产品的收益是其所获得的各种资源数量的函数,即gj = fx1j,x2j, xmj。由于总收益是n种产品收益的与,此问题可用如下静态模型加以描述:假设是连续变量,当 = f, 是线性函数时,该模型是线性规划模型;当 = f, 是非线性函数时,该模型是非线性规划模型。假设是离散变量或与 =
24、f, 是离散函数时,此模型用线性规划或非线性规划来求解都将是非常麻烦的。然而在此情况下,由于这类问题的特殊构造,可以将它看成为一个多阶段决策问题,并利用动态规划的递推关系来求解。本例只考虑一维资源的分配问题,设状态变量表示分配于从第k个阶段至过程最终第N个阶段的资源数量,即第k个阶段初资源的拥有量;决策变量xk表示第k个阶段资源的分配量。于是有状态转移律:允许决策集合:最优指标函数动态规划的逆序递推关系式:利用这一递推关系式,最后求得的即为所求问题的最大总收益,下面来看一个具体的例子。例2 某公司拟将500万元的资本投入所属的甲、乙、丙三个工厂进展技术改造,各工厂获得投资后年利润将有相应的增长
25、,增长额如表7-1所示。试确定500万元资本的分配方案,以使公司总的年利润增长额最大。表7-1投资额100万元200万元300万元400万元500万元甲3乙510丙40解:将问题按工厂分为三个阶段k=1,2,3,设状态变量代表从第个工厂到第3个工厂的投资额,决策变量代表第k个工厂的投资额。于是有状态转移率、允许决策集合与递推关系式:当时:于是有表7-2,表中表示第三个阶段的最优决策。表7-2 单位:百万元0 123450123450当时:。于是有表7-3。表7-3 单位:百万元x2S2g2x2+f3s2 - x201234500+00010.5+0121.0+0231.1+0241.1+01,
26、251.1+02当时:于是:x1S1g1x1+f2s1 x101234551.3+00,2然后按计算表格的顺序反推算,可知最优分配方案有两个:1甲工厂投资200万元,乙工厂投资200万元,丙工厂投资100万元;2甲工厂没有投资,乙工厂投资200万元,丙工厂投资300万元。按最优分配方案分配投资资源,年利润将增长210万元。非线性规划问题的求解是非常困难的;然而,对于有些非线性规划问题,如果转化为用动态规划来求解将是十分方便的。例3 用动态规划求解解:阶段:将问题的变量数作为阶段,即k=1,2,3;决策变量:决策变量;状态变量:状态变量代表第阶段的约束右端项,即从到占有的份额;状态转移律:;边界条件:,;允许决策集合:当时:当时:设,又因x,所以:,是的极小值点,是的极大值点于是:当时:同上可得:由,有由,有于是得到最优解,最优值。参考文献1 百度文库:运用动态规划模型解决最短路径问题, 2博客园:谈谈动态规划的思想3 谬慧芬,邵小兵.动态规划算法的原理及应用J.中国科技信息, 2005(21).4 解可新,韩立兴,林友联.最优化方法M.天津:天津大学出版社, 1997.5 赵旋. 变分法、最小值原理、动态规划与最优控制J.自动化博览,1997第 18 页