Обеспечьте производительность LQR Используя терминальные веса штрафа

Возможно сделать модель конечного горизонта прогнозирующим контроллером эквивалентный линейному квадратичному регулятору (LQR) бесконечного горизонта при помощи терминальных весов штрафа [1]. Стандартная функция стоимости MPC подобна функции стоимости для контроллера LQR с выходным взвешиванием, как показано в следующем уравнении:

J(u)=i=1y(k+i)TQy(k+i)+u(k+i1)TRu(k+i1)

LQR и функции стоимости MPC отличаются следующими способами:

  • Функция стоимости LQR обеспечивает y и u к нулю, тогда как функция стоимости MPC обеспечивает y и u к ненулевым заданным значениям. Можно переключить источник модели прогноза MPC, чтобы устранить это различие и достигнуть нулевых номинальных заданных значений.

  • Функция стоимости LQR использует бесконечный горизонт прогноза, в котором переменная, которой управляют, изменяется в каждый момент выборки. В стандартной функции стоимости MPC длиной горизонта является p, и переменная, которой управляют, изменяет времена m, где m является горизонтом управления.

Эти две функции стоимости эквивалентны, если функция стоимости MPC:

J(u)=i=1p1y(k+i)TQy(k+i)+u(k+i1)TRu(k+i1)+x(k+p)TQpx(k+p)

где Qp является терминальным весом штрафа, примененным на итоговом шаге горизонта прогноза, и прогноз и горизонты управления равны (p = m). Необходимый Qp является вычисленным использованием матрицы Рикатти команды lqry и lqr.

Разработайте контроллер MPC, эквивалентный контроллеру 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, вычислить L, разложение Холесского Qp, таким образом, что LTL=Qp. Затем задайте вспомогательные неизмеренные выходные переменные ya(k)=Lx(k), таким образом, что yaTya=xTQpx.

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 

Задайте веса для переменных и выходных переменных, которыми управляют, для первого p-1 шаги горизонта прогноза. Используйте квадратные корни из диагональных элементов Q и R матрицы веса от проектирования контроллера LQR. Стандарт Q матричные значения веса применяются y, и ya имеет нулевой штраф.

ywt = sqrt(diag(Q))';
uwt = sqrt(diag(R))';
MPCobj.Weights.OV = [ywt 0 0];
MPCobj.Weights.MV = uwt;

Задайте терминальные веса для итогового шага горизонта прогноза. На шаге p, оригинал y имеет нулевой штраф, и ya имеет модульный штраф. Входной вес остается то же самое для терминального шага.

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 с прогнозом по умолчанию и управляйте горизонтами (p=10, m=3). Чтобы совпадать с другими контроллерами, удалите средство оценки состояния по умолчанию от типичного диспетчера 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 производительность путем корректировки горизонтов. Например, если вы увеличиваете прогноз и управляете горизонтами (p=20, m=5), типичный контроллер MPC выполняет почти тождественно контроллеру MPC с терминальными весами.

Этот пример показывает, что использование терминальных весов штрафа может избавить от необходимости настраивать прогноз и горизонты управления для неограниченного случая MPC. Если ваше приложение включает ограничения, использование терминального веса недостаточно, чтобы гарантировать номинальную устойчивость. Необходимо также выбрать соответствующие горизонты и возможно добавить терминальные ограничения. Для получения дополнительной информации смотрите Ролингса и Майна [2].

Ссылки

[1] Scokaert, P. O. M. и Дж. Б. Ролингс "Ограничили линейное квадратичное регулирование" Транзакции IEEE на Автоматическом управлении (1998), Издание 43, № 8, стр 1163-1169.

[2] Ролингс, J. B. и Дэвид К. Майн "образцовое прогнозирующее управление: теория и проект" публикация Ноб-Хилл, 2010.

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

Похожие темы