运筹学状态转移方程例子_【运筹学学习笔记】直观理解动态规划:树剪枝、图遍历、基本概念和基本方程...

本文从暴力搜索树的剪枝和有向无环图的遍历角度探讨动态规划,阐述动态规划的基本概念、状态转移方程,并提供直观理解。通过实例分析了两种不同的暴力搜索策略,并指出动态规划可以视为有向无环图的广度优先遍历过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言:暴力搜索树的剪枝和有向无环图的遍历

动态规划的建模和求解过程,可以看成是暴力搜索树的剪枝过程;也可以看成是以状态为节点,以决策为边构成的有向无环图的广度优先遍历。

本专栏之前的一篇文章[1]通过决策树剪枝的视角理解动态规划,把动态规划看成是对暴力搜索得到的决策树(更确切地说,是DAG图)的剪枝过程。最近看到了 @阮行止 大佬的一个回答[2],在这里换一个视角讨论一下。

本节的核心思想就是下面这句话:

如果想不明白一个问题应该怎么用动态规划,可以先尝试从暴力搜索入手。

先看 @阮行止 大佬文章中的例子,

如何用1、5、11元面值的钞票,凑出15元,使得用到的钞票尽可能少。

在这里,大佬并没有展开讲暴力搜索,但是我觉得这里怎么做暴力搜索也是一个很有意思的问题。

针对这个问题,如果要做暴力搜索的话,主要有两个搜索的思路:

(1)每次用一张钞票,决策是这张钞票的面额是多少。

e8f8d5f38371ee2c3376c1fd00d2dcdc.png

(2)每次用一种钞票,决定用多少张这种钞票。

a6de16f75f7bb1773a3bb07aedbd7a26.png

这两种暴力搜索方式的区别在于,第一种暴力搜索方式会形成一个深度不确定的搜索树,目标函数是找出层数最少的叶子节点;第二种暴力搜索过程形成的搜索树的深度是确定的,目标函数是使

最小。

值得注意的是,两种搜索树的叶子节点一定为15,根节点一定为0。

下面,从叶子结点开始自底向上对暴力搜索树进行剪枝,以第二种暴力搜索树为例。

第三层:

1ea3897499b5022fe569aa9309f7afd2.png

第二层,可以通过剪枝得到从第二层的状态0到第三层的状态15的“最优分支”:

59a2de696742bf502d10b629e68f134d.png

那么,为什么不倾向于选择第一种搜索方式呢?因为第一种搜索方式的指标函数

不是状态
和决策变量
的函数,不便于剪枝。

07ccb7f4af5690d7e2a384ee95e55549.png

针对以上讨论的一个搜索树,将相同阶段相同状态的节点合并,可以得到一个有向无环图。所以,动态规划也可以看成有向无环图从后向前做广度优先遍历的过程。

同样,最短路径问题是一个天然的有向无环图,逆推计算的过程就相当于从后向前做广度优先遍历的过程,每一步求

的过程相当于“剪掉”了状态
的非最优决策,仅保留最优的

从搜索树的角度理解动态规划的基本概念

阶段:恰当分层

(1)相当于树的第几层。

(2)为了便于剪枝,阶段总数(或者说树的深度)最好是固定的。

状态:全部信息、无后效性

(1)每个阶段开始的状况。

(2)状态的无后效性:类比一系列基于递归方法的树的操作,例如先序遍历:对于每层递归,我们必须保证向下一层传递的参数保存了全部需要的信息。这些“全部需要的信息”就是状态

(3)状态相当于树中的节点。

决策:允许决策集合

(1)决策变量是状态变量的函数

(2)决策变量的取值有一个范围的限制(允许决策集合)。

(3)每个决策相当于树的一个分枝。

策略:到叶子节点的路径

由一系列决策构成,理论上不包括状态。但是在确定性动态规划中,

唯一确定,因此策略可以粗略地看成
从根节点到叶子节点的一条路径

状态转移方程

决定了从上一层的节点

经过分支
到达的下一层的节点是什么样的。

指标函数:路径的函数、可分离性、单调性

指标函数

从当前节点到叶子节点的路径的函数是当期状态
和决策
,以及之后路径上的全部状态和决策共同决定的。

df06c5bd21134d40d1ae43400640981c.png

在这里特别提一下,指标函数在Introduction to Operations Research[3]里是用

表示的,特别容易和最优值函数搞混。以下采用
《运筹学(第4版)》[4]的表示方式,用
表示。

最优值函数

最优值函数

仅与当前状态
有关,每个节点有一个最优值函数。

当前状态

的最优值函数
是遍历了全部可能的
(即在决策变量的取值范围,允许决策集合,之内进行遍历),取最优的
得到的。

动态规划的基本方程的推导

指标函数具有单调性,现实中的指标函数大多数是每个阶段的指标的和或乘积。下面以加和为例,推导动态规划的基本方程。

f2941a72170ec0b2000d4e033bb89672.png

动态规划基本方程的直观理解

如下图所示,在搜索树中,每个节点有两个属性:状态

和最优值
。其中,状态由前一层的状态和决策共同决定(有点像前向计算);最优值由决策和后一层的最优值共同决定(有点像反向传播)。

边界条件就是叶子节点的最优值

,由于叶子节点没有后一层,因此其最优值是根据具体问题人为设定的。

59b696e0ce3a19a863b63700753b1474.png

参考

  1. ^https://zhuanlan.zhihu.com/p/82452868
  2. ^https://www.zhihu.com/question/23995189/answer/613096905
  3. ^Introduction to Operations Research
  4. ^《运筹学(第4版)》清华大学出版社
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值