200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统

MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统

时间:2019-03-14 19:55:17

相关推荐

MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统

使用并行计算训练倒立摆系统

行动者的并行训练创建Cart-Pole MATLAB环境接口创建AC智能体并行训练选项训练智能体AC智能体仿真参考文献

此示例显示了如何通过使用异步并行训练来训练actor-critic(AC)智能体以平衡在MATLAB®中建模的小车系统。 有关显示如何在不使用并行训练的情况下训练智能体的示例,请参阅训练AC智能体以平衡倒立摆系统。

matlab版本b。

行动者的并行训练

当您将并行计算与AC智能体一起使用时,每个工作人员都将从其智能体副本和环境中产生经验。每隔N个步骤,工作人员就会根据经验计算梯度并将计算出的梯度发送回宿主智能体。 主机智能体如下更新其参数。

对于异步训练,主机智能体将应用接收到的梯度,而无需等待所有工作人员发送梯度,然后将更新的参数发送回提供梯度的工作人员。 然后,工作人员继续使用更新的参数从其环境中产生经验。

对于同步训练,主机智能体会等待从所有工作人员接收梯度,并使用这些梯度更新其参数。 然后,主机同时将更新的参数发送给所有工作程序。 然后,所有工作人员将继续使用更新的参数来产生经验。

创建Cart-Pole MATLAB环境接口

为车杆系统创建预定义的环境界面。 有关此环境的更多信息,请参见加载预定义的控制系统环境。

env = rlPredefinedEnv("CartPole-Discrete");env.PenaltyForFalling = -10;

从环境界面获取观察和动作信息。

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

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

rng(0)

创建AC智能体

AC智能体使用评论者价值函数表示法,根据观察和操作来估计长期奖励。 要创建评论者,首先创建一个具有一个输入(观察)和一个输出(状态值)的深度神经网络。 评论者网络的输入大小为4,因为环境提供了4个观察值。 有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示。

criticNetwork = [featureInputLayer(4,'Normalization','none','Name','state')fullyConnectedLayer(32,'Name','CriticStateFC1')reluLayer('Name','CriticRelu1')fullyConnectedLayer(1, 'Name', 'CriticFC')];criticOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);critic = rlValueRepresentation(criticNetwork,obsInfo,'Observation',{'state'},criticOpts);

AC智能体使用行动者表示来决定要采取的行动(给定观察结果)。 要创建行动者,请创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。 actor网络的输出大小为2,因为智能体可以向环境施加2个力值–10和10。

actorNetwork = [featureInputLayer(4,'Normalization','none','Name','state')fullyConnectedLayer(32, 'Name','ActorStateFC1')reluLayer('Name','ActorRelu1')fullyConnectedLayer(2,'Name','action')];actorOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...'Observation',{'state'},actorOpts);

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

agentOpts = rlACAgentOptions(...'NumStepsToLookAhead',32,...'EntropyLossWeight',0.01,...'DiscountFactor',0.99);

然后使用指定的行动者表示形式和智能体选项创建智能体。 有关更多信息,请参见rlACAgent。

agent = rlACAgent(actor,critic,agentOpts);

并行训练选项

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

每次训练最多进行1000个episode,每个episode最多持续500个时间步。

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

当智能体在连续10个episode中获得的平均累积奖励大于500时,请停止训练。 此时,智能体可以使摆锤处于直立位置。

trainOpts = rlTrainingOptions(...'MaxEpisodes',1000,...'MaxStepsPerEpisode', 500,...'Verbose',false,...'Plots','training-progress',...'StopTrainingCriteria','AverageReward',...'StopTrainingValue',500,...'ScoreAveragingWindowLength',10);

您可以使用绘图功能在训练或仿真过程中可视化倒立摆系统。

plot(env)

要使用并行计算训练智能体,请指定以下训练选项。

将UseParallel选项设置为True。

通过将ParallelizationOptions.Mode选项设置为“async”,以异步方式并行训练智能体。

每隔32步,每个工作人员就会根据经验计算梯度并将其发送给主机。

AC智能体要求工作人员将“梯度”发送给主机。

AC智能体要求“ StepsUntilDataIsSent”等于agentOptions.NumStepsToLookAhead。

trainOpts.UseParallel = true;trainOpts.ParallelizationOptions.Mode = "async";trainOpts.ParallelizationOptions.DataToSendFromWorkers = "gradients";trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;

训练智能体

使用训练函数训练智能体。 训练智能体是一个计算密集型过程,需要几分钟才能完成。 为了节省运行本示例的时间,请通过将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('MATLABCartpoleParAC.mat','agent');end

AC智能体仿真

您可以在仿真过程中使用绘图功能来可视化倒立摆系统。

plot(env)

要验证训练后的智能体的表现,请在倒立摆环境中对其进行仿真。 有关智能体模拟的更多信息,请参见rlSimulationOptions和sim。

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

totalReward = sum(experience.Reward)

totalReward = 500

参考文献

[1] Mnih, Volodymyr, Adrià Puigdomènech Badia, Mehdi Mirza, Alex Graves, Timothy P. Lillicrap, Tim Harley, David Silver, and Koray Kavukcuoglu. ‘Asynchronous Methods for Deep Reinforcement Learning’. ArXiv:1602.01783 [Cs], 16 June . /abs/1602.01783.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。