7 动态规划的基本思想和框架

在强化学习中,动态规划(Dynamic Programming, DP)是解决优化问题的重要方法。它为我们提供了一种系统的方法来处理具有阶段性决策的问题。在上一篇文章中,我们介绍了马尔可夫决策过程(MDP)中的折扣因子和价值函数,这些概念是理解动态规划的基础。在本篇中,我们将探讨动态规划的基本思想和框架,为后续的值迭代算法奠定基础。

动态规划的基本思想

动态规划的核心思想是“递归分解”。针对某个复杂问题,动态规划将其划分为多个子问题,解决这些子问题后再合并结果,从而获得原问题的解。这种方法特别适用于具有重叠子问题和最优子结构性质的问题。

  • 重叠子问题:子问题多次出现,通过保存已经解决的子问题的结果,可以避免重复计算,提高效率。
  • 最优子结构:一个问题的最优解包含了其子问题的最优解。

动态规划主要用于寻找在某种意义上最优的解决方案,通常涉及用了某种评价标准来进行优化,比如最小化成本,最大化收益等。

案例分析:最短路径问题

考虑一个简单的最短路径问题,假设我们有一个加权有向图,其中每个边都有一个非负的权重。我们的目标是找到从起点到终点的最短路径。

  1. 子问题定义:设cost(s, t)为从节点s到节点t的最短路径成本。对于每一个节点s,我们需要计算cost(s, t)

  2. 递归关系:对于节点st的路径,如果我们中途选择经过节点u,那么可以表示为:
    $$
    cost(s, t) = \min_u (cost(s, u) + cost(u, t))
    $$
    这个式子表明,从st的最短路径成本是通过某个中间节点u的路径成本的最小值。

  3. 边界条件:若cost(s, s) = 0(从一个点到自身不需要成本),如果节点之间没有连接,则cost(s, t) = \infty

动态规划的框架

在解决动态规划问题时,我们通常遵循以下步骤:

  1. 定义问题:明确需要解决的问题以及目标。
  2. 划分子问题:将原问题分解为多个更小的子问题。
  3. 建立递推关系:找出子问题之间的关系,通常使用递归公式。
  4. 计算顺序:根据递推关系,以合适的顺序计算所有子问题的解,确保每个子问题在需要使用之前都已解决。
  5. 构造最终解:根据子问题的结果构造出原问题的解。

动态规划的实现

以下是用 Python 实现的一个简化的动态规划算法,通过实例找出从起点到终点的最短路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import numpy as np

def shortest_path(graph, start, end):
num_nodes = len(graph)
# 初始化成本矩阵
cost = np.full((num_nodes, num_nodes), np.inf)

# 从自身到自身的成本为0
for i in range(num_nodes):
cost[i][i] = 0

# 填充邻接矩阵
for u in range(num_nodes):
for v, weight in graph[u].items():
cost[u][v] = weight

# 动态规划计算最短路径成本
for k in range(num_nodes):
for i in range(num_nodes):
for j in range(num_nodes):
# 更新成本
if cost[i][j] > cost[i][k] + cost[k][j]:
cost[i][j] = cost[i][k] + cost[k][j]

# 返回从 start 到 end 的最短路径
return cost[start][end]

# 示例图:邻接矩阵表示
# graph[u] = {v: weight} 表示从 u 到 v 的边权重
graph = [
{1: 1, 2: 4},
{2: 2, 3: 6},
{3: 1},
{}
]

start_node = 0
end_node = 3
result = shortest_path(graph, start_node, end_node)
print(f"从节点 {start_node} 到节点 {end_node} 的最短路径成本是: {result}")

小结

动态规划为解决复杂的优化问题提供了一种有效的方法。通过系统地分解问题,建立递推关系,我们能够在合理的时间内找到最优解。接下来,我们将介绍动态规划中特别重要的一个算法——值迭代算法,它在基于动态规划的学习中起着重要作用。

如果你对动态规划的基本思想和框架有更深入的理解,将为后续学习值迭代算法做好准备。

7 动态规划的基本思想和框架

https://zglg.work/reinforcement-learning-zero/7/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论