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

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

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

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

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

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

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

В этом примере объект является одним входом один выход 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

Цель управления состоит в том, чтобы отследить ступенчатое изменение в ссылочном сигнале. Во-первых, спроектируйте контроллер 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 команда в цикле, чтобы симулировать ответ с обратной связью. Обновите модель объекта управления для каждого контрольного интервала и используйте обновленную модель, чтобы вычислить перемещения оптимального управления. 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);

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

|

Похожие темы