В этом примере показано, как обучить агента глубоко детерминированного градиента политики (DDPG) генерировать траектории для летающего робота, смоделированного в Simulink®. Для получения дополнительной информации об агентах DDPG смотрите Глубоко Детерминированных Агентов Градиента политики (Reinforcement Learning Toolbox).
Среда обучения с подкреплением для этого примера является летающим роботом со своим начальным условием, рандомизированным вокруг звонка радиуса 15
m. Ориентация робота также рандомизируется. Робот имеет два ускорителя, смонтированные на стороне тела, которые используются, чтобы продвинуть и регулировать робота. Цель обучения должна управлять роботом от своего начального условия, до начала координат стоящего перед востоком.
Откройте модель.
mdl = 'rlFlyingRobotEnv';
open_system(mdl)
Установите начальные переменные состояния модели.
theta0 = 0; x0 = -15; y0 = 0;
Задайте шаг расчета Ts
и длительность симуляции Tf
.
Ts = 0.4; Tf = 30;
Для этой модели:
Целевой ориентацией является 0
рад (направление робота на восток).
Тяга от каждого привода ограничена от -1
к 1
N
Наблюдения средой являются положением, ориентация (синус и косинус ориентации), скорость и скорость вращения робота.
Вознаграждение если на каждом временном шаге
где:
положение робота вдоль оси X.
положение робота вдоль оси Y.
ориентация робота.
усилие по управлению от левого ускорителя.
усилие по управлению от правильного ускорителя.
вознаграждение, когда робот близко к цели.
штраф, когда робот управляет вне 20
m или в x или в направлении Y. Симуляция отключена когда .
штраф QR, который штрафует расстояние от усилия по управлению и цели.
Обучать агента FlyingRobotEnv
модель, используйте createIntegratedEnv
функционируйте, чтобы автоматически сгенерировать интегрированную модель с блоком RL Agent, который готов к обучению.
integratedMdl = 'IntegratedFlyingRobot';
[~,agentBlk,observationInfo,actionInfo] = createIntegratedEnv(mdl,integratedMdl);
Прежде, чем создать объект среды, задайте имена для спецификаций наблюдений и спецификаций действия, и связал действия тяги между -1
и 1
.
Сигналы наблюдения для этой среды .
numObs = prod(observationInfo.Dimension);
observationInfo.Name = 'observations';
Сигналы действия для этой среды .
numAct = prod(actionInfo.Dimension);
actionInfo.LowerLimit = -ones(numAct,1);
actionInfo.UpperLimit = ones(numAct,1);
actionInfo.Name = 'thrusts';
Создайте интерфейс среды для летающего робота с помощью интегрированной модели.
env = rlSimulinkEnv(integratedMdl,agentBlk,observationInfo,actionInfo);
Создайте пользовательскую функцию сброса, которая рандомизирует исходное положение робота вдоль звонка радиуса 15
m и начальная ориентация. Для получения дополнительной информации на функции сброса, смотрите flyingRobotResetFcn
.
env.ResetFcn = @(in) flyingRobotResetFcn(in);
Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.
rng(0)
Агент DDPG аппроксимирует долгосрочные премиальные заданные наблюдения и действия при помощи представления функции ценности критика. Чтобы создать критика, сначала создайте глубокую нейронную сеть с двумя входными параметрами (наблюдение и действие) и один выход. Для получения дополнительной информации о создании представления функции ценности нейронной сети смотрите, Создают политику и Представления Функции ценности (Reinforcement Learning Toolbox).
% Specify the number of outputs for the hidden layers. hiddenLayerSize = 100; observationPath = [ featureInputLayer(numObs,'Normalization','none','Name','observation') fullyConnectedLayer(hiddenLayerSize,'Name','fc1') reluLayer('Name','relu1') fullyConnectedLayer(hiddenLayerSize,'Name','fc2') additionLayer(2,'Name','add') reluLayer('Name','relu2') fullyConnectedLayer(hiddenLayerSize,'Name','fc3') reluLayer('Name','relu3') fullyConnectedLayer(1,'Name','fc4')]; actionPath = [ featureInputLayer(numAct,'Normalization','none','Name','action') fullyConnectedLayer(hiddenLayerSize,'Name','fc5')]; % Create the layer graph. criticNetwork = layerGraph(observationPath); criticNetwork = addLayers(criticNetwork,actionPath); % Connect actionPath to observationPath. criticNetwork = connectLayers(criticNetwork,'fc5','add/in2');
Задайте опции для критика, использующего rlRepresentationOptions
(Reinforcement Learning Toolbox).
criticOptions = rlRepresentationOptions('LearnRate',1e-03,'GradientThreshold',1);
Создайте представление критика с помощью заданной нейронной сети и опций. Необходимо также задать действие и спецификацию наблюдений для критика. Для получения дополнительной информации смотрите rlQValueRepresentation
(Reinforcement Learning Toolbox).
critic = rlQValueRepresentation(criticNetwork,observationInfo,actionInfo,... 'Observation',{'observation'},'Action',{'action'},criticOptions);
Агент DDPG решает который действие взять заданные наблюдения при помощи представления актера. Чтобы создать агента, сначала создайте глубокую нейронную сеть с одним входом (наблюдение) и один выход (действие).
Создайте агента так же критику. Для получения дополнительной информации смотрите rlDeterministicActorRepresentation
(Reinforcement Learning Toolbox).
actorNetwork = [ featureInputLayer(numObs,'Normalization','none','Name','observation') fullyConnectedLayer(hiddenLayerSize,'Name','fc1') reluLayer('Name','relu1') fullyConnectedLayer(hiddenLayerSize,'Name','fc2') reluLayer('Name','relu2') fullyConnectedLayer(hiddenLayerSize,'Name','fc3') reluLayer('Name','relu3') fullyConnectedLayer(numAct,'Name','fc4') tanhLayer('Name','tanh1')]; actorOptions = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1); actor = rlDeterministicActorRepresentation(actorNetwork,observationInfo,actionInfo,... 'Observation',{'observation'},'Action',{'tanh1'},actorOptions);
Чтобы создать агента DDPG, сначала задайте опции агента DDPG с помощью rlDDPGAgentOptions
(Reinforcement Learning Toolbox).
agentOptions = rlDDPGAgentOptions(... 'SampleTime',Ts,... 'TargetSmoothFactor',1e-3,... 'ExperienceBufferLength',1e6 ,... 'DiscountFactor',0.99,... 'MiniBatchSize',256); agentOptions.NoiseOptions.Variance = 1e-1; agentOptions.NoiseOptions.VarianceDecayRate = 1e-6;
Затем создайте агента с помощью заданного представления актера, представления критика и опций агента. Для получения дополнительной информации смотрите rlDDPGAgent
(Reinforcement Learning Toolbox).
agent = rlDDPGAgent(actor,critic,agentOptions);
Чтобы обучить агента, сначала задайте опции обучения. В данном примере используйте следующие опции:
Запустите каждое обучение в большей части 20000
эпизоды, с каждым эпизодом, длящимся в большей части ceil(Tf/Ts)
временные шаги.
Отобразите прогресс обучения в диалоговом окне Episode Manager (установите Plots
опция), и отключают отображение командной строки (установите Verbose
опция к false
).
Остановите обучение, когда агент получит среднее совокупное вознаграждение, больше, чем 415
более чем 10 последовательных эпизодов. На данном этапе агент может управлять летающим роботом к целевой позиции.
Сохраните копию агента для каждого эпизода, где совокупное вознаграждение больше 415
.
Для получения дополнительной информации смотрите rlTrainingOptions
(Reinforcement Learning Toolbox).
maxepisodes = 20000; maxsteps = ceil(Tf/Ts); trainingOptions = rlTrainingOptions(... 'MaxEpisodes',maxepisodes,... 'MaxStepsPerEpisode',maxsteps,... 'StopOnError',"on",... 'Verbose',false,... 'Plots',"training-progress",... 'StopTrainingCriteria',"AverageReward",... 'StopTrainingValue',415,... 'ScoreAveragingWindowLength',10,... 'SaveAgentCriteria',"EpisodeReward",... 'SaveAgentValue',415);
Обучите агента с помощью train
(Reinforcement Learning Toolbox) функция. Обучение является в вычислительном отношении интенсивным процессом, который занимает несколько часов, чтобы завершиться. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно обученного агента установкой doTraining
к false
. Чтобы обучить агента самостоятельно, установите doTraining
к true
.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainingOptions); else % Load the pretrained agent for the example. load('FlyingRobotDDPG.mat','agent') end
Чтобы подтвердить производительность обученного агента, симулируйте агента в среде. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions
(Reinforcement Learning Toolbox) и sim
(Reinforcement Learning Toolbox).
simOptions = rlSimulationOptions('MaxSteps',maxsteps);
experience = sim(env,agent,simOptions);
train
(Reinforcement Learning Toolbox) | rlDDPGAgent
(Reinforcement Learning Toolbox)