动态规划之基本概念

来源:互联网 发布:php表单提交数据过滤 编辑:程序博客网 时间:2024/06/05 07:07

怀念曾经

曾经大学学过的数学当中,最喜欢的就是高等数学和运筹学,不仅仅和自己兴趣有关,也和老师的敬业、以及负责性有关。运筹学,本就以实际例子为例讲解,模型设计极为巧妙,优化方法非常有趣,并且叫我们运筹学的老师年轻漂亮,教学效果还很好。所以虽然这么久了。我依然还记得很多里面的内容。由于最近工作碰到几个算法,属于道路优化相关,设计到了运筹学的一些知识,于是又花时间将将运筹学给看了一遍,突然发现运筹学博大精深,不仅仅在计算机中,在控制论,经济学,以及整个人生都存在,多年后再看运筹学,已经不是以前的只为考试了,慢慢体会到运筹学中动态规划的意义了,本文大多属于书上的内容,这里算是做做笔记把。

是一种方法而不是算法

动态规划的方法,动态规划作为一种数学方法,是解决某类问题的一种途径,是一种思维,而非特定的某种算法,不能像快排,线性规划一样,有具体的规则,本篇文章主要介绍动态规划的相关理念和方法。

引出问题-线路网络问题

在这个方法之前,先引出一个问题,下图是一个线路网络,两点之间的连线代表两点间的距离,试求一条从A到G的道路,使总距离为最短
运筹学最短路径

最原始的解决方法:穷举法

即把从A到G的所有路线都列出来,然后相互之间找出最短的路线。这样,从A到G,一共有2 * 3 * 2 * 2 * 2 * 1 = 48 条不同的路线, 这样需要进行比较47次(最后一次不需要比较),在计算距离的时候,需要计算多少次加法呢,总共需要计算6 + 12 + 24 +48 +48 = 138 次加法运算, 这个数是怎么算的呢, 如果稍微敏感点的都应该知道了,如果你知道或者相信这就是138次加法运算,就跳过下面几个阶段的描述
A到B阶段: 有两种情况,A->B1或者A->B2, 这一次计算距离不需要使用加法。
B到C时阶段: B1到C有3情况种,这时候都要和A到B1的数值5相加, B2到C也有三种情况,也要和A到B2的数值3相加,所以, B到C,需要计算2*3=6次加法。 也可以这样理解,A到B总共有两条路线,B发出有三条路线,那么B到C 有2 * 3 =6 个加法。
C到D阶段:因为从A到C总共有2 * 3=6 条路线,每条路线发出2条到D1, 那么总共有 6 * 2=12条方法。
D到E,E到F,F到G就不累赘了

这里先记住这道题的这个结论,这道题使用穷举法,需要把这48条路都给比较一次,总共需要比较47次,并且计算出这48条路每条路的距离,需要计算138次加法运算

概念原理原理->例子

我学习大多数知识(什么算法,大数据,hadoop,spark,微积分,机器学习等等等等)都有个习惯,一般都是先看原理,再看解决问题的例子,最后再倒过来看原理。 第一次看原理的时候,可能是看不懂的,这时候没关系,直接看案例,最后搞懂案例,再回过来思考原理,然后站在一个较高的的位置再看例子。我还是以根据这种方法 我们先来看一下原理

动态规划的基本概念

1. 阶段
把所给问题的过程, 恰当地分为若干个相互联的阶段, 以便能按一定的次序去求解。描述阶段的变量称为阶段变量 , 常用 k 表示,如上面那一个题目,可分为6个阶段来求解 , k分别等于 1、2、3、4、5、6。
动态规划阶段

2. 状态
状态表示每个阶段开始所处的自然状况或客观条件(可能太深奥无法理解,可以暂时不去思考这句话),通常一个阶段有若干个状态, 第一阶段有一个状态就是点A,第二阶段有两个状态, 即点集合{B1, B2} , 一般第 k 阶段的状态就是第 k 阶段所有始点的集合
描述过程状态的变量称为状态变量。 它可用一个数、一组数或一向量(多维情形)来
描述。 常用 Sk 表示第 k 阶段的状态变量
如在上个例子第三阶段有四个状态 , 则状态变量 Sk 可取四个值, 即 C1、C2、C3、C4 。点集合{C1, C2, C3, C4 }就称 为第三阶段的 可达状态集合, 也可以叫做某阶段的状态集合
有时候为了方便,直接记做 S3 = {1 ,2 ,3 ,4}。 第 k 阶段的可达状态集合就记为Sk

这里所说的状态应具有下面的性质 : 如果某阶段状态给定后 , 则在这阶段以后过程的
发展不受这阶段以前各段状态的影响,这个性质称为无后效性

