主要内容

火车MBPO代理Cart-Pole平衡系统

这个例子展示了如何培养一个基于模型的政策优化(MBPO)代理来平衡cart-pole MATLAB®系统建模。MBPO代理的更多信息,请参阅基于模型的政策优化(MBPO)代理

MBPO代理使用一个环境模型来产生更多的经验在训练基地的代理。在这个例子中,软actor-critic基地的代理商(SAC)代理。

基于模型的build-int MBPO代理是基于政策优化算法[1]。的原始MBPO算法训练一个随机模型。相比之下,这个例子列车确定性模型的一个整体。

下图总结了这个示例中使用的算法。在训练MBPO代理收集实际经验与环境作用的结果。MBPO代理使用这些经验来训练其内部环境模型。然后,它使用这个模型生成的经验没有与实际环境交互最后,MBPO代理使用生成的实际经验和训练囊基地代理经验。

Cart-Pole MATLAB环境

对于这个示例,强化学习环境是极连接到一个unactuated革命联合在一个购物车。车有一个驱动移动关节连接到一个一维无摩擦的轨道。在这种环境下的训练目标是平衡杆通过应用移动关节力量(操作)。

对于这个环境:

  • 向上的平衡摆位置0弧度和向下悬挂位置π弧度。

  • 钟摆开始直立初始夹角-0.05弧度和0.05弧度。

  • 力行动信号从代理环境从-10 N N。

  • 来自环境的观察车的位置和速度,摆角和摆角的导数。

  • 这一事件终止如果北极是超过12度从垂直或如果购物车移动超过2.4从原始位置。

  • + 0.5提供的奖励每一个时间步长杆保持直立。提供一个额外的奖励基于车之间的距离和原点。-50年应用摆的一个点球。

关于这个模型的更多信息,请参阅负载预定义的控制系统环境

创建一个预定义的环境界面cart-pole系统。

env = rlPredefinedEnv (“CartPole-Continuous”);

接口有一个连续动作的地方代理可以施加一个力值从-10 N 10 N。

从环境中获得的观察和行动规范的接口。

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

解决随机发生器再现性的种子。

rng (0)

创建MBPO代理

MBPO代理决定哪些行动观察使用基地off-policy给代理商。MBPO代理培训基地代理和一个环境模型。环境模型由过渡功能,奖励功能,一个是函数。这个模型是用来创造更多的样品没有与环境互动。这个示例使用以下步骤来构造一个MBPO代理。

  1. 定义模范自由off-policy代理。

  2. 定义转换模型。

  3. 定义奖励模式。

  4. 定义完成模型。

  5. 建立神经网络环境。

  6. 创建MBPO代理。

1。定义模范自由Off-Policy代理

创建一个囊基地代理和一个默认的网络结构。囊剂的更多信息,请参阅软Actor-Critic (SAC)代理。环境一个持续的行动空间,您还可以使用代理DDPG或TD3基地。对于离散环境,您可以使用一个代理DQN基地。

agentOpts = rlSACAgentOptions;agentOpts。MiniBatchSize = 256;initOpts = rlAgentInitializationOptions (NumHiddenUnit = 64);baseagent = rlSACAgent (obsInfo actInfo、initOpts agentOpts);baseagent.AgentOptions.ActorOptimizerOptions。LearnRate = 1的军医;baseagent.AgentOptions.CriticOptimizerOptions (1)。LearnRate = 1的军医;baseagent.AgentOptions.CriticOptimizerOptions (2)。LearnRate = 1的军医;baseagent.AgentOptions。NumGradientStepsPerUpdate = 5;

2。定义转换模型

建模环境,MBPO代理火车一个或多个转换模型。有效地模拟一个环境,你必须考虑两种不确定性:统计的不确定性和建模不确定性。随机转换函数可以模型统计的不确定性比确定性转换函数。在这个例子中,因为cart-pole环境是确定的,你用确定性转换功能。

