mpcmoveopt

Опция установлена для функции mpcmove

Описание

Чтобы задать опции для mpcmove, mpcmoveAdaptive и функции mpcmoveMultiple, используют объект mpcmoveopt.

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

Создание

Синтаксис

options = mpcmoveopt

Описание

пример

options = mpcmoveopt создает набор по умолчанию опций для функции mpcmove. Чтобы изменить значения свойств, используйте запись через точку.

Свойства

развернуть все

Настраивающие веса выходной переменной, которые заменяют свойство Weights.OutputVariables контроллера во время выполнения, заданное как вектор или массив неотрицательных значений.

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

Чтобы отличаться настраивающиеся веса по горизонту прогноза со времени k +1 ко времени k +p, задайте массив со столбцами Ny и до строк p. Здесь, k является текущим временем, и p является горизонтом прогноза. Каждая строка содержит настраивающие веса выходной переменной для одного шага горизонта прогноза. Если вы задаете меньше, чем строки p, веса в итоговой строке используются для остающихся шагов горизонта прогноза.

Переменные настраивающие веса, которыми управляют, которые заменяют свойство Weights.ManipulatedVariables контроллера во время выполнения, заданное как вектор или массив неотрицательных значений.

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

Чтобы отличаться настраивающиеся веса по горизонту прогноза со времени k ко времени k +p-1, задайте массив со столбцами Nmv и до строк p. Здесь, k является текущим временем, и p является горизонтом прогноза. Каждая строка содержит переменные настраивающие веса, которыми управляют, для одного шага горизонта прогноза. Если вы задаете меньше, чем строки p, веса в итоговой строке используются для остающихся шагов горизонта прогноза.

Настраивающие веса с плавающей ставкой, которыми управляют, которые заменяют свойство Weights.ManipulatedVariablesRate контроллера во время выполнения, заданное как вектор или массив неотрицательных значений.

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

Чтобы отличаться настраивающиеся веса по горизонту прогноза со времени k ко времени k +p-1, задайте массив со столбцами Nmv и до строк p. Здесь, k является текущим временем, и p является горизонтом прогноза. Каждая строка содержит настраивающие веса с плавающей ставкой, которыми управляют, для одного шага горизонта прогноза. Если вы задаете меньше, чем строки p, веса в итоговой строке используются для остающихся шагов горизонта прогноза.

Ослабьте переменный настраивающий вес, который заменяет свойство Weights.ECR контроллера во время выполнения, заданное как положительная скалярная величина.

Нижние границы выходной переменной, заданные как вектор - строка из длины Ny, где Ny является количеством выходных переменных. OutputMin(i) заменяет свойство OutputVariables(i).Min контроллера во время выполнения.

Если свойство OutputVariables(i).Min контроллера задано как вектор (то есть, ограничение отличается по горизонту прогноза), OutputMin(i) заменяет первую конечную запись в этом векторе и остающийся сдвиг значений, чтобы сохранить тот же ограничительный профиль.

Верхние границы выходной переменной, заданные как вектор - строка из длины Ny, где Ny является количеством выходных переменных. OutputMax(i) заменяет свойство OutputVariables(i).Max контроллера во время выполнения.

Если свойство OutputVariables(i).Max контроллера задано как вектор (то есть, ограничение отличается по горизонту прогноза), OutputMax(i) заменяет первую конечную запись в этом векторе и остающийся сдвиг значений, чтобы сохранить тот же ограничительный профиль.

Переменные нижние границы, которыми управляют, заданные как вектор - строка из длины Nmv, где Nmv является количеством переменных, которыми управляют. MVMin(i) заменяет свойство ManipulatedVariables(i).Min контроллера во время выполнения.

Если свойство ManipulatedVariables(i).Min контроллера задано как вектор (то есть, ограничение отличается по горизонту прогноза), MVMin(i) заменяет первую конечную запись в этом векторе и остающийся сдвиг значений, чтобы сохранить тот же ограничительный профиль.

Переменные верхние границы, которыми управляют, заданные как вектор - строка из длины Nmv, где Nmv является количеством переменных, которыми управляют. MVMax(i) заменяет свойство ManipulatedVariables(i).Max контроллера во время выполнения.

