В этом примере показано, как обучить агента обучения усилению (RL) действиям, ограниченным с помощью блока «Применение ограничений». Этот блок вычисляет измененные действия управления, которые наиболее близки к действиям, выводимым агентом, подверженным ограничениям и ограничениям действий. Для обучения агентов обучения усилению требуется программное обеспечение Toolbox™ обучения усилению.
В этом примере целью агента является приведение зеленого шара как можно ближе к изменяющемуся целевому положению красного шара [1].
Динамика для зелёного шара от скорости до положения регулируется законом Ньютона с небольшим коэффициентом демпфирования (« coefficior»).
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 выполняет следующие действия.
Применяет входную скорость к модели среды и создает результирующие выходные наблюдения
Вычисляет награду за обучение 2] +, где xr обозначает положение красного шара
Установка сигнала окончания 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 является обеспечение соответствия модели среды, конфигураций сигналов действий и наблюдений и функции сброса модели, используемой во время сбора данных, тем, которые используются во время последующего обучения агента.
В этом примере сигнал положения шара 1 должен xk+1≤1. Чтобы разрешить некоторое ослабление, ограничение устанавливается равным xk+1≤0.9. Динамическая модель из скорости в положение имеет очень малую демпфирующую постоянную, таким образом, она может быть аппроксимирована ) uk. Поэтому ограничения для зеленого шара задаются следующим уравнением.
uk≤[0.9-0.1]
Блок «Применение ограничений» принимает ограничения формы. Для вышеприведенного уравнения коэффициенты этой функции ограничения следующие.
= [0,9-0,1]
Функция ) аппроксимируется глубокой нейронной сетью, которую обучают данным, собранным путем моделирования агента RL в окружающей среде. Чтобы узнать неизвестную функцию xk), агент RL передает случайное внешнее действие в среду, которая равномерно распределена в 1,1].
Для сбора данных используйте collectDataBall функция помощника. Эта функция моделирует среду и агента и собирает результирующие входные и выходные данные. Полученные данные обучения имеют три столбца: , и 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)
Чтобы просмотреть реализацию ограничения, откройте подсистему ограничения. Здесь обученная глубокая нейронная сеть аппроксимирует ), и блок «Обеспечение ограничения» (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 серий.

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