一类典型的动态规划问题解析长沙市雅礼中学朱全民(难待学习)

合集下载

6动态规划(精品)

6动态规划(精品)

第6章动态规划本章基本要求1、理解多阶段决策问题的含义;2、掌握动态规划的基本概念,特别是状态变量、决策变量、状态转移方程、指标函数与最优值函数、边界条件、基本方程;3、掌握最优化原理的内容、动态规划的求解步骤及逆序递推法、顺序递推法;4、掌握求解动态规划的解析法与列表法;5、会判定动态规划问题的类型并求解.在生产、计划、管理中往往需要研究处理包含多个阶段决策过程的问题,这类问题能分解为若干阶段或若干个子问题,通过对每个子问题作出决策得到解决,动态规划就是研究这种多阶段决策问题的优化方法.它能为分析问题的全过程提供总的框架,在这个框架内又可用各种优化技术解决每一阶段上的具体问题. 根据决策过程是离散的还是连续的,是确定的还是随机的,动态规划大体可分为离散确定型、离散随机型、连续确定型和连续随机型等四种决策类型.本章首先介绍多阶段决策问题及动态规划的基本概念,然后介绍动态规划的基本原理、求解步骤和方法,最后介绍动态规划的一些应用.§6.1多阶段决策问题动态规划(Dynamic Programming)是运筹学的一个重要分支,是求解多阶段决策问题的一种最优化方法.20世纪50年代初R. E. Bellman等人在研究多阶段决策过程(Multistep Decision Process)的优化问题时,提出了著名的最优性原理(Principle of Optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类优化问题的新方法——动态规划.1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作.动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用.例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便.动态规划的成功之处在于,它可以把一个n 维决策问题变换为n 个一维最优化问题,一个一个地求解.这是经典极值方法所做不到的,它几乎超越了所有现存的计算方法,特别是经典优化方法.另外,动态规划能够求出全局极大或极小,这也是其它优化方法很难做到的.虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划等),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解.应该指出的是,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊的算法,它不像线性规划那样有统一的数学模型和算法(例如单纯形法),而必须对具体问题进行具体分析,针对不同的问题,运用动态规划的原理和方法,建立起相应的模型,然后再用动态规划方法去求解.因此,读者在学习时,除了要对动态规划的基本原理和方法正确理解外,还应以丰富的想象力去建立模型,用灵活的技巧去求解.多阶段决策问题很多,下面通过几个具体例子说明什么是多阶段决策问题.例6.1-1 最短路径问题设有一个旅行者从图7.1-1中的A 点出发途中需经B C D ,,等处,最后到达终点E .从A 到E 有很多条路线可供选择,各点之间的距离如图所示,问旅行者应选择哪一条路线,使从A 到达E 的总路程最短?图6.1-1 A 经,,B C D 到E 的路径图从A 出发有三种方案可供选择:到12,B B 或3B ,如果仅考虑一段内最优,自然要选A 到1B ,但从整体上考虑,从A 到E 的最短路确经3B 而不经过1B ,因此,分段孤立地从本段最优考虑,总体不一定最优.如果把从A 到E 的所有可能路线一一列举出来,找出最短一条,这不仅费事,而且当阶段数多时就很难办到.实际上,这是一个多阶段决策问题.显然可以将全过程划分为4个阶段,每个阶段开始时要确定选择哪一条路径,而且上一个阶段的决策必然影响到下一个阶段选择路径时的状态.决策的目标是使总的路程最短.例6.1-2 生产计划问题工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件).经调查,市场对该产品的需求量第一、二、三、四季度分别为2,3,2,4(千件).如果工厂在第一、二季度将全年的需求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上市的产品需付存储费,每季每千件的存储费为0.5(千元).还规定年初和年末这种产品均无库存.试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本和存储费)最少.这也是一个多阶段决策问题.显然可以将全过程划分为4个阶段(一个季度一个阶段),每个阶段开始时要确定该季度的产量,而且上一个阶段的决策必然影响到下一个阶段的生产状态.决策的目标是使一年的总费用(生产成本和存储费)最少.例6.1-3 机器负荷分配问题某种机器可以在高低两种不同的负荷下进行生产,在高负荷下生产时,产品的年产量g 和投入生产的机器数量x 的关系为()g g x =,这时的年完好率为a ,即如果年初完好机器数为x ,到年终时完好的机器数为(01)ax a <<,在低负荷下生产时,产品的年产量h 和投入生产的机器数量y 的关系为()h h y =,相应的完好率为(01)by b <<,且a b <.假定开始生产时完好的机器数量为1s ,要制定一个五年计划,确定每年投入高、低两种负荷生产的完好机器数量,使5年内产品的总产量达到最大.这同样是一个多阶段决策问题.显然可以将全过程划分为5个阶段(一年一个阶段),每个阶段开始时要确定投入高、低两种负荷下生产的完好机器数,而且上一个阶段的决策必然影响到下一个阶段的生产状态.决策的目标是使产品的总产量达到最大.例6.1-4 装载问题某运输公司要为某企业运送物资,现有n 种货物供其选择装运.这n 种货物的编号为1,2,...,n .已知第j 种货物每件重j a 公斤,每件可收费j c 元,1,2,...,j n =.又知该公司的车辆所能承受的总重量不超过b 公斤.问该公司应如何选择这种货物的件数,使得收取的运费最多.设该公司选择第j 种货物的件数为(1,2,...,)j x j n =,则问题可归结为11max ..012nj jj n j j j jz c x a x b s t x j n === ≤ ≥= ∑∑L 且为整数(,,,) 这是一个整数规划问题,当然可以用整数规划的方法求解.然而,由于这一模型的特殊结构,我们可以把本来属于“静态规划”的各问题引进“时间”因素,分成若干个阶段,用动态规划的方法求解.以上几个问题虽然具体意义各不相同,但也有一些共同的特点,即都可以看成一个多阶段的决策问题,而且各个阶段决策的选取不是任意的,它依赖于当前面临的状态,又对以后的发展产生影响.当各个阶段的决策确定之后,就组成了一个决策序列,也就决定了整个过程的一条活动路线.这种把一个问题变成一个前后关系具有链状态结构的多阶段决策过程,也称为序贯决策过程,相应的问题就称为多阶段决策问题.下面以例7.1-1为例简单的介绍一下动态规划方法求解多阶段决策问题的基本思路与基本步骤.动态规划方法解题的基本思路是:将一个多阶段决策问题转化为依次求解多个单阶段决策问题,从而简化计算过程,这种转化的实现是从最后一个阶段出发进行反推,这种算法称为逆序算法.对于例7.1-1,具体求解步骤如下:(1)考虑一个阶段的最优选择.旅行者到达E 点前,上一站必然到达1D 或2D .如果上一站为1D ,则本阶段最优决策为1D E →,距离1(,)3d D E =,其中(,)d I J 表示,I J 之间的距离,记1()3f D =,1()f D 表示某阶段初从1D 出发到终点E 的最短距离.同理,若上一站为2D ,则最优决策为2D E →,2()4f D =.(2)联合考虑两个阶段的最优选择.当旅行者离终点E 还剩两站时,他必然位于12,C C 或3C 的某一点,如果位于1C ,则从1C 到终点E 的路线可能有两条:11C D E →→或12C D E →→,旅行者从这两条路线中选取最短的一条,并且不管经过1D 或2D ,到达该点后,他应沿着从1D 或2D 到E 的最短路程继续走.故从1C 出发到E 的最短路程为111122(,)()13min min 4.(,)()44d C D f D d C D f D ++ == ++即,从1C 到E 的最短路线为11C D E →→,并记1() 4.f C =同理,从2C 出发到E 的最优选择为211222(,)()63min min 7.(,)()34d C D f D d C D f D ++ == ++即,从2C 到E 的最短路线为22C D E →→,并记2()7f C =.从3C 出发到E 的最优选择为311322(,)()33min min 6.(,)()34d C D f D d C D f D ++ == ++即,从3C 到E 的最短路线为31C D E →→,并记3()6f C =.(3)再考虑三个阶段联合起来的最优选择.当旅行者离终点E 还有三站时,他位于12,B B 或3B 中的某一点,如果位于1B ,则出发到E 的最优选择为111122133(,)()74min (,)()min 571166(,)()d B C f C d B C f C d B C f C ++ +=+= ++即,从1B 到E 的最短路线为111B C D E →→→,记1()11f B =.如果从2B 出发,到E 点的最优选择为211222233(,)()34min (,)()min 27746(,)()d B C f C d B C f C d B C f C ++ +=+= ++即,从2B 到E 的最短路线为211B C D E →→→,记2()7f B =,如果从3B 出发,到E 点的最优选择为311322333(,)()54min (,)()min 17856(,)()d B C f C d B C f C d B C f C ++ +=+= ++即:从3B 到E 的最短路线为322B C D E →→→,记3()8f B =.(4)四个阶段联合考虑.从A 到E 的最优选择为112233(,)()211min (,)()min 571138(,)()d A B f B d A B f B d A B f B ++ +=+= ++即,从A 到E 的最短路线为322A B C D E →→→→,距离长度为()11f A =.§6.2动态规划的基本概念用动态规划处理多阶段决策问题时,首先建立一些基本概念,通过这些概念定量描述这个多阶段决策问题,现结合例6.1-1解释这些概念.(1)阶段:指一个问题需要作出决策的步数.如例6.1-1中有4个阶段.描述问题阶段数的变量称为阶段变量,常用k 来表示,k 编号方法常用顺序编号法,即,初始阶段编号为1,以后随进程逐渐增大.通常将所给问题的过程按时间或空间特征分解为若干互相联系的阶段.(2)状态:对于多阶段决策问题,我们把每一阶段的起始“位置”叫做状态,它既是该阶段的某一起点,又是前一阶段的某一终点.例如在例6.1-1中第二阶段的状态有三个:12,B B 和3B .我们把描述过程状态的变量叫做状态变量.它可以用一个数,一组数或一个向量来描述,通常用i k s 表示第k 阶段的第i 个状态.一般每一阶段都有若干个状态,故我们用k S = {}12,,,m k k k s s s L 表示第k 段的所有状态构成的状态集合.在最短路问题例6.1-1中 {}1,S A ={}{}{}{}212331234125,,,,,,,,S B B B S C C C S D D S E ====.应当指出,这里说的状态和常识中的状态不尽相同,它一般要满足:①要能描述问题的变化过程.②给定某一阶段的状态,以后各阶段的发展不受以前各阶段状态的影响,也就是说,当前的状态是过去历史的一个完整总结,过程的过去历史只能通过当前状态去影响它未来的发展,这个性质称为无后效性.③要能直接或间接地计算出来.(3)决策:指某阶段初从给定的状态出发,决策者从面临的若干种不同方案中做出的选择.决策变量()k k x s 表示第k 阶段状态为k s 时对方案的选择,决策变量的取值要受到一定的限制,用()k k D s 表示k 阶段状态为k s 时决策允许的取值范围,称为允许决策集合.故有()()k k k k x s D s ∈例如例6.1-1最短路径问题中{}21123(),,D B C C C =,而211()x B C =是可能的决策.(4)策略:当每一阶段的决策都确定以后,按先后顺序排列的决策组成的集合,称为一个全过程策略,简称策略,记为1,n p ,即{}1,1122(),(),,()n n n p x s x s x s =L如例7.1-1中选取122A B C D E →→→→就是一个策略.而,{(),,()}k n k k n n p x s x s =L ,称为后部子过程策略,如例6.1-1中选取从1B 到E 的一条路线121B C D E →→→就是一个后部子过程策略.对于多阶段决策问题,可供选择的策略很多,用1,1()n P s 及,()k n k P s 表示全体策略集合和后部子策略集合,显然有1,1,1,,(),().n n k n k n k p P s p P s ∈∈由于每一阶段都有若干个可能的状态和多种不同的决策,因而一个多阶段决策问题存在许多策略可供选择,称其中能够满足预期目标的策略为最优策略.如例6.1-1中路线3A B → 22C D E →→→为最优策略.(5)状态转移方程:从k s 的某一个状态出发,当决策变量()k k x s 的取值决定后,下一个阶段状态变量1k s +的取值也就随之确定.这种从上阶段的某一状态值到下阶段某一状态值得转移的规律称为状态转移律.显然下一阶段状态1k s +的取值是上阶段状态变量k s 和上阶段决策变量()k k x s 的函数,记为:1(,)k k k k s T s x +=状态转移律也叫状态转移方程.如例6.1-1中由于前一阶段的终点即为后一阶段的起点,故状态转移方程为1()k k k s x s +=(6)指标函数:用来衡量允许策略优劣的数量指标称为指标函数,它分为阶段指标函数与过程指标函数.阶段指标函数是指对应某一阶段状态k s 和从该状态出发的一个阶段的决策k x 的某种效益度量,用(,)k k k r s x 表示.过程的指标函数是指从状态k s 出发(k =1,2,…,n )至过程最终,当采取某种策略时,按预定标准得到的效益值,这个值既与k s 的状态值有关,又与k s 以后所选取的策略有关,它是两者的函数.记作,,11,,,,,,,.k n k n k k k k n n k n k k n V V s x s x s x V s p ++==L (,,)()例如,在例6.1-1中,两点间距离(,)d A B 1即为阶段的指标函数,而从1B 到终点E 的距离即为过程指标函数.常见指标函数的形式为:○1②(7)最优值函数:指标函数的最优值,称为最优值函数,记为()k k f s ,它表示从第k 个阶段的状态k s 出发到第n 个阶段的终止状态的过程,采取最优策略所得到的指标函数值,即,,,,()(,),k k k n k k n k n k n f s opt V s p p P =∈式中,opt 表示最优化,根据效益值的具体含义可以是求最大,或求最小.,11,(,)(,)(,)(,)n k n i i i i k n k k k i i i i k k k k k n V r s x r s x r s x r s x V ==++==+=+∑∑,11,(,)(,)(,)(,)n k n i i i i k n k k k i i i i k k k k k nV r s x r s x r s x r s x V ==++===∏∏..§6.3动态规划的基本原理和建立动态规划模型的步骤6.3.1 最优化原理我们知道,最短路问题具有这样的特点:如果最短路线经过第k 阶段的状态k s ,那么从k s 出发到达终点的这条路线,对于从k s 出发到达终点的所有路线来说,也是最短路线.实际上具有上述特点的问题很多,贝尔曼正是研究这样一类所谓多阶段决策问题,发现它们都有这一共同特点,于是提出了解决这类问题的最优化原理.最优化原理 作为整个过程的最优策略具有这样的性质:无论过去的状态和决策如何,对前面所形成的状态而言,余下的决策必然构成一个最优子策略.简言之:一个最优策略的子策略仍是最优的.例6.1-1正是根据这一原理求解的,从图6.1-1可以看出,无论从哪一段的某状态出发到终点E 的最短路线,只与此状态有关,而与这点以前的状态路线无关,即不受从A 点是如何到达这点的决策影响.而且从A 到E 的最短路线若经过i B ,则此路线由i B 到E 的后半部分应是由i B 到E 的最短路线.根据这个原理写出的计算动态规划问题的递推关系式称为动态规划方程.当,(,)nk n i i ii k V r s x ==∑时 ,,,,11()(,)(){(,)()}(())k k k n k k n k n k n k k k k k k k k f s opt V s p p P opt r s x f s x D s ++=∈=+∈ 当,(,)nk n i i ii k V r s x ==∏时 ,,,,11()(,)(){(,)()}(())k k k n k k n k n k n k k k k k k k k f s opt V s p p P opt r s x f s x D s ++=∈=∈6.3.2 建立动态规划模型的步骤用动态规划求解多阶段决策问题的基本思想是:利用最优化原理,建立动态规划方程,即建立动态规划的数学模型,最后再设法求其数值解.建立动态规划模型的步骤为:(1)将问题的过程恰当地分成若干个阶段,一般按问题所处的时间或空间进行划分,并确定阶段变量;(2)正确选取状态变量k s 使之满足无后效性等三个条件;(3)确定决策变量()k k x s 及每个阶段的允许决策集合()k k D s ;(4)写出状态转移方程 1(,)k k k k s T s x +=;(5)根据题意列出指标函数,k n V 、最优函数()k k f s 及阶段指标函数(,)k k k r s x ;(6)明确边界条件动态规划方程是递推关系,方程中含有11()k k f s ++,当k n =时,也即从最后一个阶段开始逆推时出现11()n n f s ++,这个项称为问题的边界条件.边界条件11()n n f s ++的值要根据问题的条件来决定,例如,当指标函数值是各阶段指标函数值的和时,可取11()n n f s ++=0,当指标函数值是各阶段指标函数值的积时,可取11()n n f s ++=1.(7)写出动态规划方程最后,根据最优化原理,结合所给的边界条件,可以写出如下的动态规划方程1111(){(,)()}()0(,1,,1)k k k k k k k n n f s opt r s x f s f s k n n ++++=+==− L (6.3-1) 或 1111(){(,).()}()1(,1,,1)k k k k k k k n n f s opt r s x f s f s k n n ++++= ==− L (6.3-2) 上面7步是构造动态规划模型的基础,是正确写出动态规划基本方程的基本要素,一个问题的动态规划模型构造得是否正确,又集中地反映在要恰当地定义最优值函数、正确地写出递推关系和边界条件,下面我们就来讨论这个问题.公式(6.3-1)和(6.3-2)称为动态规划的递推方程.由于是从k=n 开始向前逆序递推,又称为逆序递推方程.在递推过程中,将前面几个公式写在一起就构成对第一类指标函数式(加法形式)的一组基本方程:11111(){(,)()}()0(,),(,1,...,1)k k k k k k k n n k k k k f s opt r s x f s f s s T s x k n n +++++=+ = ==− (6.3-3)同理,对于第二类指标函数(乘法形式的),也可写出它的一组基本方程:11111(){(,).()}()1(,),(,1,...,1)k k k k k k k n n k k k k f s opt r s x f s f s s T s x k n n +++++= = ==− (6.3-4)于是得到求解动态规划的逆序方法的求解过程:运用公式(6.3-3)、(6.3-4)(或者公式(6.3-1) 、(6.3-2))之一,从k=n 开始,由后向前逆推,逐步求得各阶段的最优决策和相应的最优值,求出11()f s ,就是全过程的最优值(将1s 的值代入计算即得),然后再由1s 和*1x ,利用状态转移方程计算出2s ,从而确定*2x ,...,依次类推,最后确定*n x ,于是得最优策略****1,12{,,...,}n n p x x x =. 后面的计算过程称为“回代”,又称为“反向追踪”.总之,动态规划的计算过程是由递推和回代两部分组成.逆序递推的过程如图6.3-1所示§6.4动态规划的求解方法本节主要讨论一维动态规划的求解法.所谓一维动态规划问题是指:在一个多阶段决策过程中,每一个阶段只用一个状态变量k s 就足以描述系统的状态演变,并且在每一个阶段,只需要选择一个决策变量k x 就够了.前面讨论的问题都属于这一类.若每个阶段需要两个或多个状态变量才能描述系统的演变,或者每个阶段需要选择两个或多个决策变量时,这类问题都属于多维动态规划问题,本书不做讨论.求解一维动态规划问题,基本上有两类方法:一类是解析法;一类是列表法(数值计算法).所谓解析法,它需要用到指标函数的数学公式表示式,并且能用经典求极值的方法得到最优解,即用解析的方法求得最优解.所谓列表法,它在计算过程中不用或者很少用到指标函数的解析性质,而是通过列表的方式来逐步求得最优解,它可以解决解析法难于解决的问题.下面通过实例来分别介绍这两种方法.6.4.1 动态规划的解析法我们首先讨论仅有一个约束条件的数学规划问题)()()(max 2111n n x g x g x g Z +++=L=≥≤+++),,2,1(0..2211n j x b x a x a x a t s j n n L L 这里,当()j j g x ,j=1,2,…,n 均为线性函数时,则为线性规划问题;当()j j g x 不全为线性函数时,则为非线性规划问题;当j x 有整数要求时,则为整数规划问题.虽然这一类问题可在线性规划、非线性规划及整数规划中讨论.但是,用动态规划方法来解决这一类问题有其特殊的优点和方便之处.用动态规划求解这一类问题,有一个统一的模式.即把问题划分为n 个阶段,取k x 为第k 阶段的决策变量.第k 阶段的效益为()k k g x (k=1,2,…,n ).过程指标函数为各阶段效益之和,即,()(1,2,...,)nk n jjj kV g xk n ===∑问题是如何选择状态变量k s ,正如线性规划问题中可以将约束条件看成资源限制一样,这里也可以这样理解,即将现有数量为b 个单位的某种资源用来生产n 种产品,问如何分配使总利润最大.假设工厂的决策者分几个阶段来考虑这个问题,如果是用逆序递推法,决策者首先考虑的是第n 种产品生产几件,消耗资源多少;然后考虑第1n −种和第n 种产品各生产多少,消耗资源多少,依次向前递推.在第k 阶段时,就要考虑第k 种、第1k +种,…,第n 种产品各生产多少,消耗资源多少.于是我们就可以这样来选择状态变量,即令k s 表示可供第k 种产品至第n 种产品消耗的资源数.显然由0k s ≥,且k s 满足无后效性,而第k 阶段的资源消耗为k k a x ,于是得状态转移方程为.1,,1,,1L −=−=+n n k x a s s k k k k再由0k s ≥及决策变量k x 的非负性,可得允许决策集合为≤≤=k k k k k k a s x x s D 0|)( 允许状态集合为{}b s s S k k k ≤≤=0|且S 1={b }.设最优函数()k k f s 表示从第k 阶段到第n 阶段指标函数的最优值,则逆序递推方程为+=≤≤224/05651max 22s x s x 2*225,44s s x ==当k=1时,状态转移方程2113s s x =−,故{})(4max )(2213/01111s f x s f s x +=≤≤−+=≤≤)3(454max 1113/011x s x s x+=≤≤113/04541max 11s x s x *1114,33s s x ==由于110s ≤及11()f s 关于1s 是单调增函数,故应取110s =.这时3401034)10(1=×=f这就是指标函数的最优值.再回代求最优决策:由于110s =,所以03103103,31031121*1=×−=−===x s s s x 00404,042232*2=×−=−===x s s s x 053*3==s x即线性规划问题的最优解为T X )0,0,310(*=最优值Z *=40/3.例6.4-2 用动态规划方法求解33221max x x x Z ==≥≤++)3,2,1(06..321j x x x x t s j解:这个问题可以理解为将一个数6(或某种资源数)分成三部分,使目标函数23123max z x x x =达到最大.取阶段变量k=1,2,3共分三个阶段0.决策变量k x 表示第k 阶段分配的数量,状态变量k s 表示从第k 阶段至第3阶段可供分配的总数量,则状态转移方程为k k k x s s −=+1允许决策集合 {}k k k k k s x x s D ≤≤=0|)(, 允许状态集合1{06},{6}k k k S s s S =≤≤=,递推方程为1144()max{(,).()}()1(3,2,1)k k k k k k k f s r s x f s f s k ++= ==当k=3时,有3333*3333330()max{},x s f s x s x s ≤≤===当k=2时,有{}{}32220332022)(max )(max )(2222x s x s f x s f s x s x −=⋅=≤≤≤≤令322222)()(x s x x −=ϕ,则)4()()(2222222x s x s x −−=′ϕ 再由22()0x ϕ′=得22x s =或224s x =,又由直接验证可知22(04s ϕ′′<,故224sx =为)(22x ϕ的极大值点.这时4*2222227(),2564s f s s x ==当k=1时,有令4112111)(25627)(x s x x −⋅=ϕ,则)62()(25627)(11311111x s x s x x −−=′ϕ再令 0)(11=′x ϕ 得3,,011111s x s x x === 又由直接验证可知11(03s ϕ′′<,故113sx =为11()x ϕ的极大值点.这时1122*11111102()max{8}2,2s x s f s x s x ≤≤===当k=2时,有{}{}2222201122022)(24max )(4max )(2222x s x s f x s f s x s x −+=+=≤≤≤≤令2222222)(24)(x s x x −+=ϕ,则)(48)(22222x s x x −−=′ϕ. 由0)(22=′x ϕ得223s x =.但由于012)(22>=′′x ϕ,所以223s x =为最小值点.故极大值点必在区间[0,2s ]的端点,计算两端点的函数值22222224)(,2)0(s s s ==ϕϕ并比较其大小可知极大值点为22x s =.这时22224)(s s f =当k=3时,有{})(max )(223310/03333s f s s f s x +=≤≤{}2333310/0)10(4max 33x s s s x −+=≤≤但320s ≤,所以取320s =,得{}233303)1020(4max )20(23x x f s x −+=≤≤由直接验证可知,30x =为极大值点.故0,1600)20(*33==x f又02,02020;20,20101*12212*2332===−=−====−=s x x s s s x x s s ,即,最优解为0,20,0*3*2*1===x x x目标函数最优值为1600.以上几个例子中,由于是将状态变量和决策变量都是作为连续变量看待的,且指标函数和状态转移方程都有确定的解析表达式,求极值时所用的方法是微积分中的方法,所以我们把这类问题的求解方法统称为动态规划的解析法.6.4.2 动态规划的列表法在多阶段决策问题中,当指标函数没有明确的解析表达式(例如用数值表给出),或者对变量有整数要求时,则不能用解析法求解,只能用列表法(数值计算法)求解,下面举例说明.例6.4-4 (资源分配问题) 设有6810×元资金用于扩建三个工厂投资数均为整数(单位为610元),每个工厂的利润增长额与投资数有关,详细数据见表6.4-1(单位:610元).表6.4-1 投资与利润增长的关系问应如何确定这三个工厂的投资数,使总的利润增长额为最大?解 将问题分为三个阶段,即把向第k 个工厂进行投资作为第k 个阶段,k =3,2,1.第k 阶段初,选取可用于向第k 个工厂至第3个工厂进行的投资数,作为该阶段的状态变量,用k s 表示.选取用于第k 个工厂的投资数作为决策变量,用k x 表示,显然每个阶段的允许决策集合为(){|0}k k k k k D s x x s =≤≤,因每阶段初可用的投资数是上阶段初可用的投资数减去上阶段用去的投资数,故状态转移方程为1,(1,2,3)k k k s s x k +=−=.用()k k g x 表示给工厂k 分配资金k x 时得到的利润增长额,故指标函数可写为3,3i11,3()()()k k k ii k k k k V g x g x g x V =++=+=+∑设用()k k f s 表示从k 阶段状态k s 开始采用最优策略时的利润增长额,则有11()max{()()},()k k k k k k k k k f s g x f s x D s ++=+∈因问题中只有三个工厂,故假想的第4阶段初拥有的投资数已不可能促使这三个工厂利润额的增长,故边界条件44()0.f s = 动态规划递推方程为144()max{()()}()0,(3,2,1)k k k k k k k f s g x f s x f s k +=+−== (1)当3k =时,可用于投资的只有第3个工厂,投资额33(0,1,2,,8)s s =L 全部给第3个工厂,最大利润增长额为:3333333()max{()},()f s g x x D s =∈根据这个关系式,由表6.4-1中数据,得表7.4-2的结果表6.4-2 仅投资第三个工厂的情况 (单位:610元) 状态3s0 1 2 3 4 5 6 7 8 33()f s0 4 26 40 45 50 5l 52 53 对应决策*3x12345678(2)当2k =时,可用于投资的工厂为2和3.这时有222232222()max{()()}0f s g x f s x x s =+−≤≤2s 可能取得值为0,1,2,3,4,5,6,7,8具体计算步骤见表6.4-3.(3)当1k =时,可用于投资的工厂为1,2和3.这时有111121111()max{()()}0f s g s f s x x s =+−≤≤利用动态规划方程1s 分别求出不同值时的11()f s 及*11()x s .计算步骤见表6.4-4.表6.4-3 投资2,3两工厂的情况表6.4-4 投资三个工厂的情况由表6.4-4可知,当1s 6810=×时,投资给第1个工厂的金额为4×610元,即1(8)4x =×610(元);当62410s =×时,查表6.4-3知投资给第2个工厂的金额为4×610元,即62(4)410x =× (元);当30s =时,查表6.4-2知,投资给第3个工厂的金额为0,即3(0)0x =; 即最优策略为,6410×元,6410×元,0元. 预期最大投资增长额为140×610元.。

算法之动态规划问题

算法之动态规划问题
最长不升子列问题:给定一个整数序列A,找出 其最长不升子列
故事:人类为了回击外星人入侵,要把射程不同 的一排高炮依次发射,但发射的能量不会增加,因 此,射程是不增的,请挑选最长的高炮序列
4.5.2 最长不升子列问题的动态 规划解法示例
8 6 5 10 9 7 3 2
8自己构成最长子列8,长度为1,到第1位置的 最长子列长度是1;
它与钓鱼问题有什么区别和联系?钓鱼问题增 加了池塘之间移动所需时间的耗费;钓鱼问题 要求每个池塘相邻两个时段的收益是单调不增 的。可以认为,钓鱼问题是资源分配问题的特 例
4.3.2 资源分配问题的动态规划 解法示例
x01234
G1(x) 0 4 20 25 31 G2(x) 0 5 15 41 50 G3(x) 0 6 11 18 23 如果5个资源全部由G1(x)获得,则随时间增加,最 大收益分别为0, 4, 20, 25, 31, 31;如果1个资源由 G1(x)和G2(x)获得,则最大收益是max{4, 5}=5;如 果2个资源由G1(x)和G2(x)获得,则最大收益是max {20+0, 4+5, 0+15},则最大收益是20……
花费时间2:所花费时间可以分为2+0+0,1+1+0,0+1+1三种,
其最大收益是:max{45, 30, 20} = 45
花费时间3:所花费时间可以分为3+0+0,2+1+0,1+1+1,0+1+2 四种。其最大收益是:max{45+0, 45+0, 30+20, 0+37} = 50
4.1.3 钓鱼问题的动态规划解法 的步骤

动态规划算法详解及经典例题

动态规划算法详解及经典例题

动态规划算法详解及经典例题⼀、基本概念(1)⼀种使⽤多阶段决策过程最优的通⽤⽅法。

(2)动态规划过程是:每次决策依赖于当前状态,⼜随即引起状态的转移。

⼀个决策序列就是在变化的状态中产⽣出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

假设问题是由交叠的⼦问题所构成,我们就能够⽤动态规划技术来解决它。

⼀般来说,这种⼦问题出⾃对给定问题求解的递推关系中,这个递推关系包括了同样问题的更⼩⼦问题的解。

动态规划法建议,与其对交叠⼦问题⼀次重新的求解,不如把每⼀个较⼩⼦问题仅仅求解⼀次并把结果记录在表中(动态规划也是空间换时间的)。

这样就能够从表中得到原始问题的解。

(3)动态规划经常常使⽤于解决最优化问题,这些问题多表现为多阶段决策。

关于多阶段决策:在实际中,⼈们经常遇到这样⼀类决策问题,即因为过程的特殊性,能够将决策的全过程根据时间或空间划分若⼲个联系的阶段。

⽽在各阶段中。

⼈们都须要作出⽅案的选择。

我们称之为决策。

⽽且当⼀个阶段的决策之后,经常影响到下⼀个阶段的决策,从⽽影响整个过程的活动。

这样,各个阶段所确定的决策就构成⼀个决策序列,常称之为策略。

因为各个阶段可供选择的决策往往不⽌⼀个。

因⽽就可能有很多决策以供选择,这些可供选择的策略构成⼀个集合,我们称之为同意策略集合(简称策略集合)。

每⼀个策略都对应地确定⼀种活动的效果。

我们假定这个效果能够⽤数量来衡量。

因为不同的策略经常导致不同的效果,因此,怎样在同意策略集合中选择⼀个策略,使其在预定的标准下达到最好的效果。

经常是⼈们所关⼼的问题。

我们称这种策略为最优策略,这类问题就称为多阶段决策问题。

(4)多阶段决策问题举例:机器负荷分配问题某种机器能够在⾼低两种不同的负荷下进⾏⽣产。

在⾼负荷下⽣产时。

产品的年产量g和投⼊⽣产的机器数量x的关系为g=g(x),这时的年完善率为a,即假设年初完善机器数为x,到年终时完善的机器数为a*x(0<a<1);在低负荷下⽣产时,产品的年产量h和投⼊⽣产的机器数量y 的关系为h=h(y)。

算法之动态规划问题共54页文档

算法之动态规划问题共54页文档
❖每个分解可以用O(1)的时间求得结果
❖因此,动态规划解决钓鱼问题的时间复杂度是 O(m*n2),空间复杂度是O(m*n),用于记录所经历的 选择;如果不要求记录路径,而只是给出最大收益 结果,则空间复杂度是O(n)
4.2 多段图最短路径问题
4.2.1 多段图问题描述 4.2.2 多段图动态规划解法示例 4.2.3 多段图动态规划解法的步骤 4.2.4 动态规划解多段图的复杂度 分析
4.2.3 多段图动态规划解法的步骤
❖按照多段图的阶段规定把问题划分为若干阶段
❖每个阶段的每个节点要标记两个信息:到当前 节点的最短路径;实现当前节点最短路径的来源
❖当前节点最短路径由上一阶段每个节点的最短 路径加上它与当前节点距离的最大值求得
❖最后一个节点(终止点)所标最短路径长度就 是该问题的最短路径长度。可以根据最短路径来 源把从后向前依次回溯,就可以求得各个阶段所 做的选择,也就是最优路径。
4.2.4 动态规划解多段图的复杂 度分析
❖假设多段图共有n段,每一段上最多有m个节点。
❖对每个阶段上的每个节点,都要计算前一阶段的 每个节点到该节点后的路径长度
❖因此,动态规划解决多段图问题的时间复杂度是 O(m2*n),空间复杂度是O(m*n),用于对每个节点扩 充空间,记录当前最短路径和当前最短路径的来源
花费时间2:所花费时间可以分为2+0+0,1+1+0,0+1+1三种,
其最大收益是:max{45, 30, 20} = 45
花费时间3:所花费时间可以分为3+0+0,2+1+0,1+1+1,0+1+2 四种。其最大收益是:max{45+0, 45+0, 30+20, 0+37} = 50

动态规划经典题目分析共37页

动态规划经典题目分析共37页

xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯

39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
39、没有不老的誓言,没有不变的承 诺,踏 上旅途 ,义无 反顾。 40、对时间的价值没有没有深切认识 的人, 决不会 坚韧勤 勉。
谢谢!
36、自己的鞋子,自己知道紧在哪里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
动态规划经典题目分析
36、“不可能”这个字(法语是一个字 ),只 在愚人 的字典 中找得 到。--拿 破仑。 37、不要生气要争气,不要看破要突 破,不 要嫉妒 要欣赏 ,不要 托延要 积极, 不要心 动要行 动。 38、勤奋,机会,乐观是成功的三要 素。(注 意:传 统观念 认为勤 奋和机 会是成 功的要 素,但 是经过 统计学 和成功 人士的 分析得 出,乐 观是成 功的第 三要素 。

雅礼中学简介 长沙四大名校(一)

雅礼中学简介 长沙四大名校(一)

雅礼中学简介长沙四大名校精品文档,仅供参考雅礼中学简介长沙四大名校长沙市雅礼中学(Yali Middle School)是湖南省首批挂牌的八所重点中学之一、全国文明单位、全国现代教育技术实验学校,也是湖南省示范性普通高级中学。

以下是本站小编为大家带来的雅礼中学简介,希望能帮助到大家!雅礼中学简介历史沿革编辑创校初期教学楼上的校徽1901年初,耶鲁大学少数毕业校友,倡议到中国创办教育科技事业。

1902年6月22日,雅礼协会成立。

1906年6月,租得西牌楼民房数间作为校舍,开办雅礼大学堂。

1907年,在学校对面租用民房开办了雅礼医院(实为诊所)。

1914年,学校成立大学本科。

1914年7月,雅礼协会与湖南育群学会合办湘雅医科学校(湘雅意即湖南雅礼)。

1916年,麻园岭新校舍第一期工程竣工,学院迁来新址。

1920年,合并湘雅医学预科。

此时,学校规模已渐完备,有了文、理、医预三科,因此正式定名为雅礼大学。

1926年冬,学校因大革命政局影响而停办,直至1928年。

1928年,长沙停办学校纷纷恢复。

[3]曲折发展雅礼中学(4张)1929年9月,经当时政府教育部批准立案,雅礼中学恢复。

1937年,王光鼎和谭安琪两位老师到沅陵筹办雅礼沅陵分校。

[4] 1951年,学校改名为解放中学。

1952年暑假,雅礼中学改制为长沙市第五中学。

[5] 1966年6月,文化大革命开始,学校停课。

1968年,学校复课。

[6] 改革兴盛1985年初,长沙市第五中学恢复了与美国雅礼协会中断35年的联系。

1985年8月25日,长沙市第五中学正式被湖南省教育厅批准复名为雅礼中学。

1992年,长沙市雅礼中学被湖南省教委首批授予湖南省重点中学的牌匾。

1992年8月,湖南省教委批准在长沙市雅礼中学等三所重点中学中开办理科实验班。

1995年2月,长沙市编制委员会确定长沙市雅礼中学为正县级全民事业单位。

[7] 2002年,创办长沙雅礼寄宿制中学(后改名长沙市南雅中学)。

动态规划讲解大全(含例题及答案)

动态规划讲解大全动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。

20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法--动态规划。

1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。

动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用.例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。

虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。

动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。

不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。

动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。

因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解.我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。

基本模型多阶段决策过程的最优化问题。

在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。

动态规划经典问题大合集

动态规划经典教程引言:本人在做过一些题目后对DP有些感想,就写了这个总结:第一节动态规划基本概念一,动态规划三要素:阶段,状态,决策。

他们的概念到处都是,我就不多说了,我只说说我对他们的理解:如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。

显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。

每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。

下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样每个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态)。

每个形态就是一个状态,那从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。

一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。

经过这个例子相信大家对动态规划有所了解了吧。

下面再说说我对动态规划的另外一个理解:用图论知识理解动态规划:把动态规划中的状态抽象成一个点,在有直接关联的状态间连一条有向边,状态转移的代价就是边上的权。

这样就形成了一个有向无环图AOE网(为什么无环呢?往下看)。

对这个图进行拓扑排序,删除一个边后同时出现入度为0的状态在同一阶段。

这样对图求最优路径就是动态规划问题的求解。

二,动态规划的适用范围动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢?一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件:最优子结构(最优化原理)无后效性最优化原理在下面的最短路径问题中有详细的解答;什么是无后效性呢?就是说在状态i求解时用到状态j而状态j求解又用到状态k…..状态N。

动态规划算法详解及经典例题

动态规划算法详解及经典例题动态规划什么是动态规划?动态规划的⼤致思路是把⼀个复杂的问题转化成⼀个分阶段逐步递推的过程,从简单的初始状态⼀步⼀步递推,最终得到复杂问题的最优解。

基本思想与策略编辑:由于动态规划解决的问题多数有重叠⼦问题这个特点,为减少重复计算,对每⼀个⼦问题只解⼀次,将其不同阶段的不同状态保存在⼀个⼆维数组中。

1. 拆分问题:根据问题的可能性把问题划分成通过递推或者递归⼀步⼀步实现。

关键就是这个步骤,动态规划有⼀类问题就是从后往前推到,有时候我们很容易知道 : 如果只有⼀种情况时,最佳的选择应该怎么做.然后根据这个最佳选择往前⼀步推导,得到前⼀步的最佳选择 2. 定义问题状态和状态之间的关系:⽤⼀种量化的形式表现出来,类似于⾼中学的推导公式,因为这种式⼦很容易⽤程序写出来,也可以说对程序⽐较亲和(也就是最后所说的状态转移⽅程式) 3. 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若⼲个⼦问题(阶段),按顺序求解⼦阶段,前⼀⼦问题的解,为后⼀⼦问题的求解提供了有⽤的信息。

在求解任⼀⼦问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。

依次解决各⼦问题,最后⼀个⼦问题就是初始问题的解。

我的理解是:⽐如我们找到最优解,我们应该讲最优解保存下来,为了往前推导时能够使⽤前⼀步的最优解,在这个过程中难免有⼀些相⽐于最优解差的解,此时我们应该放弃,只保存最优解,这样我们每⼀次都把最优解保存了下来,⼤⼤降低了时间复杂度。

动态规划解决问题的过程分为两步:1.寻找状态转移⽅程式2.利⽤状态转移⽅程式⾃底向上求解问题动态规划原理使⽤条件:可分为多个相关⼦问题,⼦问题的解被重复使⽤使⽤条件:可分为多个相关⼦问题,⼦问题的解被重复使⽤Optimal substructure(优化⼦结构):⼀个问题的优化解包含了⼦问题的优化解缩⼩⼦问题集合,只需那些优化问题中包含的⼦问题,降低实现复杂性我们可以⾃下⽽上的Subteties(重叠⼦问题):在问题的求解过程中,很多⼦问题的解将被多次使⽤。

动态规划讲解大全(含例题及答案)

基本模型
多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在 它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不 是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个 决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问 题就称为多阶段决策问题。
在前面的例子中,第一个阶段就是点 A,而第二个阶段就是点 A 到点 B,第三个阶段是点 B 到点 C,而第四个阶段是点 C 到点 D。
状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称 为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前 一阶段某支路的终点。
fout.close(); return 0; }
USACO 2.3 Longest Prefix
题目如下: 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序 列分解成较短的(称之为元素的)序列很感兴趣。 如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符) 组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。并不是所有的元素都必须出现。 举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素: {A, AB, BA, CA, BBC} 序列 S 的前面 K 个字符称作 S 中长度为 K 的前缀。设计一个程序,输入一个元素集合以及一 个大写字母序列,计算这个序列最长的前缀的长度。 PROGRAM NAME: prefix INPUT FORMAT 输入数据的开头包括 1..200 个元素(长度为 1..10 )组成的集合,用连续的以空格分开的字 符串表示。字母全部是大写,数据可能不止一行。元素集合结束的标志是一个只包含一个 “.” 的行。 集合中的元素没有重复。接着是大写字母序列 S ,长度为 1..200,000 ,用一行或者多行的字符串 来表示,每行不超过 76 个字符。换行符并不是序列 S 的一部分。 SAMPLE INPUT (file prefix.in) A AB BA CA BBC . ABABACABAABC OUTPUT FORMAT 只有一行,输出一个整数,表示 S 能够分解成 P 中元素的最长前缀的长度。 SAMPLE OUTPUT (file prefix.out) 11 示例程序如下: #include <stdio.h>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档