В этом примере показано, как узнать ограничения из данных и применить эти ограничения для приложения управления ПИД. Функция ограничения выучена с помощью глубокой нейронной сети, которая требовала программного обеспечения Deep Learning Toolbox™. Затем можно применить ограничения к действиям по управлению ПИД с помощью блока «Принудительное применение ограничений».
В данном примере динамика объекта описывается следующими уравнениями [1].
Цель для объекта - отследить следующие траектории.
Пример, который применяет известную функцию ограничений к тому же приложению управления ПИД, см. в Enforce Constraints for ПИД-регуляторы.
Установите случайный seed и сконфигурируйте параметры модели и начальные условия.
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
Перед обучением и применением ограничений проекта ПИД-регуляторов для отслеживания траекторий ссылки. The trackingWithPIDs
модель содержит два ПИД-регуляторов с усилениями, настроенными с помощью приложения PID Tuner. Для получения дополнительной информации о настройке ПИД-регуляторов в моделях Simulink, см. Введение в основанную на модели настройку ПИД в Simulink.
mdl = 'trackingWithPIDs';
open_system(mdl)
Симулируйте ПИД-регуляторы и постройте график их эффективности отслеживания.
% 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')
В этом примере вы изучаете ограничения приложения и изменяете действия управления ПИД-регуляторов, чтобы удовлетворить этим ограничениям.
Допустимая область для объекта определяется ограничениями . Поэтому траектории должен удовлетворять .
Можно аппроксимировать динамику объекта следующим уравнением.
.
Применение ограничений к этому уравнению создает следующую функцию ограничения.
.
Блок Constraint Enforcement принимает ограничения формы . Для этого приложения коэффициенты этой ограничительной функции следующие.
.
В данном примере коэффициенты ограничительной функции неизвестны. Поэтому их необходимо вывести из обучающих данных. Чтобы собрать обучающие данные, используйте rlCollectDataPID
модель. Эта модель позволяет вам передать нулевые или случайные входы в модель объекта управления и записать результирующие выходы объекта.
mdl = 'rlCollectDataPID';
open_system(mdl)
Чтобы узнать неизвестную матрицу обнулите входы объекта нуля. Когда вы делаете это, динамика объекта становится .
mdl = 'rlCollectDataPID';
open_system(mdl)
Сбор обучающих данных с помощью collectDataPID
функция. Эта функция моделирует модель несколько раз и извлекает входные/выходные данные. Функция также форматирует обучающие данные в массив с шестью столбцами: , , , , , и .
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);
Обучите глубокую нейронную сеть, чтобы аппроксимировать функция, использующая trainConstraintPID
вспомогательная функция. Эта функция форматирует данные для обучения, затем создает и обучает глубокую нейронную сеть. Для настройки глубокой нейронной сети требуется программное обеспечение Deep Learning Toolbox™.
Входами в глубокую нейронную сеть являются состояния объекта. Создайте входные обучающие данные путем извлечения собранной информации о состоянии.
inputData = data(:,1:2);
Поскольку выход глубокой нейронной сети соответствует , вы должны вывести выходные обучающие данные с помощью собранных входных/выходных данных и вычисленных матрица.
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
Следующий рисунок показывает пример процесса обучения.
Чтобы симулировать ПИД-регуляторы с ограничениями, используйте trackingWithLearnedConstraintPID
модель. Эта модель ограничивает контроллер выходы перед применением их к объекту.
mdl = 'trackingWithLearnedConstraintPID';
open_system(mdl)
Чтобы просмотреть реализацию ограничений, откройте Подсистему ограничений. Здесь обученная глубокая нейронная сеть аппроксимирует на основе текущего состояния объекта, и блок Constraint Enforcement применяет функцию ограничения.
Симулируйте модель и постройте график результатов.
% 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')
Блок Constraint Enforcement успешно ограничивает действия управления таким образом, чтобы состояния объекта оставалось меньше единицы.
bdclose('rlCollectDataPID') bdclose('trackingWithLearnedConstraintPID')
[1] Робей, Александр, Хаймин Ху, Ларс Линдеманн, Ханвэнь Чжан, Димос В. Димарогонас, Стивен Ту, и Николай Матни. «Барьерные функции управления обучением из экспертных демонстраций». Препринт, представленный 7 апреля 2020 года. https://arxiv.org/abs/2004.03315