デュアルインテグレーターシステムを制御するためのMATLAB強化学習戦闘(4)トレーニングDDPGインテリジェントボディ

この例は、MATLAB®でモデル化された2次動的システムを制御するためにDeep Deterministic Policy Gradient(DDPG)エージェントをトレーニングする方法を示しています。

DDPGエージェントの詳細については、Deep Deterministic Strategy GradientAgentを参照してくださいSimulink®でDDPGエージェントトレーニングする方法を示す例については、DDPGエージェントバランス振り子のトレーニングを参照してください

ダブルインテグレーターのMATLAB環境

この例の強化学習環境は、ゲインのある2次のデュアルインテグレーターシステムです。トレーニングの目標は、力の入力を適用することにより、2次システムでの媒体の位置を制御することです。
ここに画像の説明を挿入します
この環境の場合:

  1. 4〜4ユニットの初期位置から開始します。
  2. 媒体から環境への力信号は2〜2Nです。
  3. 環境から観察されるのは、質量の位置と速度です。
  4. 質量が元の位置から5メートル以上移動した場合、またはx <0.01の場合、エピソードは終了します。
  5. 各ステップで提供される報酬r(t)は、r(t)の離散化です。
    ここに画像の説明を挿入します

ここに:

  1. xは品質の状態ベクトルです。

  2. uは媒体に加えられる力です。

  3. Qは制御性能の重みです; Q = [10 0; 01]。

  4. Rは制御効果の重みです。R= 0.01。

環境インターフェースの作成

デュアルインテグレーターシステム用に事前定義された環境インターフェースを作成します。

env = rlPredefinedEnv("DoubleIntegrator-Continuous")

ここに画像の説明を挿入します

env.MaxForce = Inf;

インターフェイスには、エージェントが-InfからInfまでの力の値を媒体に適用できる連続アクションスペースがあります。

環境インターフェースから観察と行動の情報を取得します。

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

固定ランダムジェネレータシードの再現性。

rng(0)

DDPGエージェントを作成する

DDPGエージェントは、コメンター値関数表記を使用して、特定の観測と操作に基づいて長期的な報酬を推定します。コメント投稿者を作成するには、最初に2つの入力(状態とアクション)と1つの出力を持つディープニューラルネットワークを作成する必要があります。ニューラルネットワークの値関数表現の作成の詳細については、「戦略と値関数表現の作成」を参照してください

statePath = imageInputLayer([numObservations 1 1],'Normalization','none','Name','state');
actionPath = imageInputLayer([numActions 1 1],'Normalization','none','Name','action');
commonPath = [concatenationLayer(1,2,'Name','concat')
             quadraticLayer('Name','quadratic')
             fullyConnectedLayer(1,'Name','StateValue','BiasLearnRateFactor',0,'Bias',0)];

criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);

criticNetwork = connectLayers(criticNetwork,'state','concat/in1');
criticNetwork = connectLayers(criticNetwork,'action','concat/in2');

コメント投稿者のネットワーク構成を確認してください。

figure
plot(criticNetwork)

ここに画像の説明を挿入します
rlRepresentationOptionsを使用して、レビュー担当者が表すオプション指定します。

criticOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);

指定されたニューラルネットワークとオプションを使用して、コメンター表現を作成します。また、環境インターフェースから取得したレビューアの操作および観察情報を指定する必要があります。詳細については、rlQValueRepresentationを参照してください

critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,'Observation',{
    
    'state'},'Action',{
    
    'action'},criticOpts);

DDPGエージェントは、アクター表現を使用して、(指定された観測で)実行するアクションを決定します。アクターを作成するには、最初に1つの入力(観測)と1つの出力(アクション)を持つディープニューラルネットワークを作成する必要があります。

コメント投稿者と同様の方法でアクターを作成します。

actorNetwork = [
    imageInputLayer([numObservations 1 1],'Normalization','none','Name','state')
    fullyConnectedLayer(numActions,'Name','action','BiasLearnRateFactor',0,'Bias',0)];

actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);

actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,'Observation',{
    
    'state'},'Action',{
    
    'action'},actorOpts);

DDPGエージェントを作成するには、最初にrlDDPGAgentOptionsを使用てDDPGエージェントオプション指定します。

agentOpts = rlDDPGAgentOptions(...
    'SampleTime',env.Ts,...
    'TargetSmoothFactor',1e-3,...
    'ExperienceBufferLength',1e6,...
    'DiscountFactor',0.99,...
    'MiniBatchSize',32);
agentOpts.NoiseOptions.Variance = 0.3;
agentOpts.NoiseOptions.VarianceDecayRate = 1e-6;

指定されたコメンター表現、コメンター表現、およびエージェントオプションを使用して、DDPGエージェントを作成します。詳細については、rlDDPGAgentを参照してください

agent = rlDDPGAgent(actor,critic,agentOpts);

トレーニングエージェント

エージェントをトレーニングするには、最初にトレーニングオプションを指定します。この例では、次のオプションを使用します。

  1. トレーニングセッションで最大1000エピソードを実行し、各エピソードは最大200タイムステップ続きます。

  2. [プロットマネージャー]ダイアログボックスにトレーニングの進行状況を表示し([プロット]オプションを設定)、コマンドライン表示を無効にします([詳細]オプションを設定します)。

  3. エージェントが受け取った移動平均累積報酬が–66を超える場合は、トレーニングを停止してください。この時点で、エージェントは最小の制御力でマスの位置を制御できます。

詳細については、rlTrainingOptionsを参照してください

trainOpts = rlTrainingOptions(...
    'MaxEpisodes', 5000, ...
    'MaxStepsPerEpisode', 200, ...
    'Verbose', false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',-66);

描画機能を使用して、トレーニングまたはシミュレーション中にデュアルインテグレータ環境を視覚化できます。

plot(env)

ここに画像の説明を挿入します
トレーニング機能を使用して、エージェントをトレーニングします。このエージェントのトレーニングは、計算量の多いプロセスであり、完了するまでに多くの時間がかかります。この例の実行時間を節約するには、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('DoubleIntegDDPG.mat','agent');
end

ここに画像の説明を挿入します

DDPGエージェントシミュレーション

トレーニングされたエージェントのパフォーマンスを検証するには、デュアルインテグレーター環境でシミュレートします。エージェントシミュレーションの詳細については、rlSimulationOptionsおよびsimを参照してください

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

ここに画像の説明を挿入します

totalReward = sum(experience.Reward)

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/wangyifan123456zz/article/details/109572842