切换到宽版
  • 13225阅读
  • 15回复

动态规划算法在信息学竞赛中的应用 [复制链接]

上一主题 下一主题
离线181818181818
 
只看楼主 倒序阅读 0 发表于: 2007-07-02
动态规划算法在信息学竞赛中的应用
一、动态规划的概念
近年来,涉及动态规划的各种竞赛题越来越多,每一年的NOI几乎都至少有一道题目需要用动态规划的方法来解决;而竞赛对选手运用动态规划知识的要求也越来越高,已经不再停留于简单的递推和建模上了。
要了解动态规划的概念,首先要知道什么是多阶段决策问题。

1. 多阶段决策问题
如果一类活动过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策(采取措施),一个阶段的决策确定以后,常常影响到下一个阶段的决策,从而就完全确定了一个过程的活动路线,则称它为多阶段决策问题。
各个阶段的决策构成一个决策序列,称为一个策略。每一个阶段都有若干个决策可供选择,因而就有许多策略供我们选取,对应于一个策略可以确定活动的效果,这个效果可以用数量来确定。策略不同,效果也不同,多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果。
让我们先来看下面的例子:如图所示的是一个带权有向的多段图,要求从A到D的最短路径的长度(下面简称最短距离)。
我们可以搜索,枚举图中的每条路径,但当图的规模大起来时,搜索的效率显然不可能尽人意。让我们来试用动态规划的思路分析这道题:从图中可以看到,A点要到达D点必然要经过B1和B2中的一个,所以A到D的最短距离必然等于B1到D的最短距离加上5,或是B2到D的最短距离加上2。同样的,B1到D的最短距离必然等于C1到D的最短距离加上3或是C2到D的最短距离加上2,……。
我们设G为点i到点D的距离,显然G[C1]=4,G[C2]=3,G[C3]=5,根据上面的分析,有:
G[B1]=min{G[C1]+3,G[C2]+2}=5,
G[B2]=min{G[C2]+7,G[C3]+4}=9,
再就有G[A]=min{G[B1]+5,G[B2]+2}=10,
所以A到D的最短距离是10,最短路径是AB1C2D。
由例子我们可以看出动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。
由此可知,动态规划法与分治法和贪心法类似,它们都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。其中贪心法的当前选择可能要依赖已经作出的所有选择,但不依赖于有待于做出的选择和子问题。因此贪心法自顶向下,一步一步地作出贪心选择;而分治法中的各个子问题是独立的 (即不包含公共的子子问题),因此一旦递归地求出各子问题的解后,便可自下而上地将子问题的解合并成问题的解。但不足的是,如果当前选择可能要依赖子问题的解时,则难以通过局部的贪心策略达到全局最优解;如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题。
解决上述问题的办法是利用动态规划。该方法主要应用于最优化问题,这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解。若存在若干个取最优值的解的话,它只取其中的一个。在求解过程中,该方法也是通过求解局部子问题的解达到全局最优解,但与分治法和贪心法不同的是,动态规划允许这些子问题不独立,(亦即各子问题可包含公共的子子问题)也允许其通过自身子问题的解作出选择,该方法对每一个子问题只解一次,并将结果保存起来,避免每次碰到时都要重复计算。

