概述
使用DQN训练摆锤系统
- 钟摆模型
- 创建环境接口
- 创建DQN智能体
- 训练智能体
- 智能体仿真
此示例显示了如何建立钟摆模型并使用深度Q学习网络(DQN)训练。
钟摆模型
这个例子的强化学习环境是一个简单的无摩擦的钟摆,最初挂在一个向下的位置。训练的目标是使用最小的控制努力使钟摆站直而不跌倒。
打开模型
mdl = 'rlSimplePendulumModel';
open_system(mdl)
对于这个模型:
- 平衡摆向上位置为0弧度,向下悬挂位置为 π pi π弧度。
- 从智能体到环境的扭矩作用信号为–2至2 N·m。
- 从环境中观察到的是摆角的正弦,摆角的余弦和摆角导数。
- 每一步都会提供奖励 r t r_t rt
在这里:
- θ t theta_t θt是从直立位置开始的位移角度。
- θ t ˙ dot{theta_t} θt˙是位移角的导数。
- u t − 1 u_{t-1} ut−1是上一个时间步的控制工作。
创建环境接口
为钟摆创建一个预定义的环境界面。
env = rlPredefinedEnv('SimplePendulumModel-Discrete')
界面具有离散的操作空间,智能体可以在其中将三个可能的扭矩值之一施加到摆锤上:–2、0或2 N·m。
要将摆的初始条件定义为向下悬挂,请使用匿名函数句柄指定环境重置函数。 此重置功能将模型工作区变量theta
θ
theta
θ设置为pi。
env.ResetFcn = @(in)setVariable(in,'theta0',pi,'Workspace',mdl);
从环境获取观察和动作规范信息
obsInfo = getObservationInfo(env)
actInfo = getActionInfo(env)
以秒为单位指定模拟时间Tf和智能体采样时间Ts。
Ts = 0.05;
Tf = 20;
固定随机生成器种子以提高可重复性。
rng(0)
创建DQN智能体
DQN智能体使用值函数作为评论者,根据观察和行动,去近似长期奖励。
由于DQN具有离散的动作空间,因此它可以依靠多输出评论者逼近器,这通常比依靠可比的单输出逼近器更有效。 多输出逼近器仅将观测值作为输入,而输出矢量则具有与可能的离散操作数一样多的元素。 当采取相应的离散操作时,每个输出元素代表从输入观察得出的预期长期累积奖励。
要创建评论者,请首先创建一个深度神经网络,该网络具有三个元素的输入矢量(用于摆角的正弦,余弦和导数),以及一个具有三个元素的输出矢量(–2、0或2 Nm动作) 。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示。
dnn = [
featureInputLayer(3,'Normalization','none','Name','state')
fullyConnectedLayer(24,'Name','CriticStateFC1')
reluLayer('Name','CriticRelu1')
fullyConnectedLayer(48,'Name','CriticStateFC2')
reluLayer('Name','CriticCommonRelu')
fullyConnectedLayer(3,'Name','output')];
查看评论者网络配置。
figure
plot(layerGraph(dnn))
使用rlRepresentationOptions指定评论者表示的选项。
criticOpts = rlRepresentationOptions('LearnRate',0.001,'GradientThreshold',1);
使用指定的深度神经网络和选项创建评论者表示。 您还必须为评论者指定观察和动作信息。有关更多信息,请参见rlQValueRepresentation。
critic = rlQValueRepresentation(dnn,obsInfo,actInfo,'Observation',{'state'},criticOpts);
要创建DQN智能体,请首先使用rlDQNAgentOptions指定DQN智能体选项。
agentOptions = rlDQNAgentOptions(...
'SampleTime',Ts,...
'TargetSmoothFactor',1e-3,...
'ExperienceBufferLength',3000,...
'UseDoubleDQN',false,...
'DiscountFactor',0.9,...
'MiniBatchSize',64);
然后,使用指定的评论者表示形式和智能体选项创建DQN智能体。 有关更多信息,请参见rlDQNAgent。
agent = rlDQNAgent(critic,agentOptions);
训练智能体
要训练智能体,请首先指定训练选项。对于此示例,使用以下选项。
-
每次训练最多进行1000个episodes,每个情节最多可以持续500时间。
-
在“情节管理器”对话框中显示训练进度(设置Plots选项),并禁用命令行显示(将Verbose选项设置为false)。
-
当智能体连续五个episodes获得的平均累积奖励大于–1100时,请停止训练。在这一点上,智能体可以以最小的控制力快速地使摆锤处于直立位置。
-
为累积奖励大于–1100的每个episode保存智能体的副本。
trainingOptions = rlTrainingOptions(...
'MaxEpisodes',1000,...
'MaxStepsPerEpisode',500,...
'ScoreAveragingWindowLength',5,...
'Verbose',false,...
'Plots','training-progress',...
'StopTrainingCriteria','AverageReward',...
'StopTrainingValue',-1100,...
'SaveAgentCriteria','EpisodeReward',...
'SaveAgentValue',-1100);
使用训练函数训练智能体。 训练此智能体是一个计算密集型过程,需要几分钟才能完成。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的智能体。 要自己训练智能体,请将doTraining设置为true。
doTraining = false;
if doTraining
% Train the agent.
trainingStats = train(agent,env,trainingOptions);
else
% Load the pretrained agent for the example.
load('SimulinkPendulumDQNMulti.mat','agent');
end
智能体仿真
要验证训练有好的智能体的表现,请在摆环境中对其进行仿真。 有关智能体模拟的更多信息,请参见rlSimulationOptions和sim。
simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);
最后
以上就是雪白外套为你收集整理的MATLAB强化学习工具箱(七)钟摆模型建模并使用DQN训练钟摆模型创建环境接口创建DQN智能体训练智能体智能体仿真的全部内容,希望文章能够帮你解决MATLAB强化学习工具箱(七)钟摆模型建模并使用DQN训练钟摆模型创建环境接口创建DQN智能体训练智能体智能体仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复