Этот пример показывает, как обучить агента глубокого детерминированного градиента политики (DDPG) генерировать траектории для летающего робота, смоделированного в Simulink ®. Для получения дополнительной информации об агентах DDPG смотрите Deep Deterministic Policy Gradient Agents (Reinforcement Learning Toolbox).
Окружение обучения с подкреплением для этого примера является летающим роботом с его начальным условием, рандомизированным вокруг звонка радиуса 15
м. Ориентация робота также рандомизирована. Робот имеет два двигателя, установленных со стороны корпуса, которые используются для движения и управления роботом. Цель обучения состоит в том, чтобы прогнать робота от его начального условия к источнику, обращенной к востоку.
Откройте модель.
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.StandardDeviation = 1e-1; agentOptions.NoiseOptions.StandardDeviationDecayRate = 1e-6;
Затем создайте агента с помощью заданного представления актера, представления критика и опций агента. Для получения дополнительной информации смотрите rlDDPGAgent
(Reinforcement Learning Toolbox).
agent = rlDDPGAgent(actor,critic,agentOptions);
Чтобы обучить агента, сначала укажите опции обучения. В данном примере используйте следующие опции:
Запускайте каждое обучение самое большее для 20000
эпизоды с каждым эпизодом, длящимся самое большее ceil(Tf/Ts)
временные шаги.
Отображение процесса обучения в диалоговом окне Диспетчер эпизодов (установите 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);
rlDDPGAgent
(Reinforcement Learning Toolbox) | train
(Набор Reinforcement Learning Toolbox)