
如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路线;第二个是以伯克利Sergey Levine为代表的policy-based学派,主要从策略近似角度出发研究强化学习。
今天我介绍的动态规划算法思想在value-based乃至整个强化学习领域都起到了至关重要的作用,有非常多的算法都从其中衍生而来。话不多说,请坐稳扶好,老司机要发车了,嘟嘟~
动态规划是一种优化算法,起源于最优控制领域,可以用来解决多阶段序列决策问题,或者离散时间动态自适应控制问题。一个问题可以用动态规划求解,需要满足一下几条基本性质:
- 子问题最优性/最优子结构
原问题可以被分解为子问题,原问题的最优性可以通过子问题的最优性推导出
- 子问题重叠性/重叠子问题
一个问题满足子问题重叠性,意味着当我们去求解一个较大问题的最优解时,会多次调用子问题的最优解,即子问题的解会被多次递归调用。实际编程中我们会把子问题的解存储起来,后续会多次访问。例如OI中的记忆化搜索等等。
—————————————————————————————————————
马尔可夫决策过程满足上述两条基本性质:
- 贝尔曼期望方程给出了递归分解式,将原问题的求解分解为子问题的求解
- 价值函数可以被存储和多次调用
MDPs产生的序列是有先后顺序的,对于这种序列决策问题,前驱状态可以看做子问题,后继状态可以看做原问题,通过backup即可利用
动态规划方法用于解决model-based reinforcement learning问题,假设可知环境的所有动态信息,例如状态之间的转移规律等等。这个要求实际是非常苛刻的,因此后续会有很多的变体,不要求已知一个环境的模型。
接下来先介绍一下prediction和control的区别:
prediction:
prediction过程主要在做policy evaluation,即输入
control
control主要在solve一个optimal policy and optimal value function。输入是MDP
- optimal policy
- optimal value function
接下来我们介绍利用动态规划解决Policy Evaluation的方法:
目标:评估一个Policy的好坏;
解决方法:不断迭代贝尔曼期望方程;
——————————————————————————————稍后继续更新
策略改进:
策略评估:
'''
动态规划之策略迭代实现
算法:Policy Iteration
策略评估 + 策略改进:Bellman Expectation Equation + Greedy Policy Improvement
'''
import gym
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inlineenv = gym.make('CliffWalking-v0') # 导入gym环境-悬崖寻路def play_once(env,q_table):total_reward = 0state = env.reset()action = np.argmax(q_table[state,:]) # greedy policy improvement 公式(1)while True:next_state, reward, done, _ = env.step(action)next_action = np.argmax(q_table[next_state,:])# 贝尔曼期望方程策略改进,公式(2)q_table[state,action] = reward + 0.9*q_table[next_state,next_action] total_reward += rewardif done:breakstate = next_stateaction = next_actionreturn total_rewardq_table = np.zeros((env.nS,env.nA))
ans = []
for i in range(30):total_reward = play_once(env,q_table)print("总奖励 = {}".format(total_reward))ans.append(total_reward)
plt.figure()
plt.plot(ans,'b-')
plt.show()
——————————————稍后继续更——————————————————