很难有一个完美的模型,一个训练有素的模型通常有建模不确定性。一个常见的方法来克服建模不确定性是使用多个转换模型。原MBPO纸使用七个模型[1]。对于这个示例,降低计算成本,你用三个模型。MBPO代理使用所有三个过渡模型生成的经验。下图显示了一个过渡模型生成样本没有与环境互动。在这个图中,模型生成两个轨迹地平线= 2。

创建三个确定的转换功能。为此,创建一个深层神经网络使用createDeterministicTransitionNetworkhelper函数。然后,使用神经网络来创建一个rlContinuousDeterministicTransitionFunction对象。当创建一个转换函数对象时,您必须指定操作和观察输入/输出神经网络的名称。

net1 = createDeterministicTransitionNetwork (4,1);transitionFcn = rlContinuousDeterministicTransitionFunction (net1,obsInfo,actInfo,ObservationInputNames =“状态”,ActionInputNames =“行动”,NextObservationOutputNames =“nextObservation”);net2 = createDeterministicTransitionNetwork (4,1);transitionFcn2 = rlContinuousDeterministicTransitionFunction (net2,obsInfo,actInfo,ObservationInputNames =“状态”,ActionInputNames =“行动”,NextObservationOutputNames =“nextObservation”);net3 = createDeterministicTransitionNetwork (4,1);transitionFcn3 = rlContinuousDeterministicTransitionFunction (net3,obsInfo,actInfo,ObservationInputNames =“状态”,ActionInputNames =“行动”,NextObservationOutputNames =“nextObservation”);

3所示。定义奖励模型

MBPO代理还包含一个奖励对环境模型。如果你知道一个真实的回报函数,您可以指定它使用自定义函数。在这个例子中,真实回报函数中定义cartPoleRewardFunctionhelper函数。使用这个奖励函数集useGroundTruthReward真正的

你也可以指定一个神经元网络奖励函数MBPO代理可以训练。在这个示例中,您可以使用这样一个奖励函数通过设置useGroundTruthReward。奖励的深层神经网络函数中定义createRewardNetworkActionNextObshelper函数。定义一个使用神经网络完成功能,创建一个rlContinuousDeterministicRewardFunction对象。

useGroundTruthReward = true;如果useGroundTruthReward rewardFcn = @cartPoleRewardFunction;其他的%这个神经网络使用行为和下观察作为输入。rewardnet = createRewardNetworkActionNextObs (4,1);rewardFcn = rlContinuousDeterministicRewardFunction (rewardnet,obsInfo,actInfo,ActionInputNames =“行动”,NextObservationInputNames =“nextState”);结束

4所示。定义了模型

MBPO代理还包含一个完成模型计算的终止信号环境。如果你知道一个真实终止信号,您可以指定它使用自定义函数。在这个例子中,日渐终止信号的定义cartPoleIsDoneFunctionhelper函数。使用这个奖励函数集useGroundTruthIsDone真正的

你也可以指定一个神经元网络进行函数MBPO代理可以训练。在这个示例中,您可以使用这样一个通过设置完成功能useGroundTruthIsDone。完成的深层神经网络函数中定义createIsDoneNetworkhelper函数。定义一个使用神经网络完成功能,创建一个rlIsDoneFunction对象。

useGroundTruthIsDone = true;如果useGroundTruthIsDone isdoneFcn = @cartPoleIsDoneFunction;其他的%这下obesrvation作为输入神经网络只使用。isdoneNet = createIsDoneNetwork (4);isdoneFcn = rlIsDoneFunction (isdoneNet,obsInfo,actInfo,NextObservationInputNames =“nextState”);结束

5。建立神经网络环境

定义一个神经网络环境使用的过渡,奖励,完成功能。为此,创建一个rlNeuralNetworkEnvironment对象。