2.动态规划问题中的术语
阶段:把所给求解问题的过程恰当地分成若干个相互联系的阶段,以便于求解,过程不同,阶段数就可能不同.描述阶段的变量称为阶段变量。在多数情况下,阶段变量是离散的,用k表示。此外,也有阶段变量是连续的情形。如果过程可以在任何时刻作出决策,且在任意两个不同的时刻之间允许有无穷多个决策时,阶段变量就是连续的。
在前面的例子中,第一个阶段就是点A,而第二个阶段就是点A到点B,第三个阶段是点B到点C,而第四个阶段是点C到点D。
状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前一阶段某支路的终点。
在前面的例子中,第一个阶段有一个状态即A,而第二个阶段有两个状态B1和B2,第三个阶段是三个状态C1,C2和C3,而第四个阶段又是一个状态D。
过程的状态通常可以用一个或一组数来描述,称为状态变量。一般,状态是离散的,但有时为了方便也将状态取成连续的。当然,在现实生活中,由于变量形式的限制,所有的状态都是离散的,但从分析的观点,有时将状态作为连续的处理将会有很大的好处。此外,状态可以有多个分量(多维情形),因而用向量来代表;而且在每个阶段的状态维数可以不同。
当过程按所有可能不同的方式发展时,过程各段的状态变量将在某一确定的范围内取值。状态变量取值的集合称为状态集合。
无后效性:我们要求状态具有下面的性质:如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也就确定了。换句话说,过程的每一次实现可以用一个状态序列表示,在前面的例子中每阶段的状态是该线路的始点,确定了这些点的序列,整个线路也就完全确定。从某一阶段以后的线路开始,当这段的始点给定时,不受以前线路(所通过的点)的影响。状态的这个性质意味着过程的历史只能通过当前的状态去影响它的未来的发展,这个性质称为无后效性。
决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择(行动)称为决策。在最优控制中,也称为控制。在许多间题中,决策可以自然而然地表示为一个数或一组数。不同的决策对应着不同的数值。描述决策的变量称决策变量,因状态满足无后效性,故在每个阶段选择决策时只需考虑当前的状态而无须考虑过程的历史。
决策变量的范围称为允许决策集合。
策略:由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称为允许策略集合。允许策略集合中达到最优效果的策略称为最优策略。
给定k阶段状态变量x(k)的值后,如果这一阶段的决策变量一经确定,第k+1阶段的状态变量x(k+1)也就完全确定,即x(k+1)的值随x(k)和第k阶段的决策u(k)的值变化而变化,那么可以把这一关系看成(x(k),u(k))与x(k+1)确定的对应关系,用x(k+1)=Tk(x(k),u(k))表示。这是从k阶段到k+1阶段的状态转移规律,称为状态转移方程。
最优性原理:作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略”。
最优性原理实际上是要求问题的最优策略的子策略也是最优。让我们通过对前面的例子再分析来具体说明这一点:从A到D,我们知道,最短路径是AB1C2D,这些点的选择构成了这个例子的最优策略,根据最优性原理,这个策略的每个子策略应是最优:AB1C2是A到C2的最短路径,B1C2D也是B1到D的最短路径……──事实正是如此,因此我们认为这个例子满足最优性原理的要求。

3. 通过上面的说明,我们可以总结出一些解决“动态规划”问题的基本方法与步骤:
1:确定问题的研究对象,即确定状态。
2:划分阶段,确定阶段之间的状态转移方程(包括边界条件)。
3:考察此问题现在可否用“动态规划”来解决:
  ①:考察此问题是否具有“最优子结构”。
  ②:考察此问题是否为“无后效性”。
4:如果发现此问题目前不能用“动态规划”来解决,则应该调整相应的定义与划分,以达到可以用“动态规划”来解决。
(应注意的是,不见得题目都能用动态规划来做,也许有的题目只能搜索或其他算法)
动态规划的主要难点在于理论上的设计,一旦设计完成,实现部分就会非常简单。大体上的框架如下:
对f1(s1)初始化(边界条件)
for k2 to n(这里以顺序求解为例)
   对每一个skSk
       fk(sk)一个极值(∞或-∞)
       对每一个uk(sk)Dk(sk)
           sk-1Tk(sk,uk)
           tg(fk-1(sk-1),uk)
           y    t比fk(sk)更优    n
           fk(sk)t    
输出fn(sn)
掌握了动态规划编程实现的模式性,我们在用动态规划解题时就可以把主要的精力放在理论上的设计。一旦设计成熟,问题也就基本上解决了。
但是,我们也不能忽视的一点是“物极必反”,太过拘泥于模式就会限制我们的思维,扼杀优良算法思想的产生。我们在解题时,也不妨发挥一下创造性,去突破动态规划的实现模式,这样有时也会收到意想不到的效果。

以上只是一般情况下的“动态规划”思维过程。一些较为简单的问题可以“按部就班”来操作,但大多数的“动态规划”问题,特别是作为信息学竞赛中的“动态规划”问题,考察的知识是多方面的,应用的技巧是灵活多变的。

初学动态规划很重要的在于要多做练习,多想题目,加强建模的熟练性和准确性,学会选择正确的边界条件。
下面我们将给出例题来分析动态规划模型构建和边界条件的选择。
离线181818181818
只看该作者 1 发表于: 2007-07-02
好!!!
离线clwxzh57
只看该作者 2 发表于: 2007-07-02
copy的
离线181818181818
只看该作者 3 发表于: 2007-07-03
离线clwxzh57
只看该作者 4 发表于: 2007-07-03
离线longxiangyi
只看该作者 5 发表于: 2007-08-12
好!
离线哆啦小子
只看该作者 6 发表于: 2007-08-14
离线linjianman
只看该作者 7 发表于: 2007-08-23
那张解释的图在哪?
离线sm-star
只看该作者 8 发表于: 2007-08-24
DP在noip的用途很大,也很重要。
没准今年就是个DP年
离线amyhab
只看该作者 9 发表于: 2007-10-10
To Be,Or not to be.That's a Question!!!!!!!
快速回复
限100 字节
 
上一个 下一个