五⼤常⽤算法——动态规划算法详解及经典例题
⼀、基本概念
动态规划是运筹学中⽤于求解决策过程中的最优化数学⽅法。当然,我们在这⾥关注的是作为⼀种算法设计技术,作为⼀种使⽤多阶段决策过程最优的通⽤
⽅法。
动态规划过程是:每次决策依赖于当前状态,⼜随即引起状态的转移。⼀个决策序列就是在变化的状态中产⽣出来的,所以,这种多阶段最优化决策解决问
题的过程就称为动态规划。
假设问题是由交叠的⼦问题所构成,我们就能够⽤动态规划技术来解决它。⼀般来说,这种⼦问题出⾃对给定问题求解的递推关系中,这个递推关系包括了
同样问题的更⼩⼦问题的解。动态规划法建议,与其对交叠⼦问题⼀次重新的求解,不如把每⼀个较⼩⼦问题仅仅求解⼀次并把结果记录在表中(动态规划也是
空间换时间的)。这样就能够从表中得到原始问题的解。
动态规划经常常使⽤于解决最优化问题,这些问题多表现为多阶段决策。
关于多阶段决策:在实际中,⼈们经常遇到这样⼀类决策问题,即因为过程的特殊性,能够将决策的全过程根据时间或空间划分若⼲个联系的阶段。⽽在各
阶段中。⼈们都须要作出⽅案的选择。我们称之为决策。⽽且当⼀个阶段的决策之后,经常影响到下⼀个阶段的决策,从⽽影响整个过程的活动。这样,各个阶
段所确定的决策就构成⼀个决策序列,常称之为策略。因为各个阶段可供选择的决策往往不⽌⼀个。因⽽就可能有很多决策以供选择,这些可供选择的策略构成
⼀个集合,我们称之为同意策略集合(简称策略集合)。每⼀个策略都对应地确定⼀种活动的效果。我们假定这个效果能够⽤数量来衡量。
因为不同的策略经常导致不同的效果,因此,怎样在同意策略集合中选择⼀个策略,使其在预定的标准下达到最好的效果。经常是⼈们所关⼼的问题。我们
称这种策略为最优策略,这类问题就称为多阶段决策问题。
某种机器能够在⾼低两种不同的负荷下进⾏⽣产。在⾼负荷下⽣产时。产品的年产量g和投⼊⽣产的机器数量x的关系为g=g(x),这时的年完善率为a,即假设
年初完善机器数为x,到年终时完善的机器数为a*x(0<a<1);在低负荷下⽣产时,产品的年产量h和投⼊⽣产的机器数量y的关系为h=h(y)。对应的完善率为
b(0<b<0)。且a<b。
要制定⼀个五年计划,确定每年投⼊⾼、低两种负荷⽣产的完善机器数量,使5年内产品的总产量达到最⼤。
显然能够将全过程划分为5个阶段(⼀年⼀个阶段),每⼀个阶段開始时要确定投⼊⾼、低两种负荷下⽣产的完善机器数,并且上⼀个阶段的决策必定影响到
下⼀个阶段的⽣产状态。决策的⽬标是使产品的总产量达到最⼤。这个问题常常使⽤数学⽅法建模,结合线性规划等知识来进⾏解决。
基本思想与分治法类似,也是将待求解的问题分解为若⼲个⼦问题(阶段),按顺序求解⼦阶段,前⼀⼦问题的解,为后⼀⼦问题的求解提供了实⽤的信
息。
在求解任⼀⼦问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其它局部解。依次解决各⼦问题,最后⼀个⼦问题就是初
始问题的解。
因为动态规划解决的问题多数有重叠⼦问题这个特点。为降低反复计算。对每个⼦问题仅仅解⼀次,将其不同阶段的不同状态保存在⼀个⼆维数组中。
与分治法最⼤的区别是:适合于⽤动态规划法求解的问题,经分解后得到的⼦问题往往不是互相独⽴的(即下⼀个⼦阶段的求解是建⽴在上⼀个⼦阶段的解
的基础上,进⾏进⼀步的求解)。
(1)最优化原理:假设问题的最优解所包括的⼦问题的解也是最优的,就称该问题具有最优⼦结构,即满⾜最优化原理。
(2)⽆后效性:即某阶段状态⼀旦确定。就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响曾经的状态。仅仅与当前状态有关;
(3)有重叠⼦问题:即⼦问题之间是不独⽴的,⼀个⼦问题在下⼀阶段决策中可能被多次使⽤到(该性质并⾮动态规划适⽤的必要条件,可是假设没有这条性
质。动态规划算法同其它算法相⽐就不具备优势)。