还是上面那个例子,如果说确定了从A到G要经过D2, 那么1 2 3 阶段无论是怎么样的,456阶段都没有影响。

3. 决策
决策表示当过程处于某一阶段的某个状态时 , 可以作出不同的决定( 或选择) , 从而确
定下一阶段的状态 , 这种决定称为决策
常用

uk(sk)

表示第k阶段当状态
处于 sk 时的决策变量。 它是状态变量的函数, 某一个状态,其决策时有限的,我们某个限制下的所有决策放在集合中,称这个集合为允许决策集合

uk(sk)εDk(Sk)

4. 策略
决策排好顺序,比如第一阶段的一个决策,第二阶段的一个决策,第三阶段的一个决策,一个一个的排好顺序,就叫做策略,所以,策略是一个按顺序排列的决策组成的集合,由过程的第 k 阶段开始到终止状态为止的过程 , 称为问题的后部子过程,记做

pk,n(sk)={uk(sk),uk+1(sk+1),...un(sn)}

当 k = 1 时 , 此决策函数序列称为全过程的一个策略, 简称策略,记为

p1,n(sk)={u1(s1),u2(s2),...un(sn)}

在实际问题中 , 可供选择的策略有一定的范围 , 此范围称为允许策略集, 用P表
示。 从允许策略集合中找出达到最优效果的策略称为最优策略

5. 状态转移方程
这一点非常重要,一定要理解:
所谓的状态转移方程,就是从一个状态到另外一个状态的一种转移规律,可以这样理解,一个状态,经过一定的变化,到达下一个状态,这个变化的函数,为状态转移函数,这个转移的规律,就是状态转移方程


sk+1=Tk(sk,uk)

上述方程可以理解为, sk,这个sk阶段的决策变量uk已经确定,那么下一个状态s(k+1)也已经确定.

6. 指标函数和最优值函数
就是每段过程中,我们想要的最优化的结果,例如上面那个问题,我们想要的结果是A到G的总路线最短,最优函数就是各个阶段指标之和

线路网络例子

再再次把问题列一下: 求A到G的最短路线
运筹学最短路径

先说一个重要特性,这是解决这一问题最重要的一个特性

==如果由起点A经过P点和H点而到达终点G是一条
最短路线 , 则由点P出发经过H点到达终点G的这条子路线,对于从点P出发到达终点
的所有可能选择的不同路线来说, 必定也是最短路线==
例如 例如, 在最短路线问题中, 若找到了 A→ B1 → C2 → D1 → E2 → F2 → G 是由A到G的最短路线 , 则 E2 → F2 → G 应该是 由
E2 出发到 G 点的所有可能选择的不同路线中的 最短路线。这个仔细想想就能想通了,如果要证明,就要用反证法了,例如E2到G有另外一个路线,更加快,那么原来的路线到E2,再经过这条路线才能是最短的,然而这样与原来的路线是最短路线矛盾。

根据最短路线这一特性, 寻找最短路线的方法, 就是从最后一段开始, 用由后向前逐步 递推的方法, 求出各点到G点的最短路线,最后求得由A点到G点的最短路线,所以,动态规
划的方法是从终点逐段向始点方向寻找最短路线的一种方法。

下面是解题思路

动态规划解题1
动态规划解题2
动态规划解题3

动态规划的基本方程

动态规划基本方程

动态规划和穷举法对比的优点

  1. 减少了计算量,还是以这道题为例子,穷举法(计算机中一般采用递归)要比较47次,加法计算138次,而动态规划方法,只需要进行3+3+4+4+1=15次比较,每次比较有两次加法,实际只有28次运算。如果阶段更多,这种减少的效果会更明显。
  2. 丰富了计算结果。在逆序排序中,我们得到了所有点出发到G点的距离,这在很多实际分析中将十分有用

如果建立动态规划模型

  1. 将问题的过程分成恰当的阶段,正确选择状态变量SK。
  2. 正确选择状态变量 sk , 使它既能描述过程的演变 , 又要满足无后效性。
  3. 确定决策变量 uk 及每阶段的允许决策集合 D k ( sk )。
  4. 正确写出状态转移方程。
  5. 正确写出指标函数 V k, n 的关系

未来,将继续介绍动态规划的另外几个例子,来自运筹学中的排序问题,背包问题,货郎担问题,算法导论中的钢条分割,最长公共子序列,以及图论中的一些问题等

参考资料:运筹学第三版(胡运权)  清华大学出版社马尔科夫决策规划-1981-董泽清算法导论第三版
原创粉丝点击