Используя масштабные коэффициенты, чтобы упростить настройку веса

В этом примере показано, как задать масштабные коэффициенты в контроллере 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

Когда сигналы ввода и вывода объекта имеют различные порядки величины, настройки веса 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 после определения масштабных коэффициентов

Определение масштабных коэффициентов ввода и вывода для контроллера 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.

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

|

Похожие темы