主要内容

训练PG代理人平衡车杆系统

这个例子展示了如何训练一个策略梯度(PG)代理来平衡MATLAB®建模的车-杆系统。有关PG代理的更多信息,请参见政策梯度代理

有关使用基线训练PG代理的示例,请参见用基线训练PG代理控制双积分器系统

Cart-Pole MATLAB环境

本例的强化学习环境是一根杆子,拴在小车上的一个不受驱动的关节上,小车沿着无摩擦的轨道移动。训练目标是使钟摆直立不跌倒。

对于这个环境:

  • 向上平衡的钟摆位置为0弧度,向下悬挂的位置是π弧度。

  • 钟摆开始直立,初始角度在-0.05到0.05弧度之间。

  • 从代理到环境的力动作信号是-10或10牛。

  • 从环境中观察到的是推车的位置和速度、摆角和摆角的导数。

  • 如果极点与垂直的距离超过12度,或者如果推车移动到距离原来位置超过2.4米,则事件终止。

  • 杆子保持直立的每一步奖励+1。当钟摆下降时,施加-5的惩罚。

有关此模型的更多信息,请参见负载预定义控制系统环境

创建环境接口

为钟摆创建一个预定义的环境接口。

env = rlPredefinedEnv (“CartPole-Discrete”
env = cartpoledistteaction with properties: Gravity: 9.8000 MassCart: 1 masspoole: 0.1000 Length: 0.5000 MaxForce: 10 Ts: 0.0200 thetathresholdraans: 0.2094 XThreshold: 2.4000 RewardForNotFalling: 1 pendtyforfalling: -5 State: [4x1 double]

该界面有一个离散的动作空间,代理可以在其中向推车施加两种可能的力值之一,-10或10 N。

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

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

固定随机生成器种子的再现性。

rng (0)

创建PG代理

对于策略梯度代理,actor执行一个随机策略,对于离散动作空间,它近似于一个离散类别actor。这个actor必须将观察信号作为输入,并为每个动作返回一个概率。

为了在参与者内部近似策略,可以使用深度神经网络。将网络定义为层对象的数组,并从环境规范对象中获取观察空间的维度和可能的操作数量。有关创建深度神经网络策略表示的更多信息,请参见创建政策和价值功能

actorNet = [featureInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(10) reluLayer fullyConnectedLayer(numl (actInfo.Elements)) softmaxLayer];

转换为dlnetwork并显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
可学习的数量:72输入:1 '输入' 4个特征

使用指定的深度神经网络和环境规范对象创建参与者表示。有关更多信息,请参见rlDiscreteCategoricalActor

演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);

要返回作为随机观察函数的可能动作的概率分布,并给定当前网络权重,使用评估

复审委员会=评估(演员,{兰德(obsInfo.Dimension)});复审委员会{1}
ans =2x1单列向量0.7229 - 0.2771

使用参与者创建代理。有关更多信息,请参见rlPGAgent

代理= rlPGAgent(演员);

用随机观测输入检查代理。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-10]}

为参与者指定训练选项。或者,您也可以使用rlPGAgentOptions而且rlOptimizerOptions对象。

agent.AgentOptions.CriticOptimizerOptions.LearnRate = 5 e - 3;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;

火车代理

要培训代理,首先要指定培训选项。对于本例,使用以下选项。

  • 每集训练最多1000集,每集持续最多500个时间步。

  • 在“集训管理器”对话框中显示训练进度情节选项)并禁用命令行显示(设置详细的选项).

  • 当代理在连续100集中获得的平均累积奖励超过480时停止训练。此时,代理可以将钟摆保持在直立位置。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (...MaxEpisodes = 1000,...MaxStepsPerEpisode = 500,...Verbose = false,...情节=“训练进步”...StopTrainingCriteria =“AverageReward”...StopTrainingValue = 480,...ScoreAveragingWindowLength = 100);

您可以通过使用情节在训练或模拟中发挥作用。

情节(env)

{

训练代理使用火车函数。训练这个代理是一个计算密集的过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置加载预先训练过的代理doTraining.亲自训练探员,设doTraining真正的

doTraining = false;如果doTraining培训代理。trainingStats =火车(代理,env, trainOpts);其他的为示例加载预先训练过的代理。负载(“MATLABCartpolePG.mat”“代理”);结束

模拟PG代理

为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见rlSimulationOptions而且sim卡.即使仿真时间增加到500步,agent也能平衡车杆系统。

simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);

{

totalReward =总和(experience.Reward)
totalReward = 500

另请参阅

相关的话题

Baidu
map