本文是强化学习系列1的举例补充。这里介绍可以求解连续决策问题的动态规划问题。
1. 关于动态规划
动态规划将状态对应的值记录了下来,可以避免重复计算;这是它和Divide and Conquer最大的区别。两者都是树搜索的过程,但是Divide and Conquer没有使用值函数的步骤,因此如果可以的话,尽量使用动态规划求解。
动态规划要求问题是马尔科夫决策过程(Markov Decision Process,MDP),核心即每一阶段的决策过程不依赖于以往的状态。
下面使用Fibonacci来进行对比
递归法如下:
def fib(n):
if n <= 0: # base case 1
return 0
if n <= 1: # base case 2
return 1
else: # recursive step
return fib(n-1) + fib(n-2)
而DP法如下:
calculated = {}
def fib(n):
if n == 0: # base case 1
return 0
if n == 1: # base case 2
return 1
elif n in calculated:
return calculated[n]
else: # recursive step
calculated[n] = fib(n-1) + fib(n-2)
return calculated[n]
更常见的是使用bottomUp:
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
# table for tabulation
table = [None] * (n+1)
table[0] = 0 # base case 1, fib(0) =

最低0.47元/天 解锁文章
1440

被折叠的 条评论
为什么被折叠?



