一:简介
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划的基础是最优化原理。
最优化原理:“一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”。简言之,一个最优策略的子策略,对于它的初态和终态而言也必是最优的。
数学描述:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的。
动态规划求解的问题需要满足以下条件:
1.问题中的状态必须满足最优化原理
2.问题中的状态必须满足无后效性,即下一时刻的状态只与当前状态有关,而和当前状态之前的状态无关,当前的状态是对以往决策的总结
动态规划决策过程:
1.划分阶段:按照问题的时间或空间特征,把问题分为若干各阶段。在划分阶段时,注意划分后的阶段以顶要是有序的或者是可排序的,否则问题就无法求解。
2.确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。
3.确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来到处本来阶段的状态,所以如果确定了决策,状态转移方程也就可以写出。但事实上常常是反过来做,根据相邻两段状态直接的关系来确定决策。
4.寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。
二:例题
1.数字三角形。
https://blog.csdn.net/vestlee/article/details/80386954
2.最小路径和
https://blog.csdn.net/vestlee/article/details/80489560
3.背包问题