数学建模算法合集之《动态规划的特点及其应用》
- 格式:doc
- 大小:280.50 KB
- 文档页数:29
动态规划算法难点详解及应用技巧介绍动态规划算法(Dynamic Programming)是一种常用的算法思想,主要用于解决具有重叠子问题和最优子结构性质的问题。
在解决一些复杂的问题时,动态规划算法可以将问题分解成若干个子问题,并通过求解子问题的最优解来求解原始问题的最优解。
本文将详细介绍动态规划算法的难点以及应用技巧。
一、动态规划算法的难点1. 难点一:状态的定义在动态规划算法中,首先需要明确问题的状态。
状态是指问题在某一阶段的具体表现形式。
在进行状态定义时,需要考虑到问题的最优子结构性质。
状态的定义直接影响到问题的子问题划分和状态转移方程的建立。
2. 难点二:状态转移方程的建立动态规划算法是基于状态转移的思想,即通过求解子问题的最优解来求解原始问题的最优解。
因此,建立合理的状态转移方程是动态规划算法的关键。
在进行状态转移方程的建立时,需要考虑问题的最优子结构性质和状态之间的关系。
3. 难点三:边界条件的处理在动态规划算法中,边界条件是指问题的最简单情况,用于终止递归过程并给出递归基。
边界条件的处理需要考虑问题的具体要求和实际情况,确保问题能够得到正确的解。
二、动态规划算法的应用技巧1. 应用技巧一:最长递增子序列最长递增子序列是一类经典的动态规划问题。
其求解思路是通过定义状态和建立状态转移方程,找到问题的最优解。
在应用最长递增子序列问题时,可以使用一维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
2. 应用技巧二:背包问题背包问题是另一类常见的动态规划问题。
其求解思路是通过定义状态和建立状态转移方程,将问题转化为子问题的最优解。
在应用背包问题时,可以使用二维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
3. 应用技巧三:最短路径问题最短路径问题是动态规划算法的经典应用之一。
其求解思路是通过定义状态和建立状态转移方程,利用动态规划的思想来求解最优解。
在应用最短路径问题时,可以使用二维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
动态规划及其在数学模型中的应用1动态规划的起源与发展动态规划是解决多阶段决策过程最优化的一种方法,大约产生于20世纪50年代。
1951年,美国数学家理查德?贝尔曼根据一类多阶段决策问题的特点,把多阶段决策问题表示为一系列单阶段问题,即把一个N—变量问题作为一系列的N个问题而逐个加以解决,提出了解决这类问题的“最优化原理”,并将其应用于很多实际问题的研究,从而建立了运筹学的一个分支-动态规划.1957年理查德?贝尔曼在美国普林斯顿大学发表了第一本正式的著作。
随后理查德?贝尔曼及其他科学工作者发表了一些列动态规划应用的著作,包括动态规划在最佳控制论、资源理论、工业工程、经济学、管理科学、变分法和马尔柯夫过程中的应用。
动态规划的发展始终伴随着它的广泛应用而不断臻善的。
2动态规划的优点与局限动态规划的核心思想是贝尔曼提出的最优化原理,这个原理导致了分阶段决策的方法。
分阶段决策的方法是建立在整体最优化的基础上的,在寻求某一阶段的决策时,不仅要考虑局部的利益,而且应考虑总体的最优。
动态规划通过将一个N维变量的复杂问题进行分阶段处理,把N维变量问题变成求解N个单变量问题,大大简化求解过程,节省巨大的计算量,这是经典的求解极值方法所做不到的。
动态规划几乎超越了所有现在的计算方法,特别是经典最优化方法,它能确定出绝对(全局)极大或极小,而不是相对(局部)的极值,使得我们不再需要关心伤脑筋的局部极大或极小问题。
动态规划的另一特点是泛函方程的“嵌入"特性。
动态规划方法求出的不仅是对整个过程的某一特定状态的一个解,而且也是对所有后部子过程的所有可能出现状态的一族解.动态规划方法的局限性表现有以下几个方面:第一,到目前为止,动态规划还没有一个统一的标准模型可供使用。
实际问题不同,其动态规划模型可能各异,虽然理论上说可以把其他数学规划问题化为动态规划模型求解,但是这种转化的过程对于复杂的数学规划问题将变得十分困难。
第四章动态规划§1 引言1.1 动态规划的发展及研究内容动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
20世纪50年代初R. E. Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—动态规划。
1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。
动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。
例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。
虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。
应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊算法(如线性规划是一种算法)。
因而,它不象线性规划那样有一个标准的数学表达式和明确定义的一组规则,而必须对具体问题进行具体分析处理。
因此,在学习时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的技巧去求解。
例1 最短路线问题下面是一个线路网,连线上的数字表示两点之间的距离(或费用)。
试寻求一条由A 到G距离最短(或费用最省)的路线。
例2 生产计划问题工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件)。
经调查,市场对该产品的需求量第一、二、三、四季度分别为2,3,2,4(千件)。
简述动态规划的最优性原理及应用1. 动态规划的最优性原理动态规划是一种求解最优化问题的方法,它通过将问题分解为更小的子问题,并通过保存中间结果来减少重复计算的次数。
1.1 最优子结构性质动态规划的最优性原理基于最优子结构性质。
最优子结构性质指的是一个问题的最优解包含其子问题的最优解。
当一个问题满足最优子结构性质时,我们可以用递归的方式将问题分解为更小的子问题,然后通过解决这些子问题来得到原问题的最优解。
1.2 重叠子问题性质动态规划的最优性原理还依赖于重叠子问题性质。
重叠子问题性质指的是在求解一个问题时,我们会多次遇到相同的子问题。
通过保存中间结果,我们可以避免对相同的子问题重复计算,从而提高算法的效率。
2. 动态规划的应用动态规划的最优性原理可以应用于解决各种不同的问题,包括最长公共子序列、背包问题、图的最短路径等。
2.1 最长公共子序列最长公共子序列问题是指在两个序列中找到一个最长的公共子序列,该子序列不需要在原序列中是连续的。
通过动态规划的最优性原理,我们可以将最长公共子序列问题分解为更小的子问题,然后通过求解这些子问题来得到原问题的最优解。
2.2 背包问题背包问题是指在给定的容量下,选择一些物品放入背包中,使得物品的总价值最大。
通过动态规划的最优性原理,我们可以将背包问题分解为更小的子问题,然后通过求解这些子问题来得到原问题的最优解。
2.3 图的最短路径图的最短路径问题是指在一个带有加权边的有向图中,找到从一个节点到另一个节点的最短路径。
通过动态规划的最优性原理,我们可以将图的最短路径问题分解为更小的子问题,然后通过求解这些子问题来得到原问题的最优解。
3. 动态规划的实现步骤使用动态规划求解问题的一般步骤如下:1.定义状态:明确问题所求解的状态是什么,一般用函数或数组表示。
2.确定状态转移方程:通过分析问题的最优子结构,构建状态转移方程,表示当前状态与前一个状态之间的关系。
3.初始化边界条件:根据问题的实际情况,初始化边界条件,来解决最小规模的子问题。
动态规划的特点及其应用目录(点击进入)§1动态规划的本质§1.1多阶段决策问题§1.2阶段与状态§1.3决策和策略§1.4最优化原理与无后效性§1.5最优指标函数和规划方程§2动态规划的设计与实现§2.1动态规划的多样性§2.2动态规划的模式性§2.3动态规划的技巧性§3动态规划与一些算法的比较§3.1动态规划与递推§3.2动态规划与搜索§3.3动态规划与网络流§4结语【附录:部分试题与源程序】1.“花店橱窗布置问题”试题2.“钉子与小球”试题3.例2“花店橱窗布置问题”方法1的源程序4.例2“花店橱窗布置问题”方法2的源程序5.例3“街道问题”的扩展6.例4“mod 4最优路径问题”的源程序7.例5“钉子与小球”的源程序8.例6的源程序,“N个人的街道问题”【参考文献】【摘要】动态规划是信息学竞赛中的常见算法,本文的主要内容就是分析它的特点。
文章的第一部分首先探究了动态规划的本质,因为动态规划的特点是由它的本质所决定的。
第二部分从动态规划的设计和实现这两个角度分析了动态规划的多样性、模式性、技巧性这三个特点。
第三部分将动态规划和递推、搜索、网络流这三个相关算法作了比较,从中探寻动态规划的一些更深层次的特点。
文章在分析动态规划的特点的同时,还根据这些特点分析了我们在解题中应该怎样利用这些特点,怎样运用动态规划。
这对我们的解题实践有一定的指导意义【正文】动态规划是编程解题的一种重要的手段,在如今的信息学竞赛中被应用得越来越普遍。
最近几年的信息学竞赛,不分大小,几乎每次都要考察到这方面的内容。
因此,如何更深入地了解动态规划,从而更为有效地运用这个解题的有力武器,是一个值得深入研究的问题。
要掌握动态规划的应用技巧,就要了解它的各方面的特点。
首要的,是要深入洞悉动态规划的本质。
§1动态规划的本质动态规划是在本世纪50年代初,为了解决一类多阶段决策问题而诞生的。
那么,什么样的问题被称作多阶段决策问题呢?§1.1多阶段决策问题说到多阶段决策问题,人们很容易举出下面这个例子。
[例1] 多段图中的最短路径问题:在下图中找出从A 1到D 1的最短路径。
7 43 867 54 65A1 B 1B2 C 1 C 2 C3 D 1仔细观察这个图不难发现,它有一个特点。
我们将图中的点分为四类(图中的A、B、C、D),那么图中所有的边都处于相邻的两类点之间,并且都从前一类点指向后一类点。
这样,图中的边就被分成了三类(A→B、B→C、C→D)。
我们需要从每一类中选出一条边来,组成从A1到D1的一条路径,并且这条路径是所有这样的路径中的最短者。
从上面的这个例子中,我们可以大概地了解到什么是多阶段决策问题。
更精确的定义如下:多阶段决策过程,是指这样的一类特殊的活动过程,问题可以按时间顺序分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列[1]。
要使整个活动的总体效果达到最优的问题,称为多阶段决策问题。
从上述的定义中,我们可以明显地看出,这类问题有两个要素。
一个是阶段,一个是决策。
§1.2阶段与状态阶段:将所给问题的过程,按时间或空间特征分解成若干相互联系的阶段,以便按次序去求每阶段的解。
常用字母k表示阶段变量。
[1]阶段是问题的属性。
多阶段决策问题中通常存在着若干个阶段,如上面的例子,就有A、B、C、D这四个阶段。
在一般情况下,阶段是和时间有关的;但是在很多问题(我的感觉,特别是信息学问题)中,阶段和时间是无关的。
从阶段的定义中,可以看出阶段的两个特点,一是“相互联系”,二是“次序”。
阶段之间是怎样相互联系的?就是通过状态和状态转移。
状态:各阶段开始时的客观条件叫做状态。
描述各阶段状态的变量称为状态变量,常用s k表示第k阶段的状态变量,状态变量s k的取值集合称为状态集合,用S k表示。
[1]状态是阶段的属性。
每个阶段通常包含若干个状态,用以描述问题发展到这个阶段时所处在的一种客观情况。
在上面的例子中,行人从出发点A1走过两个阶段之后,可能出现的情况有三种,即处于C1、C2或C3点。
那么第三个阶段就有三个状态S3={C1,C2,C3}。
每个阶段的状态都是由以前阶段的状态以某种方式“变化”而来,这种“变化”称为状态转移(暂不定义)。
上例中C3点可以从B1点过来,也可以从B2点过来,从阶段2的B1或B2状态走到阶段3的C3状态就是状态转移。
状态转移是导出状态的途径,也是联系各阶段的途径。
说到这里,可以提出应用动态规划的一个重要条件。
那就是将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的发展,而只能通过当前的这个状态。
换句话说,每个状态都是“过去历史的一个完整总结[1]”。
这就是无后效性。
对这个性质,下文还将会有解释。
§1.3决策和策略上面的阶段与状态只是多阶段决策问题的一个方面的要素,下面是另一个方面的要素——决策。
决策:当各段的状态取定以后,就可以做出不同的决定,从而确定下一阶段的状态,这种决定称为决策。
表示决策的变量,称为决策变量,常用u k(s k)表示第k阶段当状态为s k时的决策变量。
在实际问题中,决策变量的取值往往限制在一定范围内,我们称此范围为允许决策集合。
常用D k(s k)表示第k阶段从状态s k出发的允许决策集合。
显然有u k(s k) D k(s k)。
[1]决策是问题的解的属性。
决策的目的就是“确定下一阶段的状态”,还是回到上例,从阶段2的B1状态出发有三条路,也就是三个决策,分别导向阶段3的C1、C2、C3三个状态,即D2(B1)={C1,C2,C3}。
有了决策,我们可以定义状态转移:动态规划中本阶段的状态往往是上一阶段和上一阶段的决策结果,由第k段的状态s k和本阶段的决策u k确定第k+1段的状态s k+1的过程叫状态转移。
状态转移规律的形式化表示s k+1=T k(s k,u k)称为状态转移方程。
这样看来,似乎决策和状态转移有着某种联系。
我的理解,状态转移是决策的目的,决策是状态转移的途径。
各段决策确定后,整个问题的决策序列就构成一个策略,用p1,n={u1(s1),u2(s2),…, u n(s n)}表示。
对每个实际问题,可供选择的策略有一定范围,称为允许策略集合,记作P1,n,使整个问题达到最有效果的策略就是最优策略。
[1]说到这里,又可以提出运用动态规划的一个前提。
即这个过程的最优策略应具有这样的性质:无论初始状态及初始决策如何,对于先前决策所形成的状态而言,其以后的所有决策应构成最优策略[1]。
这就是最优化原理。
简言之,就是“最优策略的子策略也是最优策略”。
§1.4最优化原理与无后效性这里,我把最优化原理定位在“运用动态规划的前提”。
这是因为,是否符合最优化原理是一个问题的本质特征。
对于不满足最优化原理的一个多阶段决策问题,整体上的最优策略p1,n同任何一个阶段k上的决策u k或任何一组阶段k1…k2上的子策略p k1,k2都不存在任何关系。
如果要对这样的问题动态规划的话,我们从一开始所作的划分阶段等努力都将是徒劳的。
而我把无后效性定位在“应用动态规划的条件”,是因为动态规划是按次序去求每阶段的解,如果一个问题有后效性,那么这样的次序便是不合理的。
但是,我们可以通过重新划分阶段,重新选定状态,或者增加状态变量的个数等手段,来是问题满足无后效性这个条件。
说到底,还是要确定一个“序”。
在信息学的多阶段决策问题中,绝大部分都是能够满足最优化原理的,但它们往往会在后效性这一点上来设置障碍。
所以在解题过程中,我们会特别关心“序”。
对于有序的问题,就会考虑到动态规划;对于无序的问题,也会想方设法来使其有序。
§1.5最优指标函数和规划方程最优指标函数:用于衡量所选定策略优劣的数量指标称为指标函数,最优指标函数记为f k(s k),它表示从第k段状态s k采用最优策略p*k,n到过程终止时的最佳效益值[1]。
最优指标函数其实就是我们真正关心的问题的解。
在上面的例子中,f 2(B 1)就表示从B 1点到终点D 1点的最短路径长度。
我们求解的最终目标就是f 1(A 1)。
最优指标函数的求法一般是一个从目标状态出发的递推公式,称为规划方程: ()()k k k k k s D u k k u u s T f g s f k k k ,),(opt)(1)(+∈=其中s k 是第k 段的某个状态,u k 是从s k 出发的允许决策集合D k (s k )中的一个决策,T k (s k ,u k )是由s k 和u k 所导出的第k+1段的某个状态s k+1,g(x,u k )是定义在数值x 和决策u k 上的一个函数,而函数opt 表示最优化,根据具体问题分别表为max 或min 。
某个初始值=)(n n s f ,称为边界条件。
上例中的规划方程就是:()的长度边指向的点出发的某条边从k k k k u s k k u s u f s f k k +=++)(min)(11边界条件为0)(14=D f这里是一种从目标状态往回推的逆序求法,适用于目标状态确定的问题。
在我们的信息学问题中,也有很多有着确定的初始状态。
当然,对于初始状态确定的问题,我们也可以采用从初始状态出发往前推的顺序求法。
事实上,这种方法对我们来说要更为直观、更易设计一些,从而更多地出现在我们的解题过程中。
我们本节所讨论的这些理论虽然不是本文的主旨,但是却对下面要说的动态规划的特点起着基础性的作用。
§2动态规划的设计与实现上面我们讨论了动态规划的一些理论,本节我们将通过几个例子中,动态规划的设计与实现,来了解动态规划的一些特点。
§2.1动态规划的多样性[例2] 花店橱窗布置问题(IOI99)试题见附录本题虽然是本届IOI 中较为简单的一题,但其中大有文章可作。
说它简单,是因为它有序,因此我们一眼便可看出这题应该用动态规划来解决。
但是,如何动态规划呢?如何划分阶段,又如何选择状态呢?<方法1>以花束的数目来划分阶段。
在这里,阶段变量k 表示的就是要布置的花束数目(前k 束花),状态变量s k 表示第k 束花所在的花瓶。
而对于每一个状态s k ,决策就是第k-1束花应该放在哪个花瓶,用u k 表示。
最优指标函数f k (s k )表示前k 束花,其中第k 束插在第s k 个花瓶中,所能取得的最大美学值。
状态转移方程为 k k u s =-1规划方程为 ()),()(max )(1k k k s u k k k s k A u f s f kk +=-<≤(其中A(i,j)是花束i 插在花瓶j 中的美学值)边界条件)0(0)(000V s s f ≤≤= (V 是花瓶总数,事实上这是一个虚拟的边界) <方法2>以花瓶的数目来划分阶段。