动态规划

动态规划

动态规划是运筹学的一个分支,是一种求解多阶段决策过程最优化问题的数学方法。要搞清楚它,首先需要搞清楚几个基本概念。

  • 阶段:整个决策过程可以按某个(空间、时间或其它)标准分为多个步骤,每一步称为一个阶段。比如下棋,走一步就可以认为是一个阶段。
  • 状态:状态表示在每个阶段我们关注的决策相关的影响因素的情况。比如下棋到某一步时,此刻棋盘上所有棋子的位置就是此阶段的状态。状态通常可以用一个或多个变量来描述。
  • 决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择行动方法称为决策。比如下棋到某一步时,决定下一步怎么走,就是一步决策,也叫单阶段决策。决策通常也可以用变量来描述。
  • 策略:由每个阶段的决策组成的序列称为策略,也就是多阶段决策。比如下棋,从开始下到结束的每一步走法构成了一个策略。策略可能有很多种,其中达到最优效果的策略称为最优策略
  • 状态转移方程:从一个阶段到下一个阶段的状态变化,称为状态转移,如果这个变化可以用方程来描述,则称之为状态转移方程。
  • 无后效性:说的是一旦某个阶段的状态确定,则此后过程的演变不再受此前各种状态及决策的影响。也就是说历史信息不会影响我们以后的决策。比如下棋,现在已经有一个棋面,有可能是随机摆成的,也可能是认真下成这样的,但是不管怎样这不影响我们去决定下一步应该怎么下。当前的棋面是唯一影响未来的东西。
  • 最优⼦结构:如果每个阶段的最优状态可以从之前某个或某些阶段的某个或某些状态直接得到,也就是说一个问题的最优解可以由其子问题的最优解来得到,我们称其具有最优子结构。
  • 重叠⼦问题:在求解一个问题时需要先求解其子问题,子问题又有子问题,若在求解过程中需要重复求解某些子问题,这些子问题称为重叠子问题。对于重叠子问题不需要重复求解,只需要求解一次,然后记录下来,以后每次查询就可以了,可以大大降低运行时间,即用空间换时间。

简单起见,下面用大家非常熟悉的求斐波拉契数列的过程来说明这几个概念。斐波拉契数列的公式为:
f ( 1 ) = f ( 2 ) = 1 f ( n ) = f ( n − 1 ) + f ( n − 2 ) ( n ≥ 3 ) f(1) = f(2) = 1\\ f(n) = f(n-1) + f(n-2) \quad (n≥3) f(1)=f(2)=1f(n)=f(n1)+f(n2)(n3)

假设我现在想计算第10个非波那契数,那么计算每一个斐波拉契数的过程就是一个阶段,每一个斐波拉契数就是这个问题的一个状态。按照公式计算就是决策。每一步都按公式算就是策略状态转移方程 f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2) f(n)=f(n1)+f(n2)。求一个新数字只需要之前的两个状态,与怎么得到这个状态值无关,所以具有无后效性。每个阶段的状态即斐波拉契数可以由之前的两个状态得到,所以具有最优子结构。根据公式,求 f ( n ) f(n) f(n) 时需要求 f ( n − 2 ) f(n-2) f(n2),求 f ( n − 1 ) f(n-1) f(n1)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值