Обучите агента обучения с подкреплением с ограничительным осуществлением

В этом примере показано, как обучить агента обучения с подкреплением (RL) с действиями, ограниченными с помощью блока Constraint Enforcement. Этот блок вычисляет измененные действия управления, которые являются самыми близкими к действиям, выведенным агентом, удовлетворяющим границам действия и ограничениям. Учебные агенты обучения с подкреплением требуют пакета Reinforcement Learning Toolbox™.

В этом примере цель агента состоит в том, чтобы принести зеленый мяч максимально близко к изменяющейся целевой позиции красного мяча [1].

Динамика для зеленого мяча от скорости v к позиции x управляются законом Ньютона с маленьким коэффициентом демпфирования τ.

1s(τs+1).

Выполнимая область для положения мяча 0x1 и скорость зеленого мяча ограничивается областью значений [-1,1].

Положение целевого красного мяча однородно случайно через область значений [0,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)

Подсистема Среды выполняет следующие шаги.

  • Применяет входную скорость к модели среды и генерирует получившиеся выходные наблюдения

  • Вычисляет учебное вознаграждение r=[1-10(x-xr)2]+, где xr обозначает положение красного мяча

  • Устанавливает сигнал завершения isDone к true если положение мяча нарушает ограничение 0x1

Для этой модели наблюдения средой включают положение и скорость зеленого мяча и шумное измерение красного положения мяча. Задайте непрерывное пространство наблюдений для этих трех значений.

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 состоит в том, чтобы гарантировать, что модель среды, настройки сигнала действия и наблюдения и функция сброса модели, используемая во время сбора данных, совпадают с используемыми во время последующего обучения агента.

Изучите ограничительную функцию

В этом примере, сигнале положения мяча xk+1 должен удовлетворить 0xk+11. Чтобы допускать некоторые слабеют, ограничение собирается быть 0.1xk+10.9. Динамическая модель от скорости до положения имеет очень маленькое постоянное затухание, таким образом это может быть аппроксимировано xk+1xk+h(xk)uk. Поэтому ограничения для зеленого мяча даны следующим уравнением.

[xk-xk]+[h(xk)-h(xk)]uk[0.9-0.1]

Блок Constraint Enforcement принимает ограничения формы fx+gxuc. Для вышеупомянутого уравнения коэффициенты этой ограничительной функции следующие.

fx=[xk-xk],gx=[h(xk)-h(xk)],c=[0.9-0.1]

Функция h(xk) аппроксимирован глубокой нейронной сетью, которая обучена на данных, собранных путем симуляции агента RL в среде. Изучить неизвестную функцию h(xk), агент RL передает случайное внешнее действие среде, которая равномерно распределена в области значений [-1,1].

Чтобы собрать данные, используйте collectDataBall функция помощника. Эта функция симулирует среду и агента и собирает получившиеся входные и выходные данные. Получившиеся обучающие данные имеют три столбца: xk, uk, и xk+1.

В данном примере загрузите предварительно собранные обучающие данные. Чтобы собрать данные самостоятельно, установите 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)

Чтобы просмотреть ограничительную реализацию, откройте Ограничительную подсистему. Здесь, обученная глубокая нейронная сеть аппроксимирует h(xk), и блок 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 гарантирует что положение мяча x никогда не нарушает ограничение 0x1.

Симулируйте обученного агента с помощью simWithTrainedAgentBall функция помощника.

simWithTrainedAgentBall(env,agent)

Figure Ball One Dim contains an axes object. The axes object contains 3 objects of type line, rectangle.

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. Axes object 2 with title Time Series Plot:IsDone contains an object of type stair.

Агент успешно отслеживает положение красного мяча.

Обучите агента без ограничительного осуществления

Чтобы видеть преимущество обучения агента с ограничительным осуществлением, можно обучить агента без ограничений и сравнить учебные результаты с ограничительным случаем принудительного исполнения.

Чтобы обучить агента без ограничений, используйте 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)

Figure Ball One Dim contains an axes object. The axes object contains 3 objects of type line, rectangle.

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. Axes object 2 with title Time Series Plot:IsDone contains an object of type stair.

Агент успешно отслеживает положение красного мяча с большим количеством установившегося смещения, чем агент, обученный с ограничениями.

Заключение

В этом примере обучение агент 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

Смотрите также

Блоки

Похожие темы