В этом примере показано, как задать масштабные коэффициенты в контроллере MPC, чтобы упростить настройку веса.
Дискретное, линейное, пространство состояний модели объекта управления имеет 10 состояний, 5 входов и 3 выхода.
[plant,Ts] = mpcscalefactor_model; [ny,nu] = size(plant.D);
Входы объекта включают манипулируемую переменную (MV), измеренное нарушение порядка (MD) и неизмеренное нарушение порядка (UD). Выходы объекта включают измеренные выходы (MO) и неизмеренные выходы (UO).
mvindex = [1, 3, 5]; mdindex = 4; udindex = 2; moindex = [1 3]; uoindex = 2; plant = setmpcsignals(plant,'MV',mvindex,'MD',mdindex,'UD',udindex,'MO',moindex,'UO',uoindex);
Номинальные значения и рабочие области значений модели объекта управления:
Вход 1: номинальное значение 100, область значений [50 150]
Вход 2: номинальное значение 10, область значений [5 15]
Вход 3: номинальное значение 0,01, область значений [0,005 0,015]
Вход 4: номинальное значение 0,1, область значений [0,05 0,15]
Вход 5: номинальное значение 1, область значений [0,5 1,5]
Выход 1: номинальное значение 0,01, область значений [0,005 0,015]
Выход 2: номинальное значение 1, область значений [0,5 1,5]
Выход 3: номинальное значение 100, область значений [50 150]
Использование lsim
команда для запуска линейной симуляции разомкнутого контура, чтобы убедиться, что выходы объекта находятся в пределах области значений, и их среднее значение близко к номинальным значениям, когда входные сигналы изменяются случайным образом вокруг их номинальных значений.
Unominal = [100;10;0.01;0.1;1]; Ynominal = [0.01;1;100]; Uspan = Unominal; Yspan = Ynominal; t = (0:1000)'*Ts; nt = length(t); Uol = (rand(nt,nu)-0.5).*(ones(nt,1)*Uspan'); % design input signal Yol = lsim(plant,Uol,t); % compute plant output fprintf('The difference between average output values and the nominal values are %.2f%%, %.2f%%, %.2f%% respectively.\n',... abs(mean(Yol(:,1)))/Ynominal(1)*100,abs(mean(Yol(:,2)))/Ynominal(2)*100,abs(mean(Yol(:,3)))/Ynominal(3)*100);
The difference between average output values and the nominal values are 2.25%, 3.53%, 2.47% respectively.
Когда входные и выходные сигналы объекта имеют различные порядки величин, настройки веса MPC по умолчанию часто дают плохую эффективность.
Создайте контроллер MPC с весами по умолчанию:
Weight.MV = 0
Weight.MVRate = 0.1
Weight.OV = 1
C = mpc(plant);
-->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.
Xnominal = zeros(10,1); Unominal(udindex) = 0; % Nominal values for unmeasured disturbance must be 0 C.Model.Nominal = struct('X',Xnominal,'DX',Xnominal,'Y',Ynominal,'U',Unominal);
Во-первых, протестируйте последовательность изменений уставки шага в трех опорных сигналах.
nStepLen = 15; T1 = nStepLen*ny; r1 = ones(T1,1)*Ynominal(:)'; ii = 1; for i = 1:ny r1(ii:end,i) = r1(ii:end,i) + Ynominal(i); ii = ii + nStepLen; end sim(C,T1,r1)
-->The "Model.Disturbance" property of "mpc" object is empty: Assuming unmeasured input disturbance #2 is integrated white noise. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. Assuming no disturbance added to measured output channel #3. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Реакция отслеживания первого выхода является плохой. Причина в том, что его область значений мала по сравнению с другими выходами. Если используются веса настройки контроллера по умолчанию, контроллер MPC не уделяет особого внимания регулированию этого вывода, потому что связанный штраф настолько мал по сравнению с другими выходами в целевой функции.
Во-вторых, проверьте неизмеренное подавление помех.
SimOpt = mpcsimopt; SimOpt.UnmeasuredDisturbance = Uspan(udindex)'; T2 = 100; r2 = ones(T2,1)*Ynominal(:)'; sim(C,T2,r2,[],SimOpt)
Реакция подавления помех также плохая. Ни один из выходов не возвращается к своим уставкам.
Определение входного и выходного масштабных коэффициентов для контроллера MPC:
Улучшает численное качество вычислений оптимизации и оценки состояния.
Повышает вероятность того, что веса настройки по умолчанию достигнут хорошей эффективности контроллера.
Скопируйте контроллер MPC с весами по умолчанию.
C2 = C;
Чтобы задать масштабные коэффициенты, рекомендуется использовать ожидаемую рабочую область значений каждого входа и выхода.
for i = 1:length(mvindex) C2.MV(i).ScaleFactor = Uspan(mvindex(i)); end nmd = length(mdindex); for i = 1:nmd C2.D(i).ScaleFactor = Uspan(mdindex(i)); end for i = 1:length(udindex) C2.D(i+nmd).ScaleFactor = Uspan(udindex(i)); end for i = 1:ny C2.OV(i).ScaleFactor = Yspan(i); end
Повторите первый тест, который является последовательностью изменений уставки шага в трех опорных сигналах.
sim(C2,T1,r1)
-->The "Model.Disturbance" property of "mpc" object is empty: Assuming unmeasured input disturbance #2 is integrated white noise. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. Assuming no disturbance added to measured output channel #3. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Повторите второй тест, который является неизмеренным нарушением порядка.
sim(C2,T2,r2,[],SimOpt)
И отслеживание уставок, и подавления помех отклики хороши даже без настройки весов MPC.