Возможно сделать модель конечного горизонта прогнозирующим контроллером эквивалентный линейному квадратичному регулятору (LQR) бесконечного горизонта при помощи терминальных весов штрафа [1]. Стандартная функция стоимости MPC подобна функции стоимости для контроллера LQR с выходным взвешиванием, как показано в следующем уравнении:
LQR и функции стоимости MPC отличаются следующими способами:
Функция стоимости LQR обеспечивает y и u к нулю, тогда как функция стоимости MPC обеспечивает y и u к ненулевым заданным значениям. Можно переключить источник модели прогноза MPC, чтобы устранить это различие и достигнуть нулевых номинальных заданных значений.
Функция стоимости LQR использует бесконечный горизонт прогноза, в котором переменная, которой управляют, изменяется в каждый момент выборки. В стандартной функции стоимости MPC длиной горизонта является p, и переменная, которой управляют, изменяет времена m, где m является горизонтом управления.
Эти две функции стоимости эквивалентны, если функция стоимости MPC:
где Qp является терминальным весом штрафа, примененным на итоговом шаге горизонта прогноза, и прогноз и горизонты управления равны (p = m). Необходимый Qp является вычисленным использованием матрицы Рикатти команды lqry
и lqr
.
Этот пример показывает, как разработать неограниченный контроллер MPC, который обеспечивает производительность, эквивалентную контроллеру LQR.
Задайте модель объекта управления
Объект является двойным интегратором, представленным как модель в пространстве состояний в дискретное время с шагом расчета 0,1 секунд. В этом случае два состояния объекта измеримы на объекте выходные параметры.
A = [1 0;0.1 1]; B = [0.1;0.005]; C = eye(2); D = zeros(2,1); Ts = 0.1; Plant = ss(A,B,C,D,Ts); Plant.InputName = {'u'}; Plant.OutputName = {'x_1','x_2'};
Разработайте контроллер LQR
Разработайте контроллер LQR с выходной обратной связью для объекта.
Q = eye(2); R = 1; [K,Qp] = lqry(Plant,Q,R);
Q
и R
выводятся и входные матрицы веса, соответственно. Qp
является матрицей Рикатти.
Разработайте эквивалентный контроллер MPC
Чтобы реализовать функцию стоимости MPC, вычислить , разложение Холесского , таким образом, что . Затем задайте вспомогательные неизмеренные выходные переменные , таким образом, что .
NewPlant = Plant; L = chol(Qp); set(NewPlant,'C',[C;L],'D',[D;zeros(2,1)],... 'OutputName',{'x_1','x_2','Cx_1','Cx_2'}) NewPlant.InputGroup.MV = 1; NewPlant.OutputGroup.MO = [1 2]; NewPlant.OutputGroup.UO = [3 4];
Создайте контроллер MPC с равным прогнозом и управляйте горизонтами.
P = 3; M = 3; MPCobj = mpc(NewPlant,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. for output(s) y1 and zero weight for output(s) y2 y3 y4
Задайте веса для переменных и выходных переменных, которыми управляют, для первого шаги горизонта прогноза. Используйте квадратные корни из диагональных элементов и матрицы веса от проектирования контроллера LQR. Стандарт матричные значения веса применяются , и имеет нулевой штраф.
ywt = sqrt(diag(Q))'; uwt = sqrt(diag(R))'; MPCobj.Weights.OV = [ywt 0 0]; MPCobj.Weights.MV = uwt;
Задайте терминальные веса для итогового шага горизонта прогноза. На шаге , оригинал имеет нулевой штраф, и имеет модульный штраф. Входной вес остается то же самое для терминального шага.
U = struct('Weight',uwt); Y = struct('Weight',[0 0 1 1]); setterminal(MPCobj,Y,U)
Удалите средство оценки состояния по умолчанию. Поскольку образцовые состояния измеряются непосредственно, средство оценки состояния по умолчанию является ненужным.
setoutdist(MPCobj,'model',tf(zeros(4,1)))
setEstimator(MPCobj,[],C)
Сравните производительность контроллера
Сравните производительность контроллера LQR, контроллера MPC с терминальными весами и типичного контроллера MPC.
Вычислите ответ с обратной связью для контроллера LQR.
clsys = feedback(Plant,K); Tstop = 6; x0 = [0.2;0.2]; [yLQR,tLQR] = initial(clsys,x0,Tstop);
Вычислите ответ с обратной связью для контроллера MPC с терминальными весами.
SimOptions = mpcsimopt(MPCobj); SimOptions.PlantInitialState = x0; r = zeros(1,4); [y,t,u] = sim(MPCobj,ceil(Tstop/Ts),r,SimOptions);
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Cost = sum(sum(y(:,1:2)*diag(ywt).*y(:,1:2))) + sum(u*diag(uwt).*u);
Вычислите ответ с обратной связью для типичного контроллера MPC с прогнозом по умолчанию и управляйте горизонтами (, ). Чтобы совпадать с другими контроллерами, удалите средство оценки состояния по умолчанию от типичного диспетчера MPC.
MPCobjSTD = mpc(Plant,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10. -->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2. -->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. for output(s) y1 and zero weight for output(s) y2
MPCobjSTD.Weights.MV = uwt;
MPCobjSTD.Weights.OV = ywt;
setoutdist(MPCobjSTD,'model',tf(zeros(2,1)))
setEstimator(MPCobjSTD,[],C)
SimOptions = mpcsimopt(MPCobjSTD);
SimOptions.PlantInitialState = x0;
r = zeros(1,2);
[ySTD,tSTD,uSTD] = sim(MPCobjSTD,ceil(Tstop/Ts),r,SimOptions);
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
CostSTD = sum(sum(ySTD*diag(ywt).*ySTD)) + sum(uSTD*uwt.*uSTD);
Сравните ответы контроллера.
figure h1 = line(tSTD,ySTD,'color','r'); h2 = line(t,y(:,1:2),'color','b'); h3 = line(tLQR,yLQR,'color','m','marker','o','linestyle','none'); xlabel('Time') ylabel('Plant Outputs') legend([h1(1) h2(1) h3(1)],'Standard MPC','MPC with Terminal Weights','LQR','Location','NorthEast')
У контроллера MPC с терминальными весами есть более быстрое время установления по сравнению с типичным контроллером MPC. Контроллер LQR и контроллер MPC с терминальными весами выполняют тождественно.
Как сообщается в [1], вычисленное значение Cost
2.23
для контроллера MPC с терминальными весами идентично стоимости контроллера LQR. Стоимостью для типичного контроллера MPC, CostSTD
, является 4.82
, более чем удвойте значение Cost
.
Можно улучшать типичный контроллер MPC производительность путем корректировки горизонтов. Например, если вы увеличиваете прогноз и управляете горизонтами (, ), типичный контроллер MPC выполняет почти тождественно контроллеру MPC с терминальными весами.
Этот пример показывает, что использование терминальных весов штрафа может избавить от необходимости настраивать прогноз и горизонты управления для неограниченного случая MPC. Если ваше приложение включает ограничения, использование терминального веса недостаточно, чтобы гарантировать номинальную устойчивость. Необходимо также выбрать соответствующие горизонты и возможно добавить терминальные ограничения. Для получения дополнительной информации смотрите Ролингса и Майна [2].
[1] Scokaert, P. O. M. и Дж. Б. Ролингс "Ограничили линейное квадратичное регулирование" Транзакции IEEE на Автоматическом управлении (1998), Издание 43, № 8, стр 1163-1169.
[2] Ролингс, J. B. и Дэвид К. Майн "образцовое прогнозирующее управление: теория и проект" публикация Ноб-Хилл, 2010.