动态规划基础

263 阅读3分钟

本文主要参考《运筹学教程》,如有不足望指正

1、动态规划是什么

在学习动态规划之前,需要了解什么是多阶段决策过程

  • 多阶段过程:多阶段决策过程,本意是指这样一类特殊的活动过程,它们可以按时间顺序分解成若干相互联系的阶段,称为“时段”,在每一个时段都要做出决策,全部过程的决策形成一个决策序列,所以多阶段决策问题属序贯决策问题。多阶段决策过程最优化的目标是要达到整个活动过程的总体效果最优。由干各段决策间有机地联系着,本段决策的执行将影响到下一段的决策,以至于影响总体效果,所以决策者在每段决策时不应仅考虑本阶段最优,还应考虑对最终口标的影响,从而做出对全局来讲是最优的决策。

而动态规划是求解多阶段决策问题的一种方法

需要指出的是,动态规划问题没有固定的解法,动态规划是一种思想,应针对具体问题具体分析

2、动态规划的基本概念

虽然动态规划问题解决方式各有不同,但是在分析时,可以从以下五方面考虑

  • 阶段 动态规划是用来解决多阶段决策问题的,自然应该有着对应的阶段

  • 状态 在各阶段开始时的客观条件叫做状态

  • 决策和策略

策略是基于当前状态下,某一事件可以做的选择的集合;决策是所有策略中最后选择的最优解

  • 状态转移方程

在动态规划中往往本阶段的决策由上一阶段的状态和策略决定,因此可以写出本阶段决策与上一阶段决策之间的函数

  • 指标函数

用于评价某一决策的优劣

3、以背包问题为例

背包问题又称装载问题,一般提法是:一位旅行者携带背包去登山,已知他所能承受的背包重量限度为akg,现有n种物品可供他选择装人背包,第i种物品的单件重量为aia_ikg,其价值(可以足表明本物品对登山的重要胜的数量指标)是携带数量xix_i的函数cixic_i(x_i)(i=1,2,…n),问旅行者应如何选择携带各种物品的件数,以使总价值最大?

  • 阶段k:将物品视为逐类放入背包,现有n种物品,因此有n个阶段,k=1,2,...,n,如将第一种物品放入空背包为第一个阶段

  • 状态sks_{k}:在k阶段开始时,背包装载的前k-1种物品质量

  • 策略集合:在背包中可以放入第k种物品的数量,从0到装不下

  • 决策xkx_k:往背包放入第k种物品的数量

  • 状态转移方程:sk+1=sk+akxks_{k+1}=s_k+a_kx_k

  • 指标函数fk(sk)f_k(s_{k}):在重量不超过sks_{k}情况下最高的价值

根据以上条件可以写出递推公式:

fk(sk)=max{ckxk+fk1(skakxk)}f_k(s_{k})=max\{c_k(x_k)+f_{k-1}(s_{k}-a_kx_k)\}
f1(s1)=0f_1(s_1)=0

有此便可以推出fn(xn)f_n(x_n)的最大值,即问题的解