Если свойство ManipulatedVariables(i).Max контроллера задано как вектор (то есть, ограничение отличается по горизонту прогноза), MVMax(i) заменяет первую конечную запись в этом векторе и остающийся сдвиг значений, чтобы сохранить тот же ограничительный профиль.

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

Переменное ограничение, которым управляют, постоянное, заданное как Nc-by-Nmv массив, где Nc является количеством ограничений и Nmv, является количеством переменных, которыми управляют.

Управляемое выходное ограничение, постоянное, заданное как Nc-by-Ny массив, где Ny является количеством управляемых выходных параметров (измеренный и неизмеренный).

Смешанное ограничение ввода/вывода, постоянное, заданное как вектор-столбец длины Nc.

Измеренное ограничение воздействия, постоянное, заданное как Nc-by-Nmd массив, где Nmd является количеством измеренных воздействий.

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

  • 0 — Контроллер возвращает предсказанные перемещения оптимального управления в дополнение к величине затрат целевой функции.

  • 1 — Контроллер возвращает стоимость целевой функции только, которая экономит вычислительные усилия.

Значения переменных, которыми управляют, использовали на объекте во время предыдущего интервала управления, заданного как вектор - строка из длины Nmv, где Nmv является количеством переменных, которыми управляют. Если вы не задаете MVused, mpvmove использует свойство LastMove своего текущего входного параметра состояния контроллера, x.

Переменные цели, которыми управляют, заданные как вектор - строка из длины Nmv, где Nmv является количеством переменных, которыми управляют. MVTarget(i) заменяет свойство ManipulatedVariables(i).Target контроллера во время выполнения.

Горизонт прогноза, который заменяет свойство PredictionHorizon контроллера во время выполнения, заданное как положительное целое число. Если вы задаете PredictionHorizon, необходимо также задать ControlHorizon.

Определение PredictionHorizon изменяется:

  • Количество строк в оптимальных последовательностях, возвращенных mpcmove и функциями mpcmoveAdaptive

  • Максимальные размерности Plant и входные параметры Nominal mpcmoveAdaptive

Этот параметр проигнорирован функцией mpcmoveMultiple.

Управляйте горизонтом, который заменяет свойство ControlHorizon контроллера во время выполнения, заданное как одно из следующего:

  • Положительное целое число, m, между 1 и p, включительно, где p равен PredictionHorizon. В этом случае контроллер вычисляет m свободные перемещения управления, происходящие во времена k через k +m-1, и содержит вывод контроллера, постоянный для остающихся шагов горизонта прогноза от k +m через k +p-1. Здесь, k является текущим интервалом управления. Для оптимальной траектории, планируя устанавливает m, равный p.

  • Вектор положительных целых чисел, [m 1, m 2, …], где сумма целых чисел равняется горизонту прогноза, p. В этом случае контроллер вычисляет блоки M свободных перемещений, где M является длиной вектора ControlHorizon. Первое свободное перемещение применяется ко временам k через k +m1-1, второе свободное перемещение применяется со времени k +m1 через k +m1+m2-1 и так далее. Используя перемещения блока может улучшить робастность вашего контроллера по сравнению со случаем по умолчанию.

Если вы задаете ControlHorizon, необходимо также задать PredictionHorizon.

Этот параметр проигнорирован функцией mpcmoveMultiple.

Функции объекта

mpcmoveВычислите действие оптимального управления
mpcmoveAdaptiveВычислите оптимальное управление с обновлением модели прогноза
mpcmoveMultipleВычислите планирующее усиление действие MPC управления в один момент времени

Примеры

свернуть все

Отличайтесь переменная верхняя граница, которой управляют, во время симуляции.

Задайте объект, который включает 4-секундную входную задержку. Преобразуйте в без задержек, дискретное, модель в пространстве состояний с помощью 2-секундного интервала управления. Создайте соответствующий контроллер по умолчанию и задайте границы мВ в +/-2.

Ts = 2;
Plant = absorbDelay(c2d(ss(tf(0.8,[5 1],'InputDelay',4)),Ts));
MPCobj = mpc(Plant,Ts);
-->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.
MPCobj.MV(1).Min = -2; 
MPCobj.MV(1).Max = 2;

Создайте пустой объект mpcmoveopt. Во время симуляции можно установить свойства объекта задать параметры контроллера.

options = mpcmoveopt;

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

v = []; 
t = [0:Ts:20]; 
N = length(t); 
y = zeros(N,1); 
u = zeros(N,1); 
x = mpcstate(MPCobj);
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Используйте mpcmove, чтобы моделировать следующее:

  • Ссылка (заданное значение) ступенчатое изменение от начального условия r = 0 к r = 1 (ответ сервомотора)

  • Верхняя граница мВ продвигается уменьшение от 2 до 1, происходя в t = 10

r = 1; 
for i = 1:N
    y(i) = Plant.C*x.Plant;
    if t(i) >= 10
        options.MVMax = 1; 
    end
    [u(i),Info] = mpcmove(MPCobj,x,y(i),r,v,options); 
end

Когда цикл выполняется, значение options.MVMax сбрасывается к 1 для всех итераций, которые происходят после t = 10. До той итерации options.MVMax пуст. Поэтому значение диспетчера для MVMax используется, MPCobj.MV(1).Max = 2.

Постройте результаты симуляции.

[Ts,us] = stairs(t,u); 
plot(Ts,us,'b-',t,y,'r-') 
legend('MV','OV')
xlabel(sprintf('Time, %s',Plant.TimeUnit))

Из графика можно заметить, что исходная верхняя граница мВ активна до t = 4. После входной задержки 4 секунд выходная переменная (OV) перемещается гладко в свою новую цель r = 1. достижение цели в t = 10. Новый мВ, связанный наложенный в t = 10, становится активным сразу. Это обеспечивает OV ниже его цели, после того, как входная задержка протечет.

Теперь примите, что вы хотите наложить верхнюю границу OV в заданном местоположении относительно цели OV. Рассмотрите следующую ограничительную команду проекта:

MPCobj.OV(1).Max = [Inf,Inf,0.4,0.3,0.2];

Это - отличающееся по горизонту ограничение. Известная входная задержка лишает возможности контроллер удовлетворять ограничение OV до третьего шага горизонта прогноза. Поэтому конечное ограничение во время первых двух шагов было бы плохой практикой. В иллюстративных целях предыдущее ограничение также уменьшается от 0,4 на шаге 3 к 0,2 на шаге 5 и после этого.

Следующие команды приводят к тем же результатам, показанным в предыдущем графике. Ограничение OV никогда не активно, потому что оно отличается совместно с заданным значением, r.

x = mpcstate(MPCobj);
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
OPTobj = mpcmoveopt;
for i = 1:N
    y(i) = Plant.C*x.Plant;
    if t(i) >= 10
        OPTobj.MVMax = 1; 
    end
    OPTobj.OutputMax = r + 0.4;
    [u(i),Info] = mpcmove(MPCobj,x,y(i),r,v,OPTobj); 
end

Скалярное значение r + 0,4 замены, которые первое конечное значение в векторе MPCobj.OV(1).Max и остающиеся конечные значения настраивают, чтобы поддержать исходный профиль, то есть, числовое различие между этими значениями, неизменно. r = 1 для симуляции, таким образом, предыдущее использование объекта mpcmoveopt эквивалентно команде

MPCobj.OV(1).Max = [Inf, Inf, 1.4, 1.3, 1.2];

Однако использование объекта mpcmoveopt включает намного меньше вычислительных издержек.

Советы

  • Если переменная неограничена в первоначальном проекте контроллера, вы не можете ограничить его с помощью mpcmoveopt. Контроллер игнорирует любые такие спецификации.

  • Вы не можете удалить ограничение из переменной, которая ограничивается в первоначальном проекте контроллера. Однако можно измениться, это к большому (или маленький) оценивает таким образом, что это вряд ли станет активным.

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

| | |

Введенный в R2018b