强化学习-马尔科夫及Q-learning及python代码实现

本文深入解析马尔科夫决策过程(MDP),包括其构成元素、状态价值函数、策略及Bellman方程。并通过Q-learning算法的具体步骤,展示了如何在环境中通过迭代学习最优策略。附带Python代码实现,帮助读者理解MDP和Q-learning的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

马尔科夫决策过程

马尔科夫决策过程由5个元素构成

  • S:表示状态集(states)
  • A:表示一组动作(actions)
  • P:表示状态转移概率.a表示在当前sES状态下,经过aEA作用后,会转移到的其他状态的概率分布情况
  • R:奖励函数(reward function)表示agent采取某个动作后的即时奖励46.2
  • y:折扣系数意味着当下的reward比未来反馈的reward更重要R(st)0≤~<1
    1.智能体初始状态为S0
    2.选择一个动作a0
    3.按概率转移矩阵Psa转移到了下一个状态S1然后。。。
    在这里插入图片描述
    状态价值函数
    v(s)=ElU:lSt=s]
    t时刻的状态s能获得的未来回报的期望价值函数用来衡量某一状态或状态-动作对的优劣价,累计奖励的期望最优价值函数:所有策略下的最优累计奖励期望
    在这里插入图片描述
    策略:已知状态下可能产生动作的概率分布

Bellman方程:当前状态的价值和下一步的价值及当前的奖励(Reward)有关
价值函数分解为当前的奖励和下一步的价值两部分

在这里插入图片描述
在这里插入图片描述

Bellman最优化方程
在这里插入图片描述
在某个状态(state)下最优价值函数的值,就是智能体(agent)在该状态下,所能获得的累积期望奖励值(cumulative expective rewards)的最大值.

Q-learning

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

具体步骤:

在这里插入图片描述

首先取学习参数y=0.8,初始状态为房间1,并将Q初始化为一个零矩阵
在这里插入图片描述
观察矩阵R的第二行(对应房间1或状态1),它包含两个非负值,即当前状态1的下一步行为有两种可能:转至状态3或转至状态5.随机地,我们选取转至状态5.
在这里插入图片描述
想象一下,当我们的agent位于状态5以后,会发生什么事情呢?观察矩阵R的第6行它对应三个可能的行为:转至状态1,4或5.
在这里插入图片描述
接下来,进行下一次episode的迭代,首先随机地选取一个初始状态,这次我们选取状态3作为初始状态.
观察矩阵R的第四行(对应状态3),它对应三个可能的行为:转至状态1,2或4.随机地,我们选取转至状态1.因此观察矩阵R的第二行(对应状态1),它对应两个可能的行为:转至状态3或5.

在这里插入图片描述
现在状态1变成了当前状态.因为状态1还不是目标状态,因此我们需要继续往前探索.状态1对应三个可能的行为:转至状态3或5.不妨假定我们幸运地选择了状态5.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

1、自己编写gridworld.py 实现生成矩阵

import numpy as np
import sys
from gym.envs.toy_text import discrete

UP = 0
RIGHT = 1
DOWN = 2
LEFT = 3

class GridworldEnv(discrete.DiscreteEnv):
    """
    Grid World environment from Sutton's Reinforcement Learning book chapter 4.
    You are an agent on an MxN grid and your goal is to reach the terminal
    state at the top left or the bottom right corner.

    For example, a 4x4 grid looks as follows:

    T  o  o  o
    o  x  o  o
    o  o  o  o
    o  o  o  T

    x is your position and T are the two terminal states.

    You can take actions in each direction (UP=0, RIGHT=1, DOWN=2, LEFT=3).
    Actions going off the edge leave you in your current state.
    You receive a reward of -1 at each step until you reach a terminal state.
    """

    metadata = {
   'render.modes': ['human', 'ansi']}

    def __init__(self, shape=[4,4]):
        if not isin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值