动态规划算法实验报告_强化学习之动态规划算法

f73c14f29aa61f661e307df60b3efbc5.png

如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路线;第二个是以伯克利Sergey Levine为代表的policy-based学派,主要从策略近似角度出发研究强化学习。

今天我介绍的动态规划算法思想在value-based乃至整个强化学习领域都起到了至关重要的作用,有非常多的算法都从其中衍生而来。话不多说,请坐稳扶好,老司机要发车了,嘟嘟~

动态规划是一种优化算法,起源于最优控制领域,可以用来解决多阶段序列决策问题,或者离散时间动态自适应控制问题。一个问题可以用动态规划求解,需要满足一下几条基本性质:

  • 子问题最优性/最优子结构

原问题可以被分解为子问题,原问题的最优性可以通过子问题的最优性推导出

  • 子问题重叠性/重叠子问题

一个问题满足子问题重叠性,意味着当我们去求解一个较大问题的最优解时,会多次调用子问题的最优解,即子问题的解会被多次递归调用。实际编程中我们会把子问题的解存储起来,后续会多次访问。例如OI中的记忆化搜索等等。

—————————————————————————————————————

马尔可夫决策过程满足上述两条基本性质:

  • 贝尔曼期望方程给出了递归分解式,将原问题的求解分解为子问题的求解
  • 价值函数可以被存储和多次调用

MDPs产生的序列是有先后顺序的,对于这种序列决策问题,前驱状态可以看做子问题,后继状态可以看做原问题,通过backup即可利用

可达状态的价值函数推导出
的价值函数。

动态规划方法用于解决model-based reinforcement learning问题,假设可知环境的所有动态信息,例如状态之间的转移规律等等。这个要求实际是非常苛刻的,因此后续会有很多的变体,不要求已知一个环境的模型。

接下来先介绍一下prediction和control的区别:

prediction:

prediction过程主要在做policy evaluation,即输入

和policy
,输出是follow policy
得到的状态价值函数

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 inline

env = gym.make('CliffWalking-v0') # 导入gym环境-悬崖寻路

def play_once(env,q_table):
    total_reward = 0
    state = 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 += reward
        if done:
            break
        state = next_state
        action = next_action
    return total_reward


q_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()

——————————————稍后继续更——————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强化学习是指一类从(与环境)交互中不断学习的问题以及解决这类问题的方强化学习问题可以描述为一个智能体从与环境的交互中不断学习以完成特定目标(比如取得最大奖励值)。而强化学习的关键问题是在于每一个动作并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且有一定的延时性。所以我们要解决如何通过直接得到的监督信息,来获得每个状态中比较恰当的动作的问题。 在强化学习中,有两个可以进行交互的对象:智能体和环境。智能体可以感知外界环境的状态,并进行学习和决策。智能体的决策功能是指根据外界环境的状态来做出不同的动作,而学习功能是指根据外界环境的奖励来调整策略。环境是智能体外部的所有事物,并受智能体动作的影响而改变其状态,并反馈给智能体相应的奖励 。其要素包括: 状态$s$:对环境的描述,可以是离散的或连续的,其状态空间为$S$ 动作$a$: 对智能体行为的描述,可以是离散的或连续的,其动作空间为$A$ 策略$\pi(a|s)$ :智能体根据环境状态$s$ 来决定下一步动作$a$ 的函数 状态转移概率$p(s'|s, a)$ :在智能体根据当前状态$s$做出一个动作$a$之后,环境在下一个时刻转变为状态$s'$的概率 即时奖励$r(s,a,s')$是一个标量函数,即智能体根据当前状态$s$做出动作$a$之后,环境会反馈给智能体一个奖励,这个奖励也经常和下一个时刻的状态$s'$有关

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值