Настройте веса ввода и вывода на основе анализа чувствительности

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

Задайте модель объекта управления

Создайте модель в пространстве состояний для объекта.

plant = ss(tf({1,1,2;1 -1 -1},{[1 0 0],[1 0 0],[1 1];[1 2 8],[1 3],[1 1 3]}),'min');

Модель является непрерывным временем и имеет 3 входных параметров (принятый, чтобы быть переменными, которыми управляют), 2 выходных параметров (принятый, чтобы быть оба измеримой), и 8 переменных состояния.

Спроектируйте контроллер MPC

Создайте контроллер MPC с шагом расчета 0.1, горизонт предсказания 20 шаги и горизонт управления 3 шаги.

mpcobj = mpc(plant,0.1,20,3);
-->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 i = 1:3
    mpcobj.MV(i).Min = -2;
    mpcobj.MV(i).Max = 2;
    mpcobj.MV(i).RateMin = -4;
    mpcobj.MV(i).RateMax = 4;
end

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

mpcobj.Weights.OutputVariables
ans = 1×2

     1     1

mpcobj.Weights.ManipulatedVariables
ans = 1×3

     0     0     0

mpcobj.Weights.ManipulatedVariablesRate
ans = 1×3

    0.1000    0.1000    0.1000

Setup оценки результатов деятельности

Задайте совокупный индекс эффективности с обратной связью как взвешенный Интеграл Квадратной Ошибки (ISE) между сигналами объекта и их ссылками, вычисленными в интервале от 0 к Tstop секунды.

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

PerformanceWeights = mpcobj.weights;

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

PerformanceWeights.OutputVariables = [100 100]; 
PerformanceWeights.ManipulatedVariablesRate = [1 1 1];

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

Параметры симуляции Setup и сигналы

В этом примере вы вычисляете совокупную чувствительность индекса эффективности в рамках сценария отслеживания заданного значения.

Tstop = 80;              % number of time steps to be simulated
r = ones(Tstop,1)*[1 1]; % set point reference signals
v = [];                  % no disturbance is added
simopt = mpcsimopt;      % create simulation options object
simopt.PlantInitialState = zeros(8,1); % set plant initial state

Вычислите чувствительность

Вычислите значение индекса эффективности и его чувствительность к mpcobj веса функции стоимости, с помощью sensitivity функция.

[J1, Sens1] = sensitivity(mpcobj, 'ISE', PerformanceWeights, Tstop, r, v, simopt);
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Отобразите чувствительность относительно весов для сигналов ошибки на выходе, WyJ.

Sens1.OutputVariables
ans = 1×2
104 ×

   -2.7346    2.7166

Отобразите чувствительность относительно весов для переменных сигналов, которыми управляют, WuJ.

Sens1.ManipulatedVariables
ans = 1×3

    3.3375 -125.8266  -35.1067

Отобразите чувствительность относительно весов для сигналов уровня переменных, которыми управляют, WΔuJ.

Sens1.ManipulatedVariablesRate
ans = 1×3
104 ×

   -0.0007    1.0250   -0.8370

Настройте веса MPC

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

Скопируйте объект MPC сделать модификацию на новом объекте.

mpcobj_new = mpcobj;

Отрицательная чувствительность предлагает увеличить первый выходной вес с 1 к 2.

mpcobj_new.Weights.OutputVariables(1) = 2;

Положительная чувствительность предлагает уменьшить второй выходной вес с 1 к 0.2.

mpcobj_new.Weights.OutputVariables(2) = 0.2;

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

Проверьте изменения эффективности

Симулируйте оба контроллера MPC.

[y1, t1, u1] = sim(mpcobj, Tstop, r, v, simopt);
[y2, t2, u2] = sim(mpcobj_new, Tstop, r, v, simopt);
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Постройте результаты симуляции для обоих контроллеров.

