概述
训练DDPG智能体控制双积分器系统
- 双积分器的MATLAB环境
- 创建环境接口
- 创建DDPG智能体
- 训练智能体
- DDPG智能体仿真
该示例说明了如何训练深度确定性策略梯度(DDPG)智能体来控制以MATLAB®为模型的二阶动态系统。
有关DDPG智能体的详细信息,请参阅深度确定性策略梯度智能体。 有关显示如何在Simulink®中训练DDPG智能体的示例,请参阅训练DDPG智能体平衡摆。
双积分器的MATLAB环境
此示例的强化学习环境是具有增益的二阶双积分器系统。 训练目标是通过施加力输入来控制介质在二阶系统中的位置。
对于这种环境:
- 从4到4单位之间的初始位置开始。
- 从介质到环境的力作用信号是2到2N。
- 从环境中观察到的是质量的位置和速度。
- 如果质量从原来的位置移动超过5米或如果x <0.01,则episode 终止。
- 每一步提供的奖励r(t)是r(t)的离散化
这里:
-
x是质量的状态向量。
-
u是施加到介质上的力。
-
Q是控制性能的权重; Q = [10 0; 0 1]。
-
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);
训练智能体
要训练智能体,请首先指定训练选项。 对于此示例,使用以下选项。
-
在训练环节中最多运行1000 episodes,每个episode最多持续200个时间步。
-
在“情节管理器”对话框中显示训练进度(设置“Plots ”选项),并禁用命令行显示(设置“Verbose ”选项)。
-
当智能体收到的移动平均累计奖励大于–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智能体仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复