В этом примере показано, как узнать об ограничениях из данных и применить эти ограничения для приложения управления ПИДа. Во-первых, вы изучаете ограничительную функцию использование глубокой нейронной сети, которая требует программного обеспечения Deep Learning Toolbox™. Вы затем применяете ограничения к действиям управления ПИДом с помощью блока Constraint Enforcement.
В данном примере движущие силы объекта описаны следующими уравнениями [1].
Цель для объекта состоит в том, чтобы отследить следующие траектории.
Для примера, который применяет известную ограничительную функцию к тому же приложению управления ПИДа, смотрите, Осуществляют Ограничения для ПИД-регуляторов.
Установите случайный 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
Прежде, чем учиться и применить ограничения, спроектируйте ПИД-регуляторы для отслеживания ссылочных траекторий. 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','Trajectory','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','Trajectory','Start','End','Location','best')
Блок Constraint Enforcement успешно ограничивает действия управления, таким образом, что состояния объекта остаются меньше чем один.
bdclose('rlCollectDataPID') bdclose('trackingWithLearnedConstraintPID')
[1] Robey, Александр, Хайминь Ху, Ларс Линдеманн, Ханьвэнь Чжан, Димос В. Димэрогонас, Стивен Ту и Николай Матни. "Узнавая о Барьерных функциях Управления из Опытных Демонстраций". Предварительно распечатайте, представленный 7 апреля 2020. https://arxiv.org/abs/2004.03315