В этом примере показано, как задать масштабные коэффициенты в контроллере 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 с весами по умолчанию:
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.
Ответ отслеживания первого выхода плох. Причина состоит в том, что ее область значений мала по сравнению с другими выходными параметрами. Если контроллер по умолчанию, настраивающий веса, используется, контроллер 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)
Ответ подавления помех также плох. Ни одни из выходных параметров не возвращаются к их заданным значениям.
Определение масштабных коэффициентов ввода и вывода для контроллера 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.
Повторите второй тест, который является неизмеренным воздействием.
sim(mpcobjScaled,Ns2,r2,[],SimOpt)
И отслеживание заданного значения и ответы подавления помех хороши даже, не настраивая веса MPC. Это вызвано тем, что теперь исходные веса применяются к масштабированным сигналам, и поэтому эффект взвешивания не искажен.