mpcmoveopt

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

Описание

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

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

Создание

Синтаксис

Описание

пример

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

Свойства

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

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

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

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

Формат OutputWeights должен совпадать с форматом Weights.OutputVariables свойство объекта контроллера. Например, вы не можете задать постоянные веса через горизонт предсказания в объекте контроллера, и затем задать изменяющиеся во времени веса с помощью mpcmoveopt.

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

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

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

Формат MVWeights должен совпадать с форматом Weights.ManipulatedVariables свойство объекта контроллера. Например, вы не можете задать постоянные веса через горизонт предсказания в объекте контроллера, и затем задать изменяющиеся во времени веса с помощью mpcmoveopt.

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

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

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

Формат MVRateWeights должен совпадать с форматом Weights.ManipulatedVariablesRate свойство объекта контроллера. Например, вы не можете задать постоянные веса через горизонт предсказания в объекте контроллера, и затем задать изменяющиеся во времени веса с помощью mpcmoveopt.

Ослабьте переменный настраивающий вес, который заменяет 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 isempty. Поэтому значение диспетчера для 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