В этом примере показано, как Toolbox™ модельного прогнозирующего управления может использовать изменяющиеся во времени модели прогнозирования для достижения более высокой производительности при управлении изменяющимся во времени растением.
Сравниваются следующие контроллеры MPC:
Линейный контроллер MPC на основе инвариантной по времени средней модели
Линейный контроллер MPC на основе инвариантной по времени модели, которая обновляется на каждом временном шаге.
Линейный контроллер MPC на основе изменяющейся во времени модели прогнозирования.
В этом примере установка представляет собой линейную систему с переменным во времени одним входом-одним выходом 3-го порядка с полюсами, нулями и коэффициентом усиления, которые периодически изменяются во времени.

Столбы растений перемещаются между стабильными и нестабильными во время работы, что приводит к сложной проблеме управления.
Создание массива моделей завода в 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
Преобразуйте модели в формат state-space и дискретизируйте их с временем выборки 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 достичь цели управления без обновления модели установки, используемой при прогнозировании.
Установите продолжительность моделирования в 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 достичь цели управления.
Используйте 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 наилучшие знания о поведении растений в будущем.
Используйте 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.
Сравните отклики с замкнутым контуром.
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 передайте изменяющиеся во времени модели завода в model вход блока адаптивного контроллера MPC.
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);
Адаптивный контроллер MPC | mpcmoveAdaptive