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

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

% set input and output range
Urange = [100;10;0.01;0.1;1];
Yrange = [0.01;1;100];

% set input and output nominal values
% for this example nominal values are equivalent to ranges
Unominal = [100;10;0.01;0.1;1];
Ynominal = [0.01;1;100];

% define time intervals
t = (0:1000)'*Ts;
nt = length(t);

% define input and output signals
Uol = (rand(nt,nu)-0.5).*(ones(nt,1)*Urange');   % 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.

Отобразите средние значения и стандартные отклонения сигналов ввода и вывода.

% input
mean(Uol)
ans = 1×5

    0.6682   -0.1202   -0.0000    0.0009    0.0025

std(Uol)
ans = 1×5

   28.3302    2.9136    0.0029    0.0281    0.2805

% output
mean(Yol)
ans = 1×3

   -0.0002    0.0353    2.4706

std(Yol)
ans = 1×3

    0.0038    0.5615   39.6285

Hrer, среднее значение дает хорошую идею фактической номинальной стоимости, и стандартное отклонение получают некоторую идею области значений th.

Оцените MPC со значением по умолчанию веса MPC

Когда сигналы ввода и вывода объекта имеют различные порядки величины, настройки веса MPC по умолчанию часто дают низкую производительность.

Создайте контроллер MPC с весами по умолчанию:

  • Weight.MV = 0

  • Weight.MVRate = 0.1

  • Weight.OV = 1

% create mpc object
mpcobjUnscaled = 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.
% nominal values of the plant states
Xnominal = zeros(10,1);

% nominal values for unmeasured disturbance
Unominal(UDindex) = 0;  % Nominal values for unmeasured disturbance must be 0 

% Set nominal values
mpcobjUnscaled.Model.Nominal = struct('X',Xnominal,'DX',Xnominal,'Y',Ynominal,'U',Unominal);

Вычислить объект выходные параметры, sim вычтет номинальные входные параметры объекта из входных параметров и номинальные состояния от текущих состояний, затем применит линейные уравнения объекта, и наконец добавит номинальные выходные значения в расчетный выход.

Чтобы вычислить переменные, которыми управляют, это удалит номинальный выход из выходного сигнала объекта, вычислит последовательность MPC управления и добавит номинальную стоимость переменных, которыми управляют, к расчетной последовательности.

Во-первых, протестируйте последовательность изменений заданного значения шага в трех опорных сигналах.

nStepLen = 15;                      % expected step response duration
Ns1 = nStepLen*ny;                  % calculate simulation time to accommodate ny steps   
r1 = ones(Ns1,1)*Ynominal(:)';      % reference signal

% cycle through each output and define references at StepLen intervals
StepTime = 1;
for i = 1:ny
    r1(StepTime:end,i) = r1(StepTime:end,i) + Yrange(i);
    StepTime = StepTime + nStepLen;
end

% simulate closed loop for Ns1 steps and subject to reference r1
sim(mpcobjUnscaled,Ns1,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.

Figure contains 5 axes objects. Axes object 1 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 4 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 5 contains an object of type line. These objects represent Driving inputs, MPC response1.

Figure contains 3 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains 2 objects of type line. These objects represent Driving inputs, MPC response1.

Ответ отслеживания первого выхода плох. Причина состоит в том, что ее область значений мала по сравнению с другими выходными параметрами. Если контроллер по умолчанию, настраивающий веса, используется, контроллер MPC не обращает много внимания на регулирование этого выхода, потому что связанный штраф так мал по сравнению с другими выходными параметрами в целевой функции.

Во-вторых, протестируйте неизмеренное подавление помех.

% create simulation options object and set unmeasured disturbance
SimOpt = mpcsimopt;
SimOpt.UnmeasuredDisturbance = Urange(UDindex)';

% set number of simulation steps and reference signal 
% reference signal is equal to the range values
Ns2 = 100;
r2 = ones(Ns2,1)*Yrange(:)'; 

% simulate the closed loop subject to reference r2 
sim(mpcobjUnscaled,Ns2,r2,[],SimOpt)

Figure contains 3 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains 2 objects of type line. These objects represent Driving inputs, MPC response1.

Figure contains 5 axes objects. Axes object 1 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 4 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 5 contains an object of type line. These objects represent Driving inputs, MPC response1.

Ответ подавления помех также плох. Ни одни из выходных параметров не возвращаются к их заданным значениям.

Оцените MPC со значением по умолчанию веса MPC после определения масштабных коэффициентов

Определение масштабных коэффициентов ввода и вывода для контроллера MPC:

  • Улучшает числовое качество вычислений оптимизации и оценки состояния.

  • Делает его более вероятно, что настраивающие веса значения по умолчанию достигнут хорошей эффективности контроллера.

Скопируйте контроллер MPC с весами по умолчанию.

mpcobjScaled = mpcobjUnscaled;

Чтобы задать масштабные коэффициенты, это - хорошая практика, чтобы использовать ожидаемый рабочий диапазон каждого ввода и вывода.

% scale manipulated variables
for i = 1:length(MVindex)
    mpcobjScaled.ManipulatedVariables(i).ScaleFactor = Urange(MVindex(i));
end

% scale measured disturbances
nmd = length(MDindex);
for i = 1:nmd
    mpcobjScaled.DisturbanceVariables(i).ScaleFactor = Urange(MDindex(i));
end

% scale unmeasured disturbances
for i = 1:length(UDindex)
    mpcobjScaled.DisturbanceVariables(i+nmd).ScaleFactor = Urange(UDindex(i));
end

% scale outputs
for i = 1:ny
    mpcobjScaled.OV(i).ScaleFactor = Yrange(i);
end

Повторите первый тест, который является последовательностью изменений заданного значения шага в трех опорных сигналах.

sim(mpcobjScaled,Ns1,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.

Figure contains 3 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains 2 objects of type line. These objects represent Driving inputs, MPC response1.

Figure contains 5 axes objects. Axes object 1 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 4 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 5 contains an object of type line. These objects represent Driving inputs, MPC response1.

Повторите второй тест, который является неизмеренным воздействием.

sim(mpcobjScaled,Ns2,r2,[],SimOpt)

Figure contains 3 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains 2 objects of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains 2 objects of type line. These objects represent Driving inputs, MPC response1.

Figure contains 5 axes objects. Axes object 1 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 2 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 3 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 4 contains an object of type line. These objects represent Driving inputs, MPC response1. Axes object 5 contains an object of type line. These objects represent Driving inputs, MPC response1.

И отслеживание заданного значения и ответы подавления помех хороши даже, не настраивая веса MPC. Это вызвано тем, что теперь исходные веса применяются к масштабированным сигналам, и поэтому эффект взвешивания не искажен.

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

|

Похожие темы