动态规划-(1)

来源:互联网 发布:modbus数据帧格式 编辑:程序博客网 时间:2024/05/22 15:05
动态规划是对最优化问题的一种新的算法设计方法。由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的没计法对不同的问题,有各具特色的表示方式。不存在一种万能的动态规划算法。但是可以通过对若干有代表性的问题的动态规划算法进行讨论,学会这一设计方法。

多阶段决策过程最优化问题

——动态规划的基本模型

在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线。这种把一个问题看做是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策最优化问题。
    【例题1】最短路径问题。图中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少?

【分析】把从A到E的全过程分成四个阶段,用k表示阶段变量,第1阶段有一个初始状态A,两条可供选择的支路ABl、AB2;第2阶段有两个初始状态B1、 B2,B1有三条可供选择的支路,B2有两条可供选择的支路……。用dk(xk,xk+1)表示在第k阶段由初始状态xk到下阶段的初始状态xk+1的路径距离,Fk(xk)表示从第k阶段的xk到终点E的最短距离,利用倒推方法求解A到E的最短距离。具体计算过程如下:

    S1:K=4,有:F4(D1)=3,F4(D2)=4,F4(D3)=3

    S2: K=3,有:F3(C1)=min{d3(C1,D1)+F4(D1),d3(C1,D2)+F4(d2)}=min{8,10}=8

                 F3(C2)=d3(C2,D1)+f4(D1)=5+3=8

                 F3(C3)=d3(C3,D3)+f4(D3)=8+3=11

                 F3(C4)=d3(C4,D3)+f4(D3)=3+3=6

    S2: K=2,有:F2(B1)=min{d2(B1,C1)+F3(C1),d2(B1,C2)+f3(C2),d2(B1,C3)+F3(C3)}=min{9,12,14}=9

                F2(m)=min{d2(B2,c2)+f3(C2),d2(B2,C4)+F3(C4)}=min{16,10}=10

    S4:k=1,有:F1(A)=min{d1(A,B1)+F2(B1),d1(A,B2)+F2(B2)}=min{13,13}=13

    因此由A点到E点的全过程的最短路径为A—>B2一>C4—>D3—>E。最短路程长度为13。
    从以上过程可以看出,每个阶段中,都求出本阶段的各个初始状态到过程终点E的最短路径和最短距离,当逆序倒推到过程起点A时,便得到了全过程的最短路径及最短距离,同时附带得到了一组最优结果(即各阶段的各状态到终点E的最优结果)。

在上例的多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化问题的方法为动态规划方法。

根据上例分析和动态规划的基本概念,可以得到动态规划的基本模型如下:
    (1)确定问题的决策对象。
    (2)对决策过程划分阶段。
    (3)对各阶段确定状态变量。
    (4)根据状态变量确定费用函数和目标函数。
    (5)建立各阶段状态变量的转移过程,确定状态转移方程。

动态规划的基本知识

动态规划是研究一类最优化问题的方法,在经济、工程技术、企业管理、工农业生产及军事等领域中都有广泛的应用。近年来,在ACM/ICPC中,使用动态规划(或部分应用动态规划思维)求解的题不仅常见,而且形式也多种多样。而在与此相近的各类信息学竞赛中,应用动态规划解题已经成为一种趋势,这和动态规划的优势不无关系。
    1、动态规划的常用名词
    在学习动态规划之前,先得对下面的名词有所了解。本书将标准名词作了一些简化,便于大家更好的理解。
    (1)状态(smte)
    对于一个问题,所有可能到达的情况(包括初始情况和目标情况)都称为这个问题的一个状态。
    (2)状态变量(sk)
    对每个状态k关联一个状态变量sk,它的值表示状态k所对应的问题的当前解值。
    (3)决策(decision)
    决策是一种选择,对于每一个状态而言,你都可以选择某一种路线或方法,从而到达下一个状态。
    (4)决策变量(dk)
    在状态k下的决策变量dk的值表示对状态k当前所做出的决策。
    (5)策略
    策略是一个决策的集合,在我们解决问题的时候,我们将一系列决策记录下来,就是一个策略,其中满足某些最优条件的策略称之为最优策略。
    (6)状态转移函数(t)
    从一个状态到另一个状态,可以依据一定的规则来前进。我们用一个函数t来描述这样的规则,它将状态i和决策变量di映射到另一个状态j,记为t(i,di)=j
    (7)状态转移方程(f)
    状态转移方程f描述了状态变量之间的数学关系。一般来说,与最优化问题相应,状态转移方程表示si的值最优化的条件,或者说是状态i所对应问题的最优解值的计算公式,用代数式表示就是:
    si=f({(sj,dj)|i=t(j,dj),对决策变量dj所有可行的取值})
    2、最优化原理
    1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。与此同时,他提出了解决这类问题的“最优化原理”(Principle of optimality):
    “一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”。简言之,一个最优策略的子策略,对于它的初态和终态而言也必是最优的。
    这个“最优化原理”如果用数学化一点的语言来描述的话,就是:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的。
    最优化原理是动态规划的基础。任何一个问题,如果失去了这个最优化原理的支持,就不可能用动态规划方法计算。
    3、什么是动态规划
    动态规划是运筹学的一个分支。与其说动态规划是一种算法,不如说是一种思维方法来得更贴切。因为动态规划没有固定的框架,即便是应用到同一道题上,也可以建立多种形式的求解算法。许多隐式图上的算法,例如求单源最短路径的Dijkstra算法、广度优先搜索算法,都渗透着动态规划的思想。还有许多数学问题,表面上看起来与动态规划风马牛不相及,但是其求解思想与动态规划是完全一致的。
    因此,动态规划不像深度或广度优先那样可以提供一套模式,需要的时候,取来就可以使用;它必须对具体问题进行具体分析处理,需要丰富的想象力去建立模型,需要创造性的思想去求解。
    4、动态规划适于解决什么样的问题
    准确地说,动态规划不是万能的,它只适于解决一定条件的最优策略问题。
    或许,大家听到这个结论会很失望:其实,这个结论并没有削减动态规划的光辉,因为属于上面范围内的问题极多,还有许多看似不是这个范围中的问题都可以转化成这类问题。
    上面所说的“满足一定条件”主要指下面两点:
    (1)状态必须满足最优化原理
    (2)状态必须满足无后效性
    所谓的无后效性是指:“过去的决策只能通过当前状态影响未来的发展,当前的状态是对以往决策的总结”。
    这条特征说明什么呢?它说明动态规划适于解决当前决策和过去状态无关的问题。状态,出现在策略的任何一个位置,它的地位都是相同的,都可以实施同样的决策。这就是无后效性的内涵。 
    5、用动态规划解题的好处
    说了这么多的动态规划,它到底给我们解题能带来什么好处呢?
    其实动态规划的最大优势在于它具有极高的效率,而且动态规划还有其他的优势,例如:动态规划可以得出一系列解,算法清晰简便,程序易编、易调,等等。

 

原创粉丝点击