このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では、深决定性策略梯度(DDPG)ベースの強化学習を使用して,モバイルロボットが障害物を回避する手法を開発します。DDPGアルゴリズムの簡単な概要については,深度确定性策略梯度代理(强化学习工具箱)を参照してください。
このシナリオ例では,マップ内で障害物を検出する距離センサーの読み取り値を指定して,障害物を回避するようにモバイルロボットに学習させます。強化学習アルゴリズムの目的は,障害物との衝突を回避するためにロボットが使用するべき制御(線形速度と角速度)について学習することです。この例では,既知の環境の占有マップを使用して,距離センサーの読み取り値の生成,障害物の検出,およびロボットに起こりうる衝突のチェックを行います。距離センサーの読み取り値はDDPGエージェントの観測値であり,線形速度と角速度の制御はアクションです。
ロボットの環境を表すマップ行列simpleMap
を読み込みます。
负载exampleMapssimpleMap负载exampleHelperOfficeAreaMapoffice_area_mapmapMatrix = simpleMap;mapScale = 1;
次に,ノイズを含む距離センサーをシミュレートするrangeSensor
オブジェクトを設定します。距離センサーの読み取り値は,エージェントによる観測値と見なされます。距離の読み取り値の角度位置,最大距離,およびノイズのパラメーターを定義します。
扫描角度= [-3*pi/8: pi/8:3*pi/8];maxRange = 12;lidarNoiseVariance = 0.1 ^ 2;lidarNoiseSeeds =兰迪(intmax、大小(scanAngles));
エージェントのアクションは2次元ベクトル
です。ここで
と
は,ロボットの線形速度と角速度です。DDPGエージェントは角速度と線形速度の両方に正規化された入力を使用します。つまり、エージェントのアクションは -1 から 1 までのスカラーであり、これをmaxLinSpeed
およびmaxAngSpeed
のパラメーターで乗算して実際の制御を取得します。この線形速度および角速度の最大値を指定します。
また,ロボットの初期位置を(x yθ)
として指定します。
%最大转速参数maxLinSpeed = 0.3;maxAngSpeed = 0.3;%机器人的初始姿态initX = 17;initY = 15;initTheta =π/ 2;
ロボットのアクションを可視化するには,图を作成します。まず占有マップを表示して,ロボットの初期位置をプロットします。
无花果=图(“名称”,“simpleMap”);集(图,“可见”,“上”);ax =轴(图);表演(binaryOccupancyMap (mapMatrix),“父”、ax);持有在plotTransforms([initX, initY, 0], eul2quat([initTheta, 0,0]),“MeshFilePath”,“groundvehicle.stl”,“视图”,“二维”);淡定;持有从
アクションを実行して観測信号と報酬信号を与える環境モデルを作成します。提供されているモデル例の名前交货ampleHelperAvoidObstaclesMobileRobot
,シミュレーション時間のパラメーター,およびエージェントのブロック名を指定します。
mdl =“exampleHelperAvoidObstaclesMobileRobot”;Tfinal = 100;sampleTime = 0.1;agentBlk = mdl +“/代理”;
モデルを開きます。
open_system (mdl)
モデルには环境
ブロックおよび代理
ブロックが含まれています。代理
ブロックはまだ定義されていません。
环境
子系统ブロック内には,ロボットとセンサーのデータをシミュレートするモデルが表示されます。サブシステムはアクションを受け入れ,距離センサーの読み取り値に基づいて観測信号を生成し,障害物からの距離およびアクションコマンドの出力に基づいて報酬を計算します。
open_system (mdl +“/环境”)
rlNumericSpec
オブジェクトを使用し,距離センサーの角度位置ごとに十分な要素を使用して距離の読み取り値の下限と上限を指定することにより,観測パラメーターobsInfo
を定義します。
obsInfo = rlNumericSpec([nummel (scanAngles) 1],...“LowerLimit”0(元素个数(scanAngles), 1),...“UpperLimit”的(元素个数(scanAngles), 1) * maxRange);numObservations = obsInfo.Dimension (1);
アクションパラメーターactInfo
を定義します。アクションは,制御コマンドベクトル
を
に正規化したものです。
numActions = 2;actInfo = rlNumericSpec([numActions 1],...“LowerLimit”, 1...“UpperLimit”1);
rl金宝appSimulinkEnv
(强化学习工具箱)を使用して,環境インターフェイスオブジェクトを作成します。モデル,エージェントブロック名,観測パラメーター,アクションパラメーターを指定します。exampleHelperRLAvoidObstaclesResetFcn
を使用して,シミュレーションのリセット関数を設定します。この関数は,障害物の回避を開始するためにロボットを新しいランダムな位置に配置することにより,シミュレーションを再開します。
env = rl金宝appSimulinkEnv (mdl agentBlk、obsInfo actInfo);env。ResetFcn = @(在)exampleHelperRLAvoidObstaclesResetFcn (scanAngles, maxRange mapMatrix);env。UseFastRestart =“关闭”;
学習用の仿金宝app真软件®環境を設定するもう1つの例については,创建Simul金宝appink环境和培训代理(强化学习工具箱)を参照してください。
DDPGエージェントは,観測値とアクションを与えられると,クリティック値の関数表現を使用して長期の報酬を概算します。クリティックを作成するには,まつず2の入力(観測値とアクション),および1つの出力をもつ深層ニューラルネットワークを作成します。深層ニューラルネットワーク値の関数表現を作成する場合の詳細については,创建策略和价值功能表示(强化学习工具箱)を参照してください。
statePath = [featureInputLayer(numObservations,“归一化”,“没有”,“名称”,“状态”) fullyConnectedLayer (50,“名称”,“CriticStateFC1”) reluLayer (“名称”,“CriticRelu1”) fullyConnectedLayer (25,“名称”,“CriticStateFC2”));actionPath = [featureInputLayer(numActions,“归一化”,“没有”,“名称”,“行动”) fullyConnectedLayer (25,“名称”,“CriticActionFC1”));commonPath =[附加路径]“名称”,“添加”) reluLayer (“名称”,“CriticCommonRelu”) fullyConnectedLayer (1,“名称”,“CriticOutput”));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);
次に,rlRepresentationOptions
(强化学习工具箱)を使用してクリティック表現のオプションを指定します。
最後に,指定した深層ニューラルネットワークとオプションを使用してクリティック表現を作成します。クリティックに関するアクションと観測値の仕様も指定しなければなりません。これは環境インターフェイスから取得します。詳細については,rlQValueRepresentation
(强化学习工具箱)を参照してください。
criticOpts = rlRepresentationOptions (“LearnRate”1 e - 3,“L2RegularizationFactor”1的军医,“GradientThreshold”1);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”}, criticOpts);
DDPGエージェントは,観測値を与えられると,アクター表現を使用して,実行するアクションを決定します。アクターを作成するには,まつず1の入力(観測値),および1つの出力(アクション)をもつ深層ニューラルネットワークを作成します。
最後に,クリティックと同様の方法でアクターを作成します。詳細については,rlDeterministicActorRepresentation
(强化学习工具箱)を参照してください。
actorNetwork = [featureInputLayer(numobobservations,“归一化”,“没有”,“名称”,“状态”) fullyConnectedLayer (50,“名称”,“actorFC1”) reluLayer (“名称”,“actorReLU1”) fullyConnectedLayer (50,“名称”,“actorFC2”) reluLayer (“名称”,“actorReLU2”) fullyConnectedLayer (2“名称”,“actorFC3”) tanhLayer (“名称”,“行动”));actorOptions = rlRepresentationOptions (“LearnRate”1的军医,“L2RegularizationFactor”1的军医,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”}, actorOptions);
エージェントのオプションを指定します。
agentOpts = rlDDPGAgentOptions (...“SampleTime”sampleTime,...“TargetSmoothFactor”1 e - 3,...“DiscountFactor”, 0.995,...“MiniBatchSize”, 128,...“ExperienceBufferLength”1 e6);agentOpts.NoiseOptions.Variance = 0.1;agentOpts.NoiseOptions.VarianceDecayRate = 1 e-5;
rlDDPGAgent
オブジェクトを作成します。変数obstacleAvoidanceAgent
は,代理
ブロック用のモデルで使用されます。
obstacleAvoidanceAgent = rlDDPGAgent(演员、评论家、agentOpts);open_system (mdl +“/代理”)
エージェントの報酬関数は以下のようにモデル化されます。
エージェントには最も近い障害物を回避するための報酬が与えられ,これによって最悪のシナリオが最小限に抑えられます。さらに,エージェントには,線形速度が高速の場合は正の報酬が与えられ,角速度が高速の場合は負の報酬が与えられます。この報酬手法により,エージェントが円を描くように移動する動作が抑制されます。報酬を調整することが、エージェントに適切に学習させる上で重要であるため、報酬はアプリケーションによって異なります。
エージェントに学習させるには,まず学習オプションを指定します。この例では,以下のオプションを使用します。
最大10000
個のエピソードについて学習させ,各エピソードは最大maxSteps
タイムステップ分継続します。
(事件管理器)ダイアログボックスに学習の進行状況を表示し(情节
オプションを設定),コマンドライン表示を有効にします(详细的
オプションを真正に設定)。
50個の連続するエピソードにわたってエージェントの受け取る平均累積報酬が400を超えた場合は,学習を停止します。
詳細については,rlTrainingOptions
(强化学习工具箱)を参照してください。
maxEpisodes = 10000;maxSteps =装天花板(Tfinal / sampleTime);trainOpts = rlTrainingOptions (...“MaxEpisodes”maxEpisodes,...“MaxStepsPerEpisode”maxSteps,...“ScoreAveragingWindowLength”, 50岁,...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”, 400,...“详细”,真的,...“阴谋”,“训练进步”);
関数火车
(强化学习工具箱)を使用してエージェントに学習させます。学習は計算量の多いプロセスであり,完了するまで数分間かかります。この例の実行中に時間を節約するには,doTraining
を假
に設定することにより,事前学習済みのエージェントを読み込みます。自分でエージェントに学習させるには,doTraining
を真正的
に設定します。
doTraining = false;%切换此为真训练。如果doTraining培训代理商。env, trainingStats =火车(obstacleAvoidanceAgent trainOpts);其他的%为示例加载预训练的代理。负载exampleHelperAvoidObstaclesAgentobstacleAvoidanceAgent结束
强化学习情景管理器を使用すると,学習の進行状況をエピソード単位で追跡できます。エピソード数の増加に伴って,報酬値の増加を確認する必要があります。
学習済みのエージェントを使用して,障害物を回避しながらマップ内を走行するロボットをシミュレートします。
= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);
距離センサーの読み取り値を使用して,ロボットが環境内を走行するシミュレーションを可視化するには,補助関数exampleHelperAvoidObstaclesPosePlot
を使用します。
为我= 1:5:大小(。范围,3)u = out。构成(我:);r =。范围(:,:我);exampleHelperAvoidObstaclesPosePlot(u, mapMatrix, mapScale, r, scanAngles, ax);结束
このエージェントを使用して,別のマップでの走行をシミュレートすることができます。オフィス環境の激光雷达スキャンから生成された別のマップを,同じ学習済みモデルと共に使用します。このマップは,学習後に学習済みモデルを適用するという,より現実的なシナリオを表しています。
mapMatrix = office_area_map。occupancyMatrix > 0.5;mapScale = 10;initX = 20;initY = 30;initTheta = 0;无花果=图(“名称”,“office_area_map”);集(图,“可见”,“上”);ax =轴(图);显示(binaryOccupancyMap (mapMatrix mapScale),“父”、ax);持有在plotTransforms([initX, initY, 0], eul2quat([initTheta, 0,0]),“MeshFilePath”,“groundvehicle.stl”,“视图”,“二维”);淡定;持有从
= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);
为我= 1:5:大小(。范围,3)u = out。构成(我:);r =。范围(:,:我);exampleHelperAvoidObstaclesPosePlot(u, mapMatrix, mapScale, r, scanAngles, ax);结束