Этот пример показывает, как осмотреть оптимизированную последовательность переменных, которыми управляют, вычисленных образцовым прогнозирующим контроллером в каждом шаге расчета.
Объект является двойным интегратором, подвергающимся входной насыщенности.
Основная настройка контроллера MPC включает:
Двойной интегратор как модель прогноза
Горизонт прогноза 20
Управляйте горизонтом 10
Введите ограничения -1 <= u(t) <= 1
Сконфигурируйте контроллер MPC.
Ts = 0.1; % Sample time p = 20; % Prediction horizon m = 10; % Control horizon mpcobj = mpc(tf(1,[1 0 0]),Ts,p,m); % MPC object mpcobj.MV = struct('Min',-1,'Max',1); % Input saturation constraints nu=1; % Number of manipulated variables
-->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.
Чтобы запустить этот пример, Simulink® требуется.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink(R) is required to run this example.') return end
Откройте модель Simulink® и запустите симуляцию.
mdl = 'mpc_sequence';
open_system(mdl)
sim(mdl)
-->Converting the "Model.Plant" property of "mpc" object to state-space. -->Converting model to discrete time. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Блок MPC Controller имеет выходной порт mv.seq
, который включен путем выбора параметров блоков последовательности Оптимального управления. Это выходы порта последовательность оптимального управления вычисляется контроллером в каждом шаге расчета. Выходной сигнал является (p+1)-by-Nmv массивом, где p является горизонтом прогноза, и Nmv является количеством переменных, которыми управляют.
simlar способом контроллер может вывести оптимальную последовательность состояния (x.seq
) и оптимальную выходную последовательность (y.seq
).
Модель экспортирует эту управляющую последовательность в рабочую область MATLAB® на каждом шаге симуляции, регистрируя данные как useq
.
Постройте последовательность оптимального управления в определенные моменты времени.
times = [0 0.2 1 2 2.1 2.2 3 3.5 5]; figure('Name','Optimal sequence history'); for t = 1:9 ct = times(t)*10+1; subplot(3,3,t) h = stairs(0:p,useq.signals.values(ct,:)); h.LineWidth = 1.5; hold on plot((0:p)+.5,useq.signals.values(ct,:),'*r') xlabel('prediction step') ylabel('u') title(sprintf('Sequence (t=%3.1f)',useq.time(ct))) grid axis([0 p -1.1 1.1]) hold off end
Диспетчер MPC использует первые две секунды, чтобы принести вывод очень близко к новому сетболу. Контроллер вывел, в высоком пределе (+1) в течение одной секунды и переключается на низкий предел (-1) в течение следующей секунды, которая является лучшей стратегией управления под входными ограничительными пределами.
bdclose(mdl)