exponenta event banner

Обучение агента обучения усилению с применением ограничений

В этом примере показано, как обучить агента обучения усилению (RL) действиям, ограниченным с помощью блока «Применение ограничений». Этот блок вычисляет измененные действия управления, которые наиболее близки к действиям, выводимым агентом, подверженным ограничениям и ограничениям действий. Для обучения агентов обучения усилению требуется программное обеспечение Toolbox™ обучения усилению.

В этом примере целью агента является приведение зеленого шара как можно ближе к изменяющемуся целевому положению красного шара [1].

Динамика для зелёного шара от скорости v до положения x регулируется законом Ньютона с небольшим коэффициентом демпфирования («damping coefficior»).

1 с (thes + 1).

Возможная область для положения шара 0≤x≤1 и скорость зеленого шара ограничена диапазоном [-1,1].

Положение целевого красного шара является равномерно случайным в диапазоне [0,1]. Агент может наблюдать только шумную оценку этого целевого положения.

Установка случайного начального значения и настройка параметров модели

% 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.

mdl = 'rlBallOneDim';
open_system(mdl)

Подсистема Environment выполняет следующие действия.

  • Применяет входную скорость к модели среды и создает результирующие выходные наблюдения

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

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

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

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

Изучение функции ограничения

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

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

Блок «Применение ограничений» принимает ограничения fx+gxu≤c формы. Для вышеприведенного уравнения коэффициенты этой функции ограничения следующие.

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 серий.

Поскольку общее количество шагов равно произведению номера эпизода и шагов эпизода, каждый учебный эпизод проходит до конца без досрочного прекращения. Поэтому блок «Обеспечение ограничения» гарантирует, что положение шара x никогда не нарушает 0≤x≤1 ограничения.

Моделирование обучаемого агента с помощью 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 к true.

trainAgent = false;
if trainAgent
    trainingStats2 = train(agent,env,trainOpts);
else
    loadAgentParams(agent,'rlAgentBallCompParams')
end

На следующем рисунке показаны результаты обучения. Тренировочный процесс сходится к хорошему агенту после 50 эпизодов. После этого момента агент имеет плохую производительность для некоторых эпизодов, например, вокруг эпизодов 140 и 230.

Так как общее количество шагов меньше, чем произведение номера эпизода и шагов эпизода, обучение включает эпизоды, которые завершились рано из-за нарушений ограничений.

Смоделировать обученного агента.

simWithTrainedAgentBall(env,agent)

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

Заключение

В этом примере обучение агента RL с помощью блока «Применение ограничений» гарантирует, что действия, применяемые к среде, никогда не приведут к нарушению ограничений. В итоге тренировочный процесс сходится к хорошему агенту быстро. Обучение одного и того же агента без ограничений приводит к замедлению сходимости и снижению производительности.

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] Далал, Гал, Кришнамурти Двиджотам, Матей Вецерик, Тодд Хестер, Космин Падурару и Юваль Тасса. «Безопасное исследование в пространствах непрерывного действия». Препринт, представлен 26 января 2018 года. https://arxiv.org/abs/1801.08757

См. также

Блоки

Связанные темы