Изменяющееся во времени MPC управление изменяющимся во времени объектом

В этом примере показов, как Model Predictive Control Toolbox™ может использовать изменяющиеся во времени модели предсказания для достижения лучшей эффективности при управлении изменяющимся во времени объектом.

Сравниваются следующие контроллеры MPC:

  1. Линейный контроллер, основанный на инвариантной по времени средней модели

  2. Линейный контроллер, основанный на инвариантной по времени модели, которая обновляется на каждом временном шаге.

  3. Линейный контроллер, основанный на изменяющейся во времени модели предсказания.

Изменяющееся во времени линейный объект

В этом примере объект является одним входом линейной системой выхода изменяющейся во времени 3-го порядка с полюсами, нулями и усилением, которые периодически изменяются со временем.

$$G = \frac{{5s + 5 + 2\cos \left( {2.5t} \right)}}{{{s^3}
 + 3{s^2} + 2s + 6 + \sin \left( {5t} \right)}}$$

Полюса объекта перемещаются между стабильностью и нестабильностью во время исполнения, что приводит к сложной проблеме управления.

Сгенерируйте массив моделей объекта управления в t = 0, 0.1, 0.2,..., 10 секунд.

Models = tf;
ct = 1;
for t = 0:0.1:10
    Models(:,:,ct) = tf([5 5+2*cos(2.5*t)],[1 3 2 6+sin(5*t)]);
    ct = ct + 1;
end

Преобразуйте модели в формат пространства состояний и дискретизируйте их со шаг расчета 0,1 секунды.

Ts = 0.1;
Models = ss(c2d(Models,Ts));

Проектирование контроллера MPC

Цель управления состоит в том, чтобы отследить изменение шага в опорный сигнал. Во-первых, разработайте контроллер для средней модели объекта управления. Шаг расчета контроллера составляет 0,1 секунды.

sys = ss(c2d(tf([5 5],[1 3 2 6]),Ts));  % prediction model
p = 3;                                  % prediction horizon
m = 3;                                  % control horizon
mpcobj = mpc(sys,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.MV = struct('Min',-2,'Max',2);
mpcobj.Weights = struct('MV',0,'MVRate',0.01,'Output',1);

Обнулите начальные состояния объекта нуля.

x0 = zeros(size(sys.B));

Симуляция замкнутой системы с неявным MPC

Запустите симуляцию с обратной связью, чтобы выяснить, может ли проектируемый неявный контроллер MPC достичь цели управления, не обновляя модель объекта управления, используемую в предсказании.

Установите длительность симуляции 5 секунд.

Tstop = 5;

Используйте mpcmove команда в цикле, чтобы симулировать реакцию с обратной связью.

yyMPC = [];
uuMPC = [];
x = x0;
xmpc = mpcstate(mpcobj);
fprintf('Simulating MPC controller based on average LTI model.\n');
for ct = 1:(Tstop/Ts+1)
    % Get the real plant.
    real_plant = Models(:,:,ct);
    % Update and store the plant output.
    y = real_plant.C*x;
    yyMPC = [yyMPC,y];
    % Compute and store the MPC optimal move.
    u = mpcmove(mpcobj,xmpc,y,1);
    uuMPC = [uuMPC,u];
    % Update the plant state.
    x = real_plant.A*x + real_plant.B*u;
end
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Simulating MPC controller based on average LTI model.

Симуляция замкнутой системы с адаптивным MPC

Запустите вторую симуляцию, чтобы выяснить, может ли адаптивный контроллер MPC достичь цели управления.

Используйте mpcmoveAdaptive команда в цикле, чтобы симулировать реакцию с обратной связью. Обновите модель объекта управления для каждого контрольного интервала и используйте обновленную модель, чтобы вычислить оптимальные перемещения управления. The mpcmoveAdaptive команда использует ту же модель предсказания через горизонт предсказания.

yyAMPC = [];
uuAMPC = [];
x = x0;
xmpc = mpcstate(mpcobj);
nominal = mpcobj.Model.Nominal;
fprintf('Simulating MPC controller based on LTI model, updated at each time step t.\n');
for ct = 1:(Tstop/Ts+1)
    % Get the real plant.
    real_plant = Models(:,:,ct);
    % Update and store the plant output.
    y = real_plant.C*x;
    yyAMPC = [yyAMPC, y];
    % Compute and store the MPC optimal move.
    u = mpcmoveAdaptive(mpcobj,xmpc,real_plant,nominal,y,1);
    uuAMPC = [uuAMPC,u];
    % Update the plant state.
    x = real_plant.A*x + real_plant.B*u;
end
Simulating MPC controller based on LTI model, updated at each time step t.

Симуляция в замкнутой системе с изменяющимся во времени MPC

Запустите третью симуляцию, чтобы выяснить, может ли изменяющийся во времени контроллер MPC достичь цели управления.

Контроллер обновляет модель предсказания на каждом контрольном интервале, а также использует изменяющиеся во времени модели на горизонте предсказания, что дает контроллеру MPC лучшее знание поведения объекта в будущем.

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

yyLTVMPC = [];
uuLTVMPC = [];
x = x0;
xmpc = mpcstate(mpcobj);
Nominals = repmat(nominal,3,1); % Nominal conditions are constant over the prediction horizon.
fprintf('Simulating MPC controller based on time-varying model, updated at each time step t.\n');
for ct = 1:(Tstop/Ts+1)
    % Get the real plant.
    real_plant = Models(:,:,ct);
    % Update and store the plant output.
    y = real_plant.C*x;
    yyLTVMPC = [yyLTVMPC, y];
    % Compute and store the MPC optimal move.
    u = mpcmoveAdaptive(mpcobj,xmpc,Models(:,:,ct:ct+p),Nominals,y,1);
    uuLTVMPC = [uuLTVMPC,u];
    % Update the plant state.
    x = real_plant.A*x + real_plant.B*u;
end
Simulating MPC controller based on time-varying model, updated at each time step t.

Сравнение эффективности контроллеров MPC

Сравните отклики с обратной связью.

t = 0:Ts:Tstop;
figure
subplot(2,1,1);
plot(t,yyMPC,'-.',t,yyAMPC,'--',t,yyLTVMPC);
grid
legend('Implicit MPC','Adaptive MPC','Time-Varying MPC','Location','SouthEast')
title('Plant Output');
subplot(2,1,2)
plot(t,uuMPC,'-.',t,uuAMPC,'--',t,uuLTVMPC)
grid
title('Control Moves');

Только изменяющийся во времени контроллер MPC способен приблизить выход объекта к требуемой уставке.

Симуляция MPC с обратной связью изменяющегося во времени в Simulink

Чтобы симулировать изменяющееся во времени MPC управление в Simulink, передайте изменяющиеся во времени модели объекта управления, чтобы model входной порт блока Adaptive MPC Controller.

xmpc = mpcstate(mpcobj);
mdl = 'mpc_timevarying';
open_system(mdl);

Запустите симуляцию.

sim(mdl,Tstop);
fprintf('Simulating MPC controller based on LTV model in Simulink.\n');
Simulating MPC controller based on LTV model in Simulink.

Постройте график изменяющихся во времени результатов симуляции MATLAB и Simulink.

figure
subplot(2,1,1)
plot(t,yyLTVMPC,t,ysim,'o');
grid
legend('mpcmoveAdaptive','Simulink','Location','SouthEast')
title('Plant Output');
subplot(2,1,2)
plot(t,uuLTVMPC,t,usim,'o')
grid
title('Control Moves');

Реакции с обратной связью в MATLAB и Simulink идентичны.

bdclose(mdl);

См. также

|

Похожие темы