generativeEnv = rlNeuralNetworkEnvironment (obsInfo actInfo,[transitionFcn, transitionFcn2 transitionFcn3], rewardFcn isdoneFcn);%重置模型环境。重置(generativeEnv);

6。创建MBPO代理

定义一个MBPO代理使用基本off-policy剂和环境模型。要做到这一点,首先创建一个MBPO代理的选择对象。

MBPOAgentOpts = rlMBPOAgentOptions;

为训练环境模型指定选项。火车模型1时代每一集的开头和使用15 mini-batches大小256。

MBPOAgentOpts。NumEpochForTrainingModel = 1;MBPOAgentOpts。NumMiniBatches = 15;MBPOAgentOpts。MiniBatchSize = 256;

指定模型经验缓冲区的大小。

MBPOAgentOpts。ModelExperienceBufferLength = 60000;

指定实际的比率和囊剂生成的经验用来训练基地。对于本例,20%的样本来自真正的缓冲和80%的样本来自模型经验缓冲区。

MBPOAgentOpts。RealSampleRatio = 0.2;

指定的选项生成样本使用环境模型。

  • 产生20000轨迹在每一个时代的开始。

  • 使用一个分段转出地平线时间表,这就增加了地平线长度逐渐. .

  • 增加地平线长度每100时代。

  • 使用一个初始层1的长度。

  • 使用最大层长度的3。

MBPOAgentOpts.ModelRolloutOptions。NumRollout = 20000;MBPOAgentOpts.ModelRolloutOptions。HorizonUpdateSchedule =“分段”;MBPOAgentOpts.ModelRolloutOptions。HorizonUpdateFrequency = 100;MBPOAgentOpts.ModelRolloutOptions。地平线= 1;MBPOAgentOpts.ModelRolloutOptions。HorizonMax = 3;

指定优化器选择训练模式的过渡。使用相同的优化器选择所有三个过渡模型。

transitionOptimizerOptions1 = rlOptimizerOptions (LearnRate = 1的军医,GradientThreshold = 1.0);transitionOptimizerOptions2 = rlOptimizerOptions (LearnRate = 1的军医,GradientThreshold = 1.0);transitionOptimizerOptions3 = rlOptimizerOptions (LearnRate = 1的军医,GradientThreshold = 1.0);MBPOAgentOpts。TransitionOptimizerOptions =[transitionOptimizerOptions1,transitionOptimizerOptions2,transitionOptimizerOptions3];

指定优化器选择培训奖励模式。如果你使用一个定制的真实回报函数,代理忽略这些选项。

rewardOptimizerOptions = rlOptimizerOptions (LearnRate = 1的军医,GradientThreshold = 1.0);MBPOAgentOpts。RewardOptimizerOptions = RewardOptimizerOptions;

指定优化器选择培训完成模型。如果你使用一个定制的真实回报函数,代理忽略这些选项。

isdoneOptimizerOptions = rlOptimizerOptions (LearnRate = 1的军医,GradientThreshold = 1.0);MBPOAgentOpts。IsDoneOptimizerOptions = IsDoneOptimizerOptions;

创建MBPO代理,代理指定基地,环境模型和选择。

代理= rlMBPOAgent (baseagent generativeEnv MBPOAgentOpts);

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项。

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

  • 在事件管理器对话框显示培训进展(设置情节在命令行选项)和禁用显示(设置详细的选项)。

  • 保存剂当平均集奖励大于或等于470。

  • 停止训练当代理接收到平均累积奖励大于470 / 5连续集。在这一点上,代理可以平衡钟摆在直立位置。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (MaxEpisodes = 500,MaxStepsPerEpisode = 500,Verbose = false,情节=“训练进步”,StopTrainingCriteria =“AverageReward”,StopTrainingValue = 470,ScoreAveragingWindowLength = 5,SaveAgentCriteria =“EpisodeReward”,SaveAgentValue = 470,ScoreAveragingWindowLength = 5);

你可以想象cart-pole系统使用情节函数在训练或模拟。

