我是靠谱客的博主 朴素向日葵,最近开发中收集的这篇文章主要介绍MATLAB强化学习实战(四) 训练DDPG智能体控制双积分器系统双积分器的MATLAB环境创建环境接口创建DDPG智能体训练智能体DDPG智能体仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

训练DDPG智能体控制双积分器系统

  • 双积分器的MATLAB环境
  • 创建环境接口
  • 创建DDPG智能体
  • 训练智能体
  • DDPG智能体仿真

该示例说明了如何训练深度确定性策略梯度(DDPG)智能体来控制以MATLAB®为模型的二阶动态系统。

有关DDPG智能体的详细信息,请参阅深度确定性策略梯度智能体。 有关显示如何在Simulink®中训练DDPG智能体的示例,请参阅训练DDPG智能体平衡摆。

双积分器的MATLAB环境

此示例的强化学习环境是具有增益的二阶双积分器系统。 训练目标是通过施加力输入来控制介质在二阶系统中的位置。
在这里插入图片描述
对于这种环境:

  1. 从4到4单位之间的初始位置开始。
  2. 从介质到环境的力作用信号是2到2N。
  3. 从环境中观察到的是质量的位置和速度。
  4. 如果质量从原来的位置移动超过5米或如果x <0.01,则episode 终止。
  5. 每一步提供的奖励r(t)是r(t)的离散化
    在这里插入图片描述

这里:

  1. x是质量的状态向量。

  2. u是施加到介质上的力。

  3. Q是控制性能的权重; Q = [10 0; 0 1]。

  4. R是控制作用的权重; R = 0.01。

创建环境接口

为双积分器系统创建一个预定义的环境接口。

env = rlPredefinedEnv("DoubleIntegrator-Continuous")

在这里插入图片描述

env.MaxForce = Inf;

接口具有连续的作用空间,智能体可以在其中对介质施加从-Inf到Inf的力值。

从环境接口获取观察和动作信息。

obsInfo = getObservationInfo(env);
numObservations = obsInfo.Dimension(1);
actInfo = getActionInfo(env);
numActions = numel(actInfo);

固定随机发生器种子的重现性。

rng(0)

创建DDPG智能体

DDPG智能体使用评论者价值函数表示法,根据给定的观察和操作来估算长期奖励。 要创建评论者,首先要创建一个具有两个输入(状态和动作)和一个输出的深度神经网络。 有关创建神经网络值函数表示的更多信息,请参见创建策略和值函数表示。

statePath = imageInputLayer([numObservations 1 1],'Normalization','none','Name','state');
actionPath = imageInputLayer([numActions 1 1],'Normalization','none','Name','action');
commonPath = [concatenationLayer(1,2,'Name','concat')
             quadraticLayer('Name','quadratic')
             fullyConnectedLayer(1,'Name','StateValue','BiasLearnRateFactor',0,'Bias',0)];

criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);

criticNetwork = connectLayers(criticNetwork,'state','concat/in1');
criticNetwork = connectLayers(criticNetwork,'action','concat/in2');

查看评论者网络配置。

figure
plot(criticNetwork)

在这里插入图片描述
使用rlRepresentationOptions指定评论者表示的选项。

criticOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);

使用指定的神经网络和选项创建评论者表示。 您还必须指定评论者的操作和观察信息,这些信息是从环境界面获得的。 有关更多信息,请参见rlQValueRepresentation。

critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,'Observation',{'state'},'Action',{'action'},criticOpts);

DDPG智能体使用行动者表示来决定要采取的行动(在给定的观察结果中)。 要创建行动者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

以类似于评论者的方式构造行动者。

actorNetwork = [
    imageInputLayer([numObservations 1 1],'Normalization','none','Name','state')
    fullyConnectedLayer(numActions,'Name','action','BiasLearnRateFactor',0,'Bias',0)];

actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);

actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,'Observation',{'state'},'Action',{'action'},actorOpts);

要创建DDPG智能体,请首先使用rlDDPGAgentOptions指定DDPG智能体选项。

agentOpts = rlDDPGAgentOptions(...
    'SampleTime',env.Ts,...
    'TargetSmoothFactor',1e-3,...
    'ExperienceBufferLength',1e6,...
    'DiscountFactor',0.99,...
    'MiniBatchSize',32);
agentOpts.NoiseOptions.Variance = 0.3;
agentOpts.NoiseOptions.VarianceDecayRate = 1e-6;

使用指定的评论者表示,评论者表示和智能体选项创建DDPG智能体。 有关更多信息,请参见rlDDPGAgent。

agent = rlDDPGAgent(actor,critic,agentOpts);

训练智能体

要训练智能体,请首先指定训练选项。 对于此示例,使用以下选项。

  1. 在训练环节中最多运行1000 episodes,每个episode最多持续200个时间步。

  2. 在“情节管理器”对话框中显示训练进度(设置“Plots ”选项),并禁用命令行显示(设置“Verbose ”选项)。

  3. 当智能体收到的移动平均累计奖励大于–66时,请停止训练。 在这一点上,智能体可以用最小的控制力来控制质量块的位置。

有关更多信息,请参见rlTrainingOptions。

trainOpts = rlTrainingOptions(...
    'MaxEpisodes', 5000, ...
    'MaxStepsPerEpisode', 200, ...
    'Verbose', false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',-66);

您可以在训练或仿真过程中使用绘图功能来可视化双积分器环境。

plot(env)

在这里插入图片描述
使用训练功能训练智能体。 训练此智能体是一个需要大量时间才能完成的计算密集型过程。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的智能体。 要自己训练智能体,请将doTraining设置为true。

doTraining = false;
if doTraining
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('DoubleIntegDDPG.mat','agent');
end

在这里插入图片描述

DDPG智能体仿真

要验证受过训练的智能体的性能,请在双集成器环境中对其进行仿真。 有关智能体模拟的更多信息,请参见rlSimulationOptions和sim。

simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);

在这里插入图片描述

totalReward = sum(experience.Reward)

在这里插入图片描述

最后

以上就是朴素向日葵为你收集整理的MATLAB强化学习实战(四) 训练DDPG智能体控制双积分器系统双积分器的MATLAB环境创建环境接口创建DDPG智能体训练智能体DDPG智能体仿真的全部内容,希望文章能够帮你解决MATLAB强化学习实战(四) 训练DDPG智能体控制双积分器系统双积分器的MATLAB环境创建环境接口创建DDPG智能体训练智能体DDPG智能体仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部