В этом примере показано, как извлечь ограничения из данных и применить эти ограничения для приложения управления PID. Функция ограничения изучается с помощью глубокой нейронной сети, которая требовала программного обеспечения Deep Learning Toolbox™. Затем ограничения применяются к действиям управления PID с помощью блока «Применение ограничений».
Для этого примера динамика растений описывается следующими уравнениями [1].
+ 1) u2
Целью установки является отслеживание следующих траекторий.
(start)
Пример применения известной функции ограничения к тому же приложению управления PID см. в разделе Применение ограничений для контроллеров PID.
Задайте случайное начальное значение и настройте параметры модели и начальные условия.
rng(0); % random seed r = 1.5; % radius for desired trajectory Ts = 0.1; % sample time Tf = 22; % duration x0_1 = -r; % initial condition for x1 x0_2 = 0; % initial condition for x2 maxSteps = Tf/Ts; % simulation steps
Перед изучением и применением ограничений следует разработать контроллеры PID для отслеживания опорных траекторий. trackingWithPIDs модель содержит два контроллера PID с усилениями, настроенными с помощью приложения PID Tuner. Дополнительные сведения о настройке контроллеров PID в моделях Simulink см. в разделе Введение в настройку PID на основе модели в Simulink.
mdl = 'trackingWithPIDs';
open_system(mdl)
Смоделировать контроллеры PID и построить график производительности отслеживания.
% Simulate the model. out = sim(mdl); % Extract trajectories. logData = out.logsout; x1_traj = logData{3}.Values.Data; x2_traj = logData{4}.Values.Data; x1_des = logData{1}.Values.Data; x2_des = logData{2}.Values.Data; % Plot trajectories. figure('Name','Tracking') xlim([-2,2]) ylim([-2,2]) plot(x1_des,x2_des,'r') xlabel('x1') ylabel('x2') hold on plot(x1_traj,x2_traj,'b:','LineWidth',2) hold on plot(x1_traj(1),x2_traj(1),'g*') hold on plot(x1_traj(end),x2_traj(end),'go') legend('desired','traj','start','end')

В этом примере рассматриваются ограничения приложения и изменяются управляющие действия контроллеров PID в соответствии с этими ограничениями.
Возможная область для установки задается ограничениями }. Поэтому траектории (k + 1)] ′ удовлетворять xk+1≤1.
Аппроксимировать динамику растений можно по следующему уравнению.
] uk.
При применении ограничений к этому уравнению создается следующая функция ограничений.
uk≤[11].
Блок «Применение ограничений» принимает ограничения формы. Для этого применения коэффициенты этой функции ограничения следующие.
c = [11].
Для этого примера коэффициенты функции ограничения неизвестны. Поэтому они должны быть получены из данных обучения. Для сбора данных обучения используйте rlCollectDataPID модель. Эта модель позволяет передавать нулевые или случайные входные данные в модель установки и записывать результирующие выходные данные установки.
mdl = 'rlCollectDataPID';
open_system(mdl)
Чтобы узнать неизвестную матрицу , установите входные данные установки на ноль. При этом динамика завода становится .
mdl = 'rlCollectDataPID';
open_system(mdl)Сбор данных обучения с помощью collectDataPID функция. Эта функция многократно моделирует модель и извлекает входные/выходные данные. Функция также форматирует обучающие данные в массив с шестью столбцами: ), k)(k((k + 1x2 (k + 1).
numSamples = 1000; data = collectDataPID(mdl,numSamples);
Найдите решение методом наименьших квадратов для матрицы , используя входные/выходные данные.
inputData = data(:,1:2); outputData = data(:,5:6); A = inputData\outputData;
Сбор данных обучения. Чтобы узнать неизвестную функцию , настройте модель на использование случайных входных значений, следующих за нормальным распределением.
% Configure model to use random input data. blk = [mdl '/Manual Switch']; set_param(blk,'sw','0'); % Collect data. data = collectDataPID(mdl,numSamples);
Обучить глубокую нейронную сеть аппроксимировать функцию gx с помощью trainConstraintPID функция помощника. Эта функция форматирует данные для обучения, затем создает и обучает глубокую нейронную сеть. Для обучения глубокой нейронной сети требуется программное обеспечение Deep Learning Toolbox™.
Входами в глубокую нейронную сеть являются состояния растений. Создайте входные учебные данные путем извлечения собранной информации о состоянии.
inputData = data(:,1:2);
Поскольку выход глубокой нейронной сети соответствует , необходимо вывести выходные обучающие данные с использованием собранных входных/выходных данных и вычисленной матрицы A.
u = data(:,3:4); x_next = data(:,5:6); fx = (A*inputData')'; outputData = (x_next - fx)./u;
В этом примере для обеспечения воспроизводимости загрузите предварительно обученную сеть. Чтобы обучить сеть самостоятельно, установите trainConstraint кому true.
trainConstraint = false; if trainConstraint network = trainConstraintPID(inputData,outputData); else load trainedNetworkPID network end
На следующем рисунке показан пример хода обучения.

Для моделирования контроллеров PID с применением ограничений используйте trackingWithLearnedConstraintPID модель. Эта модель ограничивает выходы контроллера перед их применением к установке.
mdl = 'trackingWithLearnedConstraintPID';
open_system(mdl)
Чтобы просмотреть реализацию ограничения, откройте подсистему ограничения. Здесь обученная глубокая нейронная сеть аппроксимирует на основе текущего состояния установки, и блок «Обеспечение ограничения» принудительно выполняет функцию ограничения.

Моделирование модели и печать результатов.
% Simulate the model. out = sim(mdl); % Extract trajectories. logData = out.logsout; x1_traj = zeros(size(out.tout)); x2_traj = zeros(size(out.tout)); for ct = 1:size(out.tout,1) x1_traj(ct) = logData{4}.Values.Data(:,:,ct); x2_traj(ct) = logData{5}.Values.Data(:,:,ct); end x1_des = logData{2}.Values.Data; x2_des = logData{3}.Values.Data; % Plot trajectories. figure('Name','Tracking with Constraint'); plot(x1_des,x2_des,'r') xlabel('x1') ylabel('x2') hold on plot(x1_traj,x2_traj,'b:','LineWidth',2) hold on plot(x1_traj(1),x2_traj(1),'g*') hold on plot(x1_traj(end),x2_traj(end),'go') legend('desired','traj','start','end','Location','best')

Блок «Применение ограничений» успешно ограничивает действия управления таким образом, что состояния установки остаются меньше единицы.
bdclose('rlCollectDataPID') bdclose('trackingWithLearnedConstraintPID')
[1] Роби, Александр, Хаймин Ху, Ларс Линдеманн, Ханьвэнь Чжан, Димос В. Димарогонас, Стивен Ту и Николай Матни. «Изучение функций контрольных барьеров из демонстраций экспертов». Препринт, представлен 7 апреля 2020 года. https://arxiv.org/abs/2004.03315