exponenta event banner

Изучение и применение ограничений для контроллеров МТС

В этом примере показано, как извлечь ограничения из данных и применить эти ограничения для приложения управления PID. Функция ограничения изучается с помощью глубокой нейронной сети, которая требовала программного обеспечения Deep Learning Toolbox™. Затем ограничения применяются к действиям управления PID с помощью блока «Применение ограничений».

Для этого примера динамика растений описывается следующими уравнениями [1].

x˙1=-x1+ (x12 + 1) u1x˙2=-x2+ (x22 + 1) u2

Целью установки является отслеживание следующих траекторий.

θ˙=0.1πx˙1d=-rcos (start) x˙2d=rsin (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 в соответствии с этими ограничениями.

Возможная область для установки задается ограничениями {x:x1≤1,x2≤1}. Поэтому траектории xk + 1 = [x1 (k + 1) x2 (k + 1)] ′ должны удовлетворять xk+1≤1.

Аппроксимировать динамику растений можно по следующему уравнению.

xk+1≈Axk+[g1 (xk) 00g2 (xk)] uk.

При применении ограничений к этому уравнению создается следующая функция ограничений.

Axk + [g1 (xk) 00g2 (xk)] uk≤[11].

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

fx = Axk, gx = [g1 (xk) 00g2 (xk)], c = [11].

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

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

mdl = 'rlCollectDataPID';
open_system(mdl)

Чтобы узнать неизвестную матрицу A, установите входные данные установки на ноль. При этом динамика завода становится xk+1≈Axk.

mdl = 'rlCollectDataPID';
open_system(mdl)

Сбор данных обучения с помощью collectDataPID функция. Эта функция многократно моделирует модель и извлекает входные/выходные данные. Функция также форматирует обучающие данные в массив с шестью столбцами: x1 (k), x2 (k), u1 (k), u2 (k), x1 (k + 1) и x2 (k + 1).

numSamples = 1000;
data = collectDataPID(mdl,numSamples);

Найдите решение методом наименьших квадратов для матрицы A, используя входные/выходные данные.

inputData = data(:,1:2);
outputData = data(:,5:6);
A = inputData\outputData;

Сбор данных обучения. Чтобы узнать неизвестную функцию gx, настройте модель на использование случайных входных значений, следующих за нормальным распределением.

% 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);

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

Для моделирования контроллеров PID с применением ограничений используйте trackingWithLearnedConstraintPID модель. Эта модель ограничивает выходы контроллера перед их применением к установке.

mdl = 'trackingWithLearnedConstraintPID';
open_system(mdl)

Чтобы просмотреть реализацию ограничения, откройте подсистему ограничения. Здесь обученная глубокая нейронная сеть аппроксимирует gx на основе текущего состояния установки, и блок «Обеспечение ограничения» принудительно выполняет функцию ограничения.

Моделирование модели и печать результатов.

% 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

См. также

Блоки

Приложения

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