1. 什么是动态规划
其实你可以这么去想。
能用动态规划解决的问题,肯定能用搜索解决。但是搜素时间复杂度太高了,怎么优化呢?
可能你想到了记忆化搜索(记忆化搜索是动态规划的一种实现方法:就是搜完某个解之后把它保存起来,下一次搜到这个地方的时候,调用上一次的搜索出来的结果,这样就解决了处理重复状态的问题)
优点:动态规划之所以速度快是因为解决了重复处理某个状态的问题
搜索到状态:
1) 首先确定要解决i首先要解决什么状态
2) 那么那些状态必然可以转移给i状态
3) 于是你就确定了状态转移方程
4) 然后你需要确定边界条件,将边界条件赋予初值
5) 此时就可以从前往后枚举状态进行状态转移拉
2. 经典问题集合
1) 这种把一个问题看做是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策最优化问题
最短路径问题(如图1所示:
//Todo: http://wenku.baidu.com/view/0f407401bed5b9f3f90f1c5e.html中的最短路径截图
逆推题目:从目的地开始反推最短路线,将每一层目的地进行连线划分
E -> D -> C -.> B -> A分为4层进行决策,每一层的决定都会直接影响下一层的判断,并将当前层的结果进行保存,因此不用进行反复的计算,以便达到最优解.
由上可知,动态规划的基本模型如下:
a. 确定问题的决策对象
b. 对决策过程划分阶段
c. 对各状态确定状态变量d. 根据状态变量确定费用函数和目标函数
e. 建立各阶段状态变量的转移过程,确定状态转义方程
3. 动态规划的原型
1) 状态(smte):对于一个问题,所有能够到达的情况(包括初始情况和目标情况)都称为这个问题的一个状态
2) 状态变量(Sk):对于每一个状态K都有一个变量Sk便是状态k所对应的问题的当前解值
3) 决策(decision):是一种选择,从每一个状态到下一个状态的一条路线或方法,从而到达下一个状态
4) 决策变量(Dk):表示在状态k当前所做出的决策
5) 策略:策略是一组决策的集合,在我们解决一个问题的时候,将一系列决策记录下来,就是一个策略,其中满足最优条件的称之为最优策略
6) 状态转移函数(t):从一个状态到另一个状态,可以依据一定的规则来前进,用一个函数t代表这个规则,从状态i和决策变量di映射到另一个状态j,记录为t(i,di) = j
7) 状态转移方程(f):描述了状态变量之间的数学关系,一般来说,与最优化问题相应的状态转移表示si值最优化的条件,或者是状态i所对应的问题的最优解值的计算公式
si=f({(sj,dj)|i=t(j,dj),对决策变量dj所有可行的取值})
4. 最优化原理
对一个发展的问题,引入"时间"的概念进行将问题分段,将问题分成若干阶段(D1,D2,D3,,,Dk,,Dn),对于最优的策略而言,每一个状态都是最优的,即(D1,D2,D3,,Dn)中每一 个阶段的解都是最优的.因此d1+d2+d3+d4+d5+.....的解才是最优的.