% plot plant outputs
h1 = figure;
subplot(211)
plot(t2,r(:,1),t1,y1(:,1),t2,y2(:,1));grid
legend('reference','original tuning','new tuning')
title('Output #1')
subplot(212)
plot(t2,r(:,2),t1,y1(:,2),t2,y2(:,2));grid
legend('reference','original tuning','new tuning')
title('Output #2')

Figure contains 2 axes objects. Axes object 1 with title Output #1 contains 3 objects of type line. These objects represent reference, original tuning, new tuning. Axes object 2 with title Output #2 contains 3 objects of type line. These objects represent reference, original tuning, new tuning.

% plot manipulated variables
h2 = figure;
subplot(311)
plot(t1,u1(:,1),t2,u2(:,1));grid
legend('original tuning','new tuning')
title('Manipulated Variable #1')
subplot(312)
plot(t1,u1(:,2),t2,u2(:,2));grid
legend('original tuning','new tuning')
title('Manipulated Variable #2')
subplot(313)
plot(t1,u1(:,3),t2,u2(:,3));grid
legend('original tuning','new tuning')
title('Manipulated Variable #3')

Figure contains 3 axes objects. Axes object 1 with title Manipulated Variable #1 contains 2 objects of type line. These objects represent original tuning, new tuning. Axes object 2 with title Manipulated Variable #2 contains 2 objects of type line. These objects represent original tuning, new tuning. Axes object 3 with title Manipulated Variable #3 contains 2 objects of type line. These objects represent original tuning, new tuning.

Проверьте, что Совокупный индекс Эффективности Уменьшается

Вычислите совокупный индекс эффективности для нового контроллера, использующего тот же критерий качества работы.

J2 = sensitivity(mpcobj_new, 'ISE', PerformanceWeights, Tstop, r, v, simopt);
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Предыдущий совокупный индекс эффективности.

J1
J1 = 1.2865e+05

Новый совокупный индекс эффективности.

J2
J2 = 1.1623e+05

Как ожидалось новое значение совокупного индекса эффективности ниже, чем старое значение.

Используйте пользовательскую функцию эффективности

Это - пример того, как записать пользовательскую функцию эффективности, используемую sensitivity метод. В этом примере, пользовательском функциональном mpc_performance_function.m реализует стандартный индекс эффективности ISE на основе PerformanceWeights.

Отобразите функцию.

type mpc_performance_function.m
function J = mpc_performance_function(MPCobj, Tsteps, r, PerformanceWeights)
% This is an example of how to write a user defined performance function
% used by the "sensitivity" method.  In this example, the code illustrate
% how we use performance weights to compute the cumulative performance index.

% Copyright 1990-2014 The MathWorks, Inc.

% Carry out simulation 
[y,t,u] = sim(MPCobj, Tsteps, r);
du = [u(1,:);diff(u)];
% Get Weights in MPCobj
ny = size(MPCobj,'mo') + size(MPCobj,'uo');
nmv = size(MPCobj,'mv');
Wy = PerformanceWeights.OutputVariables(:);Wy=Wy(1:ny);
Wu = PerformanceWeights.ManipulatedVariables(:);Wu=Wu(1:nmv);
Wdu = PerformanceWeights.ManipulatedVariablesRate(:);Wdu=Wdu(1:nmv);
% Set mv target to 0
utarget=zeros(nmv,1);
% Compute J in ISE form
J=0;
aux=(y-r)*Wy;
J=J+aux'*aux;
aux=(u-ones(Tsteps,1)*utarget')*Wu;
J=J+aux'*aux;
aux=du*Wdu;
J=J+aux'*aux;

Используйте пользовательскую функцию, чтобы вычислить индекс эффективности.

J3 = sensitivity(mpcobj,'mpc_performance_function',Tstop,r,PerformanceWeights)
J3 = 1.2865e+05

Как ожидалось, для mpcobj, пользовательская Совокупная Эффективность индексирует J3 имеет то же значение как J1.

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

|

Для просмотра документации необходимо авторизоваться на сайте