Оценка производительности управления Используя корректировку горизонта во время выполнения

Этот пример показывает, как настроить прогноз и горизонты управления во времени выполнения, чтобы оценить производительность контроллера, не воссоздавая объект контроллера или регенерировав код.

Обзор выбора горизонта прогноза и управления

Прогноз и горизонты управления, вместе с шагом расчета контроллера, обычно определяются, прежде чем другие настройки MPC, такие как ограничения и веса разработаны.

Существуют определенные инструкции, чтобы помочь выбрать шаг расчета "Ts", горизонт прогноза "p" и горизонт управления "m". Например, примите, что вы хотите определить, как далеко контроллер должен изучить будущее. В теории время прогноза должно быть достаточно долгим, чтобы получить доминирующее динамическое поведение объекта, но больше чтобы не тратить впустую ресурсы, используемые в вычислении. На практике вы часто запускаете с маленького значения и постепенно увеличиваете его, чтобы видеть, как производительность управления улучшается. Когда это выровняется, остановиться.

Горизонт управления определяет, сколько переменных MPC решения использует в оптимизации. Если значение является слишком маленьким, у вас нет достаточных степеней свободы, чтобы достигнуть удовлетворительной производительности. С другой стороны, если значение является слишком большим, и загрузка вычисления и увеличение места памяти значительно с небольшим улучшением производительности. Поэтому это - другое место, вы хотите попробовать различные значения и сравнить результаты.

В этом примере мы демонстрируем, как настроить прогноз и горизонты управления блока MPC Controller с помощью его импорта и сравнить производительность управления после нескольких выполнений симуляции, не воссоздавая контроллер MPC объект, используемый блоком. Если блок работает на встраиваемой системе, можно настроить горизонты в режиме реального времени также, не регенерируя и повторно развертывая код.

Чтобы запустить этот пример, Simulink® и Simulink Control Design® требуются.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design(R) is required to run this example.')
    return
end

Линеаризация нелинейного объекта в номинальной рабочей точке

Один вход один вывод нелинейный объект реализован в модели Simulink® "mpc_nloffsets". В номинальной рабочей точке объект в устойчивом состоянии с выводом-0.5.

plant_mdl = 'mpc_nloffsets';

Используйте команду operspec от Simulink Control Design®, чтобы создать объект спецификации рабочей точки с желаемым выходным значением, зафиксированным в устойчивом состоянии.

op = operspec(plant_mdl);
op.Outputs.Known = true;
op.Outputs.y = -0.5;

Используйте команду findop от Simulink Control Design®, чтобы получить номинальную рабочую точку.

[op_point, op_report] = findop(plant_mdl,op);
 Operating point search report:
---------------------------------

 Operating point search report for the Model mpc_nloffsets.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
(1.) mpc_nloffsets/Integrator
      x:         0.595      dx:      1.03e-13 (0)
(2.) mpc_nloffsets/Integrator2
      x:          2.19      dx:      -1.1e-09 (0)

Inputs: 
----------
(1.) mpc_nloffsets/In1
      u:         -1.18    [-Inf Inf]

Outputs: 
----------
(1.) mpc_nloffsets/Out1
      y:          -0.5    (-0.5)

Используйте команду linearize от Simulink Control Design®, чтобы линеаризовать объект в номинальных условиях работы.

plant = linearize(plant_mdl, op_point);

Получите номинальные состояния объекта, выведите и введите.

x0 = [op_report.States(1).x;op_report.States(2).x];
y0 = op_report.Outputs.y;
u0 = op_report.Inputs.u;

Линеаризовавший объект является underdamped системой второго порядка. Используя команду damp, мы можем узнать доминирующую временную константу объекта, который составляет приблизительно 1,7 секунды.

damp(plant)
                                                                       
         Pole              Damping       Frequency      Time Constant  
                                       (rad/seconds)      (seconds)    
                                                                       
 -5.95e-01 + 1.84e+00i     3.07e-01       1.94e+00         1.68e+00    
 -5.95e-01 - 1.84e+00i     3.07e-01       1.94e+00         1.68e+00    

Разрабатывающее значение по умолчанию контроллер MPC

Простая инструкция рекомендует, чтобы время прогноза, по крайней мере, покрыло доминирующую временную константу (1,7 секунды), и горизонт управления составляет 10% ~ 20% горизонта прогноза. Поэтому, если мы выбираем шаг расчета 0,1, горизонт прогноза должен быть приблизительно 17. Это дает нам отправную точку, чтобы выбрать горизонты по умолчанию

Ts = 0.1;                 % Sampling time
p = 20;
m = 4;
mpcobj = mpc(plant,Ts,p,m);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Установите номинальные значения в контроллере.

mpcobj.Model.Nominal = struct('X', x0, 'U', u0, 'Y', y0);

Установите ограничение мВ.

mpcobj.MV.Max = 2;
mpcobj.MV.Min = -2;

С тех пор существует мало шума на объекте, мы уменьшаем шумовое образцовое усиление, чтобы сделать Фильтр Калмана по умолчанию более агрессивным.

mpcobj.Model.Noise = 0.1;

Сравнение производительности между различным выбором горизонта прогноза

Модель mpc_onlineHorizons реализует систему управления с обратной связью. Наша цель отследить-0.2 ступенчатых изменения в ссылочном сигнале с минимальным перерегулированием. Мы также хотим, чтобы время установления составило меньше чем 5 секунд.

