您的位置:首页 > 其它

经典算法设计:动态规划(1)

2015-12-18 20:01 176 查看
1引言

动态规划是解决多阶段决策问题的一种数学方法。多阶段决策问题就是对系统运行过程中若干相关阶段的每一阶段都要作出决策并使整个过程过到最优。阶段既可按时间来划分,也可以按空间或其他特征来划分,且各阶段是相互联系影响的,某一阶段即为一下阶段的初始状态。解决动态规划问题的方法就是按照最优性原理把问题归结为一组递推关系式,依次递推从而找到问题的最优解。

2 动态规划的基本原理

1)最优性原理

表述1:一个最优策具有这样的性质:不论初始状态及初始决策如何,对于该决策所造成的某一状态而言,其余的所有的决策必然构成一个最优策略。

表述2:假设对任意时刻t,不论过程在时刻t以前的历史状态如何,若按时刻t的状态而言,过程今后的行为是最优的,而整个过程的行为也必是最优的。

2) 概念

状态:一个系统有若干个状态,用以描述问题发展到这个阶段时所处在的一种客观情况

决策:每个状态下若干合法的操作为所采取的决策,决策会改变系统的状态,决策会带来收益或费用,收益只取决于当前状态和决策(不是马尔可夫)

阶段:将整个系统过程恰当地分为若干个相互联系的阶段,每个阶段选择一些决策会改变系统的状态

策略:全过程各个阶段一个决策序列称为一个策略

目标:系统达到终止状态时总收益最大(费用最小),总收益一般即为各个阶段收益的总和

3 动态规划问题的特点

1)最优子结构

母问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构。也就是说,子问题最优时,母问题通过优化一定能求得最优解

2)子问题重叠

子问题本质上是和母问题一样的,只是问题的输入参数不一样,就可以称之为子问题重叠,这是动态规划解决问题的高效的本质所在,我们可以利用很多子问题具有相同的输入参数这一个性质,来减少计算量。

在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解。

3)问题存在边界

子问题在一定情况下就不存在子问题了, 我们称这种情况为问题存在边界,对于自顶向上和自底向下的方法,边界分别是问题的出口和入口。

4)子问题相互独立

每个子问题在求解最优解时事相互独立的,即本自问题的求解和其他平行子问题是不相干的。当平行子问题解决后,选择权交给母问题时,它才会考虑各子问题之间的关系,是求最大值还是最小值,还是要做相关的运算得到母问题的最优解。

5)无后效性

如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也就确定了。即只能通过当前的状态去影响它的未来的发展.

4 解决动态规划问题的步骤

(1)确定状态集合和收益

(2)确定初始状态和终止状态

(3)确定决策集合

(4)是否满足无后效性

(5)确定收益的表示

例:旅行商问题(TSP),也称货郎担问题或旅行推销员问题, 是运筹学中的一个著名问题,其一般提法是:有一个旅行商从城市1出发,需要到城市2、3、.........、n推销货物,经过所有的城市且仅仅只有一次最后返回城市1,若任意两个城市间的距离已知,则旅行商如何选择路线使行走的路程最短?

(1)确定状态

S表示所经过的城市集合,X表示最后所在的城市,且X属于S,(S,X)表示状态,f(S,X)表示状态的收益,即经过集合S中的城市最终停留在城市X所经过的最小路程

(2)确定初始状态和终止状态

初始状态 f({1},1)=0, 终止状态f({1,2,3,...,n},1}=?

(3)确定决策

在状态(S,X)找到一个不在集合S中的城市Y,从X走到Y,则f(S,X)+dis(X,Y)是一个经过集合XUY中所有城市的路程。

(4)无后效性

收益只取决于当前状态(S,X)和决策量Y。

(5)收益表示

f(S,Y)=min{f(S-Y,X)}+dis(X,Y),S-Y表示从城市集合S中去掉城市Y,城市X在中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: