Определение альтернативной функции стоимости с недиагональными матрицами веса

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

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

Линейная модель объекта управления имеет два входных параметров и два выходных параметров.

plant = ss(tf({1,1;1,2},{[1 .5 1],[.7 .5 1];[1 .4 2],[1 2]}));
[A,B,C,D] = ssdata(plant);
Ts = 0.1;               % sampling time
plant = c2d(plant,Ts);  % convert to discrete time

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

mpcobj = mpc(plant,Ts,20,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.

Задайте ограничения на переменные, которыми управляют, и их уровни.

mpcobj.MV = struct('Min',{-3;-2},'Max',{3;2},'RateMin',{-100;-100},'RateMax',{100;100});

Задайте недиагональные выходные веса

Чтобы задать недиагональные выходные веса, необходимо выбрать альтернативную функцию стоимости вместо стандартной функции стоимости. Альтернативная функция стоимости позволяет недиагональное взвешивание, но требует, чтобы веса были идентичны на каждом шаге горизонта предсказания. Для получения дополнительной информации о них функция стоимости смотрите Задачу оптимизации. Чтобы выбрать альтернативную функцию стоимости, необходимо задать матрицы веса в массивах ячеек. Для получения дополнительной информации смотрите раздел по весам в mpc. Задайте недиагональный выходной вес, соответствуя ((y1-r1) - (y2-r2)) ^2.

OW = [1 -1]'*[1 -1];
mpcobj.Weights.OutputVariables = {OW};

Задайте недиагональные входные веса

Недиагональный входной вес, соответствуя (u1-u2) ^2.

mpcobj.Weights.ManipulatedVariables = {0.5*OW};

Симулируйте Используя команду SIM

Задайте время симуляции и опорный сигнал.

Tstop = 30;               % simulation time
Tf = round(Tstop/Ts);     % number of simulation steps
r = ones(Tf,1)*[1 2];     % reference trajectory

Запустите симуляцию с обратной связью.

[y,t,u] = sim(mpcobj,Tf,r);
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->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.

Постройте график результатов.

subplot(211)
plot(t,y(:,1)-r(1,1)-y(:,2)+r(1,2));grid
title('(y_1-r_1)-(y_2-r_2)');
subplot(212)
plot(t,u);grid
title('u');

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

Симулируйте Используя Simulink®

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

mdl = 'mpc_weightsdemo';
open_system(mdl);
sim(mdl)

Закройте simulink модель.

bdclose(mdl);

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

|

Похожие темы