В этом примере показано, как обучить агента обучения с подкреплением (RL) с действиями, ограниченными с помощью блока Constraint Enforcement. Этот блок вычисляет измененные действия управления, которые являются самыми близкими к действиям, выведенным агентом, удовлетворяющим границам действия и ограничениям. Учебные агенты обучения с подкреплением требуют пакета Reinforcement Learning Toolbox™.
В этом примере цель агента состоит в том, чтобы принести зеленый мяч максимально близко к изменяющейся целевой позиции красного мяча [1].
Динамика для зеленого мяча от скорости к позиции управляются законом Ньютона с маленьким коэффициентом демпфирования .
.
Выполнимая область для положения мяча и скорость зеленого мяча ограничивается областью значений .
Положение целевого красного мяча однородно случайно через область значений . Агент может наблюдать только шумную оценку этого целевого положения.
Установите случайный seed и сконфигурируйте параметры модели
% set random seed rng('default') % parameters Tv = 0.8; % sample time for visualizer Ts = 0.1; % sample time for controller tau = 0.01; % damping constant for green ball velLimit = 1; % maximum speed for green ball s0 = 200; % random seed s1 = 100; % random seed x0 = 0.2; % initial position for ball
В этом примере ограничительная функция представлена с помощью обученной глубокой нейронной сети. Чтобы обучить сеть, необходимо сначала собрать обучающие данные средой.
Для этого сначала создайте среду RL с помощью rlBallOneDim
модель. Эта модель применяет случайные внешние действия через блок RL Agent к среде.
mdl = 'rlBallOneDim';
open_system(mdl)
Подсистема Среды выполняет следующие шаги.
Применяет входную скорость к модели среды и генерирует получившиеся выходные наблюдения
Вычисляет учебное вознаграждение , где обозначает положение красного мяча
Устанавливает сигнал завершения isDone
к true
если положение мяча нарушает ограничение
Для этой модели наблюдения средой включают положение и скорость зеленого мяча и шумное измерение красного положения мяча. Задайте непрерывное пространство наблюдений для этих трех значений.
obsInfo = rlNumericSpec([3 1]);
Действие, что агент применяется к зеленому мячу, является своей скоростью. Создайте непрерывное пространство действий и примените необходимые скоростные пределы.
actInfo = rlNumericSpec([1 1],'LowerLimit',-velLimit,'UpperLimit',velLimit);
Создайте среду RL для этой модели.
agentblk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentblk,obsInfo,actInfo);
Задайте функцию сброса, которая случайным образом инициализирует среду в начале каждого эпизода тренировки или симуляции.
env.ResetFcn = @(in)localResetFcn(in);
Затем создайте агента обучения с подкреплением DDPG, который поддерживает непрерывные действия и наблюдения, с помощью createDDPGAgentBall
функция помощника. Эта функция создает критика и представления актера на основе действия и спецификаций наблюдений и использует представления, чтобы создать агента DDPG.
agent = createDDPGAgentBall(Ts,obsInfo,actInfo);
В rlBallOneDim
модель, блок RL Agent не генерирует действия. Вместо этого это сконфигурировано, чтобы передать случайное внешнее действие среде. Цель для использования модели сбора данных с неактивным блоком RL Agent состоит в том, чтобы гарантировать, что модель среды, настройки сигнала действия и наблюдения и функция сброса модели, используемая во время сбора данных, совпадают с используемыми во время последующего обучения агента.
В этом примере, сигнале положения мяча должен удовлетворить . Чтобы допускать некоторые слабеют, ограничение собирается быть Динамическая модель от скорости до положения имеет очень маленькое постоянное затухание, таким образом это может быть аппроксимировано . Поэтому ограничения для зеленого мяча даны следующим уравнением.
Блок Constraint Enforcement принимает ограничения формы . Для вышеупомянутого уравнения коэффициенты этой ограничительной функции следующие.
Функция аппроксимирован глубокой нейронной сетью, которая обучена на данных, собранных путем симуляции агента RL в среде. Изучить неизвестную функцию , агент RL передает случайное внешнее действие среде, которая равномерно распределена в области значений .
Чтобы собрать данные, используйте collectDataBall
функция помощника. Эта функция симулирует среду и агента и собирает получившиеся входные и выходные данные. Получившиеся обучающие данные имеют три столбца: , , и .
В данном примере загрузите предварительно собранные обучающие данные. Чтобы собрать данные самостоятельно, установите collectData
к true
.
collectData = false; if collectData count = 1050; data = collectDataBall(env,agent,count); else load trainingDataBall data end
Обучите глубокую нейронную сеть аппроксимировать ограничительную функцию использование trainConstraintBall
функция помощника. Этот функциональные форматы данные для обучения затем создают и обучают глубокую нейронную сеть. Обучение глубокая нейронная сеть требует программного обеспечения Deep Learning Toolbox™.
В данном примере, чтобы гарантировать воспроизводимость, загрузите предварительно обученную сеть. Чтобы обучить сеть самостоятельно, установите trainConstraint
к true
.
trainConstraint = false; if trainConstraint network = trainConstraintBall(data); else load trainedNetworkBall network end
Следующий рисунок показывает пример процесса обучения.
Подтвердите обученную нейронную сеть с помощью validateNetworkBall
функция помощника. Этот функциональные процессы входные обучающие данные с помощью обученной глубокой нейронной сети. Это затем сравнивает сетевой выход с учебным выходом и вычисляет среднеквадратическую ошибку (RMSE).
validateNetworkBall(data,network)
Test Data RMSE = 9.996700e-02
Маленькое значение RMSE указывает, что сеть успешно изучила ограничительную функцию.
Чтобы обучить агента с ограничительным осуществлением, используйте rlBallOneDimWithConstraint
модель. Эта модель ограничивает действия от агента прежде, чем применить их к среде.
mdl = 'rlBallOneDimWithConstraint';
open_system(mdl)
Чтобы просмотреть ограничительную реализацию, откройте Ограничительную подсистему. Здесь, обученная глубокая нейронная сеть аппроксимирует , и блок Constraint Enforcement осуществляет ограничительную функцию и скоростные границы.
Для этого примера используются следующие Ограничительные настройки параметров блоков Осуществления.
Количество ограничений — 2
Количество действий — 1
Связанное ограничение — [0.9;-0.1]
Создайте среду RL с помощью этой модели. Спецификации наблюдений и спецификации действия совпадают с используемыми для предыдущей среды сбора данных.
agentblk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentblk,obsInfo,actInfo);
env.ResetFcn = @(in)localResetFcn(in);
Задайте опции для обучения агент. Обучите агента RL 300 эпизодам с 300 шагами на эпизод.
trainOpts = rlTrainingOptions(... 'MaxEpisodes',300, ... 'MaxStepsPerEpisode', 300, ... 'Verbose', false, ... 'Plots','training-progress');
Обучите агента. Обучение является длительным процессом. В данном примере загрузите предварительно обученного агента с помощью loadAgentParams
функция помощника. Чтобы обучить агента самостоятельно, установите trainAgent
к true
.
trainAgent = false; if trainAgent trainingStats = train(agent,env,trainOpts); else loadAgentParams(agent,'rlAgentBallParams') end
Следующий рисунок показывает учебные результаты. Учебный процесс сходится к хорошему агенту в 20 эпизодах.
Поскольку Общее количество Шагов равняется продукту Шагов Номера и Эпизода Эпизода, каждый эпизод тренировки запуски в конец без раннего завершения. Поэтому блок Constraint Enforcement гарантирует что положение мяча никогда не нарушает ограничение .
Симулируйте обученного агента с помощью simWithTrainedAgentBall
функция помощника.
simWithTrainedAgentBall(env,agent)
Агент успешно отслеживает положение красного мяча.
Чтобы видеть преимущество обучения агента с ограничительным осуществлением, можно обучить агента без ограничений и сравнить учебные результаты с ограничительным случаем принудительного исполнения.
Чтобы обучить агента без ограничений, используйте rlBallOneDimWithoutConstraint
модель. Эта модель применяет действия от агента непосредственно к среде.
mdl = 'rlBallOneDimWithoutConstraint';
open_system(mdl)
Создайте среду RL с помощью этой модели.
agentblk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentblk,obsInfo,actInfo);
env.ResetFcn = @(in)localResetFcn(in);
Создайте нового агента DDPG, чтобы обучаться. Этот агент имеет ту же настройку как агент, используемый в предыдущем обучении.
agent = createDDPGAgentBall(Ts,obsInfo,actInfo);
Обучите агента с помощью тех же опций обучения в качестве в ограничительном случае принудительного исполнения. В данном примере как с предыдущим обучением, загрузите предварительно обученного агента. Чтобы обучить агента самостоятельно, установите trainAgent
к истине.
trainAgent = false; if trainAgent trainingStats2 = train(agent,env,trainOpts); else loadAgentParams(agent,'rlAgentBallCompParams') end
Следующий рисунок показывает учебные результаты. Учебный процесс сходится к хорошему агенту после 50 эпизодов. После той точки агент имеет низкую производительность для некоторых эпизодов, например, вокруг эпизодов 140 и 230.
Поскольку Общее количество Шагов меньше продукта Шагов Номера и Эпизода Эпизода, обучение включает эпизоды, которые завершили работу рано из-за нарушений ограничений.
Симулируйте обученного агента.
simWithTrainedAgentBall(env,agent)
Агент успешно отслеживает положение красного мяча с большим количеством установившегося смещения, чем агент, обученный с ограничениями.
В этом примере обучение агент RL с блоком Constraint Enforcement гарантирует, что действия применились к среде, никогда не производят нарушение ограничений. В результате учебный процесс сходится к хорошему агенту быстро. Обучение тот же агент без ограничений производит более медленную сходимость и более плохую эффективность.
bdclose('rlBallOneDim') bdclose('rlBallOneDimWithConstraint') bdclose('rlBallOneDimWithoutConstraint') close('Ball One Dim')
function in = localResetFcn(in) % Reset function in = setVariable(in,'x0',rand); in = setVariable(in,'s0',randi(5000)); in = setVariable(in,'s1',randi(5000)); end
[1] Dalal, Гал, Krishnamurthy Dvijotham, Matej Vecerik, Тодд Хестер, Космин Пэдурэру и Ювал Тасса. "Безопасное Исследование в Непрерывных пространствах действий". Предварительно распечатайте, представленный 26 января 2018. https://arxiv.org/abs/1801.08757