动态规划初探
为了解决多阶段决策问题,我们可以使用穷举法和动态规划方法。
但是当决策和阶段数量达到一定程度后,穷举法带来的庞大计算量极大的降低了我们解决该类问题的效率。为了避免穷举法带来的庞大计算量,于是我们引入了动态规划方法去解决该类问题。
首先,我们需要了解什么是多阶段决策问题。这不难理解,这里我举个简单的例子来解释。我们常见的该类问题有图求最短路径问题和背包问题。这里我用求最短路径问题来举例。
这是一张带权的无向图,我们需要从A点出发到D点,求权值和最小路径。这是一个典型的多阶段决策问题。当然,该图并不复杂,我们可以穷举出它的解路径为A—>B1—>C2—>D。A—>B为阶段,选择最小权值即为决策。
当然,我们还可以用动态规划方法中的逆序递推的方法来求解。
了解了多阶段决策问题,我们知道需要建立动态规划模型去解决该类问题,在这之前我们需要了解动态规划的基本概念和基本原理。
要了解基本概念我们可以从动态规划模型入手,一个多阶段决策问题的动态规划模型通常包含有以下要素:
- 阶段:处理一个问题需要用到动态规划方法时我们需要合理地将该问题划分为若干个相互联系的阶段。
- 状态:一个阶段开始时过程所属的自然情况或客观条件。比如,在以上例子中B—>C阶段的初始状态集为{B1 , B2}。
- 决策:决策就是在初始状态确定的条件下,从该状态演变到下一阶段某一状态的选择。
- 策略:策略是由每个阶段决策组成的变量序列。
- 状态转移方程:决策过程中需要把决策转换为状态转移方程,使决策更具有普适性,方便于递推求解。当然,该多阶段决策过程必须具有无后效性(马尔可夫性)。
- 指标函数:也称为值函数,用来衡量多决策阶段中每一个阶段决策的效果。
如何建立动态规划模型?
这是个关键问题,这里我给出的步骤如下;
- 根据时间或空间的自然特征,把问题恰当的划分为若干个阶段,使问题能够转化为一个多阶段决策问题(有一些应用问题本身是与时间因素无关的静态规划问题,但我们可以人为的引入“时间变量”将其转化为动态规划问题)。
- 正确选择状态变量,确定状态集合。(选择标准:能够描述过程的演变特征,满足无后效性及各个阶段状态变量值可以间接或直接获取。)
- 确定决策变量及被允许的决策集合。
- 确定正确的状态转移方程。
- 正确的写出指标函数。
- 确定基本方程,即最优值函数满足递推方程及端点条件。
- 逆序递推求解。
注:本文只是对动态规划的基本原理和建立模型的基本步骤进行归纳整合,如果想看一些例子加深理解。连接————————————————————————》
https://blog.csdn.net/baidu_28312631/article/details/47418773
另外,想练练手的话推荐Leetcode题库第174题与887题。