r0 = -0.7;
mdl = 'mpc_onlineHorizons';
open_system(mdl)

В модели блок MPC имеет два импорта, где мы можем соединить сигнал горизонта прогноза и управлять сигналом горизонта. В каждой симуляции мы отличаемся значение горизонта прогноза (от 5 до 50) при хранении горизонта управления в 4. Мы измеряем и перерегулирование (%) и время установления (секунда) от сохраненных результатов симуляции. Обратите внимание на то, что контроллер MPC объект не изменяется. Вместо этого новые значения горизонта предоставляются как входные сигналы во времени выполнения.

p_choices = 5:5:50;
set_param([mdl '/Control Horizon'],'Value','4');
for p=p_choices
    set_param([mdl '/Prediction Horizon'],'Value',num2str(p));
    sim(mdl,20);
    settling_timeP(p/5) = find((abs(y.signals.values-r0)<0.01)&(abs([0;diff(y.signals.values)])<0.001),1,'first')*Ts;
    if r0>y0
        overshootP(p/5) = abs((max(y.signals.values)-r0)/r0)*100;
    else
        overshootP(p/5) = abs((min(y.signals.values)-r0)/r0)*100;
    end
end
figure
subplot(2,1,1)
plot(p_choices,overshootP,'*')
xlabel('prediction horizon');
ylabel('overshoot (%)');
title('control horizon = 4');
subplot(2,1,2)
plot(p_choices,settling_timeP,'*')
ylabel('settling time (sec)')
xlabel('prediction horizon');
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.

Когда два графика показывают выше, когда горизонт прогноза увеличивается от 5 до 15, перерегулирование понижается с 6% до 3%, и время установления увеличивается с 3 секунд до 4 секунд. После этого, однако, оба перерегулирования и время установления остаются более или менее то же самое. Кроме того, все значения времени установления удовлетворяют верхнюю границу 5 секунд. Поэтому мы выбираем горизонт прогноза 15, потому что это - наименьшее значение, чтобы достигнуть удовлетворительной производительности путем формирования самой маленькой задачи оптимизации.

Сравнение производительности между различным выбором горизонта управления

После того, как мы выберем горизонт прогноза, мы используем ту же настройку, чтобы оценить различный выбор горизонта управления. В каждой симуляции мы отличаемся горизонт управления (от 1 до 10) при хранении горизонта прогноза в 15.

c_choices = 1:10;
set_param([mdl '/Prediction Horizon'],'Value','15');
for c=c_choices
    set_param([mdl '/Control Horizon'],'Value',num2str(c));
    sim(mdl,20);
    settling_timeC(c) = find((abs(y.signals.values-r0)<0.01)&(abs([0;diff(y.signals.values)])<0.001),1,'first')*Ts;
    if r0>y0
        overshootC(c) = abs((max(y.signals.values)-r0)/r0)*100;
    else
        overshootC(c) = abs((min(y.signals.values)-r0)/r0)*100;
    end
end
figure
subplot(2,1,1)
plot(c_choices,overshootC,'*')
xlabel('control horizon');
ylabel('overshoot (%)')
title('prediction horizon = 15');
subplot(2,1,2)
plot(c_choices,settling_timeC,'*')
xlabel('control horizon');
ylabel('settling time (sec)')

Когда два графика показывают выше, когда горизонт управления увеличивается от 1 до 3, перерегулирование понижается с 10% до 2%. После этого это увеличивается назад до 5%, когда горизонт управления растет от 4 до 10. Объяснение состоит в том, что, когда горизонт управления равняется 1, у контроллера нет достаточных степеней свободы, чтобы достигнуть разумного ответа. Когда горизонт управления равняется 4 или вне, у контроллера есть больше переменных решения, таким образом, что первое оптимальное перемещение часто становится более агрессивным и таким образом приводит к большему перерегулированию, но более короткому времени установления. В этом примере, поскольку основная цель управления состоит в том, чтобы достигнуть минимального перерегулирования, мы выбираем 3 в качестве горизонта управления.

Модель моделируется с горизонтом прогноза = 15 и горизонтом управления = 3. Вспомните, что нашим выбором первоначального проекта является горизонт прогноза = 20 и горизонт управления = 4 на основе простой инструкции, которая является близко к нашему итоговому выбору.

set_param([mdl '/Prediction Horizon'],'Value','15');
set_param([mdl '/Control Horizon'],'Value','3');
open_system([mdl '/Input']);
open_system([mdl '/Output']);
sim(mdl);

Корректировка горизонтов в режиме реального времени на встраиваемых системах

Главное преимущество использования прогноза во время выполнения и импорта горизонта управления в MPC и Адаптивных блоках MPC - то, что можно оценить и настроить производительность контроллера в режиме реального времени, не регенерируя код и повторно развернув его на целевой системе. Эта функция очень полезна на этапе прототипирования.

Чтобы использовать корректировку горизонта во время выполнения в режиме реального времени, целевая система должна поддержать динамическое выделение памяти, потому что, когда горизонты изменяются, размеры всего, что матрицы раньше создавали изменение задачи оптимизации во времени выполнения также.

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

bdclose (mdl);

Смотрите также

Похожие темы