主要内容

rlReplayMemory

回放记忆体验缓冲区

    描述

    非策略强化学习代理将经验存储在循环经验缓冲区中。在训练过程中,代理从缓冲区中提取小批量的经验,并使用这些小批量更新它的角色函数和临界函数逼近器。

    缺省情况下,内置的off-policy代理(DQN、DDPG、TD3、SAC、MBPO)使用rlReplayMemory对象作为他们的经验缓冲。代理统一地从该缓冲区采样数据。要执行非均匀优先抽样,可以使用rlPrioritizedReplayMemory对象。

    创建自定义策略外强化学习代理时,可以通过使用rlReplayMemory对象。

    创建

    描述

    缓冲= rlReplayMemory (obsInfoactInfo中的观察和操作规范兼容的重放记忆体验缓冲区obsInfo而且actInfo,分别。

    例子

    缓冲= rlReplayMemory (obsInfoactInfo最大长度属性来设置缓冲区的最大长度最大长度财产。

    输入参数

    全部展开

    观测规范,指定为强化学习规范对象或定义属性(如尺寸、数据类型和观测信号名称)的规范对象数组。

    可以从现有环境或代理中提取观察规范getObservationInfo.还可以使用手动构造规范rlFiniteSetSpecrlNumericSpec

    动作规范,指定为强化学习规范对象,定义诸如尺寸、数据类型和动作信号的名称等属性。

    可以从现有环境或代理中提取操作规范getActionInfo.您还可以使用手动构造规范rlFiniteSetSpecrlNumericSpec

    属性

    全部展开

    此属性是只读的。

    最大缓冲区长度,指定为正整数。

    此属性是只读的。

    缓冲区中的经验数,指定为非负整数。

    对象的功能

    附加 将经验附加到回放内存缓冲区
    样本 回放记忆缓冲区中的经验样本
    调整 调整重放记忆体验缓冲区的大小
    allExperiences 返回回放内存缓冲区中的所有经验
    getActionInfo 从强化学习环境、代理或经验缓冲区获取动作数据规范
    getObservationInfo 从强化学习环境、agent或经验缓冲区获取观测数据规格

    例子

    全部折叠

    定义环境观测规范。对于本例,假设环境有一个单一的观测通道,其中有三个指定范围内的连续信号。

    obsInfo = rlNumericSpec([3 1],...LowerLimit = 0,...UpperLimit =(1、5、10]);

    定义环境的操作规范。对于本例,假设环境有一个单独的动作通道,具有指定范围内的两个连续信号。

    actInfo = rlNumericSpec([2 1],...LowerLimit = 0,...UpperLimit = [5; 10]);

    创建最大长度为20,000的体验缓冲区。

    缓冲= rlReplayMemory (obsInfo actInfo 20000);

    使用结构将单个经验附加到缓冲区。每个体验都包含以下元素:当前观察、行动、下一次观察、奖励和完成。

    在这个例子中,我们创造一种带有随机观察,行动和奖励值的体验。属性来指示此体验不是终端条件结束值为0。

    exp.Observation = {obsInfo.UpperLimit。*兰德(3,1)};exp.Action = {actInfo.UpperLimit。*兰德(2,1)};exp.NextObservation = {obsInfo.UpperLimit。*兰德(3,1)};exp.Reward = 10 *兰德(1);exp.IsDone = 0;

    将经验附加到缓冲区。

    追加(缓冲区,exp);

    您还可以使用结构数组将一批经验附加到经验缓冲区。对于本例,添加一个包含100个随机经验的序列,最后的经验表示终端条件。

    i = 1:100 expBatch(i).使用实例观察={obsInfo.UpperLimit.*rand(3,1)}; expBatch(i).Action = {actInfo.UpperLimit.*rand(2,1)}; expBatch(i).NextObservation = {obsInfo.UpperLimit.*rand(3,1)}; expBatch(i).Reward = 10*rand(1); expBatch(i).IsDone = 0;结束expBatch(100)。结束= 1;追加(缓冲区,expBatch);

    在将经验附加到缓冲区之后,您可以对RL代理的培训经验进行小批量抽样。例如,从缓冲区中随机抽取50个经验。

    miniBatch =样本(缓冲区,50);

    您可以对缓冲区中的数据层进行采样。例如,以折现系数为0.95对10个连续经历的范围进行抽样。

    horizonSample =样本(缓冲区,1,...NStepHorizon = 10,...DiscountFactor = 0.95);

    返回的样品包含以下信息。

    • 观察而且行动都是从观察和行动中第一次体会到的地平线。

    • NextObservation而且结束都是下一个观察和终止信号,来自最终经验的视界。

    • 奖励是使用指定折现因子的跨越视界的累积奖励。

    你也可以尝试一系列连续的经历。在本例中,结构字段包含所有采样经验值的数组。

    sequenceSample =样本(缓冲区,1,...SequenceLength = 20);

    定义环境观测规范。对于本例,假设环境有两个观测通道:一个通道包含两个连续观测值,另一个通道包含一个三值离散观测值。

    obsContinuous = rlNumericSpec([2 1],...LowerLimit = 0,...UpperLimit = [1; 5]);obsDiscrete = rllimitesetspec ([1 2 3]);obsInfo = [obsContinuous obsDiscrete];

    定义环境的操作规范。对于本例,假设环境有一个动作通道,在指定的范围内有一个连续的动作。

    actInfo = rlNumericSpec([2 1],...LowerLimit = 0,...UpperLimit = [5; 10]);

    创建一个最大长度为5000的体验缓冲区。

    缓冲= rlReplayMemory (obsInfo actInfo 5000);

    将50个随机经验序列附加到缓冲区。

    I = 1:50 exp(I)。观察=...{obsInfo (1) .UpperLimit。*兰德(2,1)兰迪(3)};exp(我)。行动= {actInfo.UpperLimit.*rand(2,1)}; exp(i).NextObservation =...{obsInfo (1) .UpperLimit。*兰德(2,1)兰迪(3)};exp(我)。奖励= 10*rand(1); exp(i).IsDone = 0;结束追加(缓冲区,exp);

    在将经验附加到缓冲区之后,您可以对RL代理的培训经验进行小批量抽样。例如,从缓冲区中随机抽取10个经验。

    miniBatch =样本(缓冲区,10);

    为培训代理创建一个环境。对于本例,加载一个预定义的环境。

    env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);

    从代理中提取观察和操作规范。

    obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

    根据环境规范创建DQN代理。

    代理= rlDQNAgent (obsInfo actInfo);

    默认情况下,代理使用体验缓冲区的最大大小为10,000。

    代理。ExperienceBuffer
    ans = rlReplayMemory的属性:MaxLength: 10000长度:0

    将经验缓冲区的最大大小增加到20,000。

    调整(agent.ExperienceBuffer, 20000)

    查看更新后的经验缓冲区。

    代理。ExperienceBuffer
    ans = rlReplayMemory的属性:MaxLength: 20000长度:0

    版本历史

    介绍了R2022a

    Baidu
    map