情节(env)

图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。

火车代理使用火车函数。培训这个代理是一个计算强度的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“MATLABCartpoleMBPO.mat”,“代理”);结束

模拟MBPO代理

验证培训代理的性能,模拟在cart-pole环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡。在验证是没有必要在这个例子中探索。因此,在模拟使用确定性行为,设置UseExplorationPolicy代理属性代理

rng (1)%在sim禁用勘探代理。UseExplorationPolicy = false;simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);totalReward_MBPO =总和(experience.Reward)
totalReward_MBPO = 460.7233

而不是模拟MBPO代理,你可以模拟基本的代理。如果你使用相同的随机种子,得到同样的结果作为模拟MBPO代理。

rng(1)经验= sim (env、agent.BaseAgent simOptions);

图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。

totalReward_SAC =总和(experience.Reward)
totalReward_SAC = 460.7233

评估学习环境模型

验证训练环境过渡模型,您可以检查他们是否能够正确预测下一个观察。类似地,您可以验证奖励和完成功能的性能。基于环境模型的预测,使用一步函数。

收集数据为学习模型评估

rng (1)%在sim创建期间启用勘探%不同数据模型评估代理。UseExplorationPolicy = true;simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);

图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。

对于本例,评估第一个过渡模型的性能。

agent.EnvModel。TransitionModelNum = 1;

为每个模拟步骤,提取实际的观察。

numSteps =长度(experience.Reward.Data);nextObsPrediction = 0 (4 1 numSteps);numSteps rewardPrediction = 0 (1);numSteps isdonePrediction = 0 (1);nextObsGroundTruth = 0 (4 1 numSteps);numSteps rewardGroundTruth = 0 (1);numSteps isdoneGroundTruth = 0 (1);stepCt = 1: numSteps%提取下观察,实际的奖励,完成价值。nextObsGroundTruth (:,:, stepCt) =experience.Observation.CartPoleStates.Data (:,:, stepCt + 1);rewardGroundTruth (:, stepCt) = experience.Reward.Data (stepCt);isdoneGroundTruth (:, stepCt) = experience.IsDone.Data (stepCt);%预测下一个观察,奖励,完成价值%使用环境模型。奥林匹克广播服务公司= experience.Observation.CartPoleStates.Data (:,:, stepCt);agent.EnvModel。观察={奥林匹克广播服务公司};action = experience.Action.CartPoleAction.Data (:,:, stepCt);[nextObs,奖励,结束]=步骤(agent.EnvModel{行动});nextObsPrediction (:,:, stepCt) = nextObs {1};rewardPrediction (:, stepCt) =奖励;isdonePrediction (:, stepCt) =结束;结束

情节地面真理和预测每个维度的观察。

obsDimensionIndex = 1:4次要情节(2,2,obsDimensionIndex)情节(重塑(nextObsGroundTruth (obsDimensionIndex,:,:), 1, numSteps))情节(重塑(nextObsPrediction (obsDimensionIndex,:,:), 1, numSteps))包含(“步骤”)ylabel (“观察”)如果obsDimensionIndex = = 1传说(“GroundTruth”,“预测”,“位置”,“西南”)结束结束

图包含4轴对象。坐标轴对象和包含步骤1,ylabel观察包含2线类型的对象。这些对象代表GroundTruth,预测。坐标轴对象和包含步骤2,ylabel观察包含2线类型的对象。坐标轴对象和包含步骤3,ylabel观察包含2线类型的对象。坐标轴对象和包含步骤4,ylabel观察包含2线类型的对象。

引用

[1]1月,迈克尔,贾斯汀傅,马文张,谢尔盖·莱文。“当你信任模型:基于模型的政策优化。“在学报的第33届国际会议上神经信息处理系统,12519 - 30。1122年。美国纽约红钩:Curran Associates Inc ., 2019年。

另请参阅

功能

对象

相关的例子

更多关于