mpcmove

Вычислите действие оптимального управления и обновите состояния контроллера

Описание

Используйте эту команду, чтобы симулировать контроллер MPC в с обратной связью с моделью объекта управления дискретного времени. Вызвать mpcmove неоднократно в цикле for, чтобы вычислить переменную, которой управляют, и обновить состояния контроллера на каждом временном шаге.

пример

mv = mpcmove(MPCobj,xc,ym,r,v) возвращает оптимальное перемещение mv и обновляет состояния xc контроллера MPCobj.

Переменная mv, которой управляют, в текущее время вычисляется данный:

  • объект контроллера, MPCobj,

  • текущее предполагаемое расширенное состояние, xc,

  • измеренный объект выходные параметры, ym,

  • выходные ссылки, r,

  • и измеренный вход воздействия, v.

Обновленное состояние контроллера возвращено во входном параметре xc.

пример

[mv,info] = mpcmove(MPCobj,xc,ym,r,v) возвращает дополнительную информацию о задаче оптимизации, решенной, чтобы вычислить mv.

[___] = mpcmove(___,options) ограничения значения по умолчанию переопределений и веса в MPCobj со значениями, заданными в Options, mpcmoveopt объект. Используйте Options обеспечить корректировку во время выполнения ограничений и весов во время симуляции с обратной связью.

Примеры

свернуть все

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

Задайте модель объекта управления и создайте прогнозирующий контроллер модели с ограничениями мВ.

ts = 2;
Plant = ss(0.8,0.5,0.25,0,ts);
MPCobj = 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.
MPCobj.MV(1).Min = -2;
MPCobj.MV(1).Max = 2;

Инициализируйте и возвратите объект указателя в состояние контроллера для симуляции. Используйте свойства состояния по умолчанию.

xc = 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.

Установите опорный сигнал. Нет никакого измеренного воздействия.

r = 1;

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

t = [0:ts:40];
N = length(t);
y = zeros(N,1); 
u = zeros(N,1); 
for i = 1:N
    % simulated plant and predictive model are identical
    y(i) = 0.25*xc.Plant;
    u(i) = mpcmove(MPCobj,xc,y(i),r);
end

y и u сохраните OV и значения мВ, соответственно.

Анализируйте результат.

[ts,us] = stairs(t,u);
plot(ts,us,'r-',t,y,'b--')
legend('MV','OV')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent MV, OV.

Измените верхнюю границу мВ как доходы симуляции с помощью mpcmoveopt объект.

MPCopt = mpcmoveopt;
MPCopt.MVMin = -2;
MPCopt.MVMax = 2;

Симулируйте ответ с обратной связью и введите изменение верхнего предела в реальном времени в восемь секунд (пятый шаг итерации).

xc = mpcstate(MPCobj);
y = zeros(N,1);
u = zeros(N,1);
for i = 1:N
    % simulated plant and predictive model are identical
    y(i) = 0.25*xc.Plant;
    if i == 5
    	MPCopt.MVMax = 1;
    end
    u(i) = mpcmove(MPCobj,xc,y(i),r,[],MPCopt);
end

Анализируйте результат.

[ts,us] = stairs(t,u);
plot(ts,us,'r-',t,y,'b--')
legend('MV','OV')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent MV, OV.

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

ts = 2;
Plant = ss(0.8,0.5,0.25,0,ts);

Создайте прогнозирующий контроллер модели с ограничениями и на переменную, которой управляют, и на скорость изменения переменной, которой управляют. Горизонтом предсказания является 10 интервалы и горизонт управления блокируются.

MPCobj = mpc(Plant,ts,10,[2 3 5]);
-->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;
MPCobj.MV(1).RateMin = -1;
MPCobj.MV(1).RateMax = 1;

Инициализируйте (и возвратите указатель на), внутреннее состояние контроллера для симуляции.

xc = 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.
xc.Plant = 2.8;
xc.LastMove = 0.85;

Вычислите перемещение оптимального управления в текущее время.

y = 0.25*xc.Plant;
r = 1;
[u,Info] = mpcmove(MPCobj,xc,y,r);

Анализируйте предсказанные оптимальные последовательности.

[ts,us] = stairs(Info.Topt,Info.Uopt);
plot(ts,us,'r-',Info.Topt,Info.Yopt,'b--')
legend('MV','OV')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent MV, OV.

plot игнорирует Info.Uopt(end) когда это - NaN.

Исследуйте оптимальную стоимость.

Info.Cost
ans = 0.0793

Входные параметры

свернуть все

Прогнозирующий контроллер модели в виде контроллера MPC объект. Чтобы создать контроллер MPC, использовать mpc.

Указатель состояния токового контроллера в виде mpcstate объект.

Прежде чем вы начнете симуляцию с mpcmove, инициализируйте контроллер и возвратите указатель на его состояние с помощью xc = mpcstate(MPCobj). Затем измените свойства по умолчанию xc как соответствующий. mpcmove изменяет состояние контроллера. Объект xc указателя всегда отражайте текущее (обновленное) состояние контроллера.

Если вы используете оценку состояния по умолчанию, mpcmove ожидает xc представлять xc[n|n-1]. mpcmove команда обновляет значения состояния в предыдущем контрольном интервале с той информацией. Поэтому вы не должны программно обновляться xc вообще. Средство оценки состояния по умолчанию использует установившийся Фильтр Калмана.

Если вы используете пользовательскую оценку состояния, mpcmove ожидает xc представлять xc[n|n]. Поэтому до каждого mpcmove команда, необходимо установить xc.Plant, xc.Disturbance, и xc.Noise к наилучшим оценкам этих состояний (использующий последние измерения) в текущем контрольном интервале.

Текущие измеренные выходные значения во время k в виде вектор-столбца длины Nym, где Nym является количеством измеренных выходных параметров.

Если вы используете пользовательскую оценку состояния, установите ym = [].

Выходные значения ссылки объекта в виде p-by-Ny массив, где p является горизонтом предсказания MPCobj и Ny является количеством выходных параметров. Строка r(i,:) задает ссылочные значения на шаге i горизонта предсказания.

r должен содержать по крайней мере одну строку. Если r содержит меньше, чем строки p, mpcmove копирует последнюю строку, чтобы заполнить p-by-Ny массив. Если вы предоставляете точно одну строку, поэтому, постоянная ссылка применяется к целому горизонту предсказания.

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

Текущие и ожидаемые измеренные воздействия в виде (p +1)-by-Nmd массив, где p является горизонтом предсказания MPCobj и Nmd является количеством измеренных воздействий. Первая строка v задает текущие измеренные значения воздействия. Строка v(i+1,:) задает ожидаемые значения воздействия на шаге i горизонта предсказания.

Моделирование измеренных воздействий обеспечивает действие управления прямого распространения. Если ваша модель объекта управления не включает измеренные воздействия, используйте v = [].

Если ваша модель включает измеренные воздействия, v должен содержать по крайней мере одну строку. Если v содержит меньше, чем p +1 строка, mpcmove копирует последнюю строку, чтобы заполнить (p +1)-by-Nmd массив. Если вы предоставляете точно одну строку, постоянное измеренное воздействие запрашивает целый горизонт предсказания.

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

Опции во время выполнения в виде mpcmoveopt объект. Используйте options заменять выбранные свойства MPCobj в процессе моделирования. Эти опции применяются к току mpcmove момент времени только. Используя options приводит к тому же результату как переопределяющий или изменяющий MPCobj перед каждым вызовом mpcmove, но включает значительно меньше служебное. Используя options эквивалентно использованию Simulink MPC Controller® блокируйтесь в сочетании с дополнительными входными сигналами, которые изменяют настройки контроллера, такие как мВ и ограничения OV.

Выходные аргументы

свернуть все

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

Если контроллер обнаруживает неосуществимую задачу оптимизации или сталкивается с числовыми трудностями при решении плохо обусловленной задачи оптимизации, mv остается в его новом успешном решении, xc.LastMove.

В противном случае, если задача оптимизации выполнима, и решатель достигает заданного максимального количества итераций, не находя оптимальное решение, mv:

  • Остается в его новом успешном решении если Optimizer.UseSuboptimalSolution свойством контроллера является false.

  • Субоптимальное решение, достигнутое после итоговой итерации если Optimizer.UseSuboptimalSolution свойством контроллера является true. Для получения дополнительной информации смотрите Субоптимальное Решение QP.

Детали решения, возвращенные как структура со следующими полями.

Предсказанные оптимальные переменные корректировки, которыми управляют (перемещения), возвращенные как (p +1)-by-Nmv массив, где p является горизонтом предсказания и Nmv, являются количеством переменных, которыми управляют.

Uopt(i,:) содержит расчетные оптимальные значения во время k+i-1, для i = 1,...,p, где k текущее время. Первая строка Info.Uopt содержит те же значения переменных, которыми управляют, как выходной аргумент mv. Поскольку контроллер не вычисляет перемещения оптимального управления во время k+p, Uopt(p+1,:) равно Uopt(p,:).

Оптимальная последовательность выходной переменной, возвращенная как (p +1)-by-Ny массив, где p является горизонтом предсказания и Ny, является количеством выходных параметров.

Первая строка Info.Yopt содержит расчетные выходные параметры во время k на основе предполагаемых состояний и измеренных воздействий; это не измеренный выход во время k. Yopt(i,:) содержит предсказанные выходные значения во время k+i-1, для i = 1,...,p+1.

Yopt(i,:) содержит расчетные выходные значения во время k+i-1, для i = 2,...,p+1, где k текущее время. Yopt(1,:) вычисляется на основе предполагаемых состояний и измеренных воздействий.

Оптимальная модель предсказания утверждает последовательность, возвращенную как (p +1)-by-Nx массив, где p является горизонтом предсказания, и Nx является количеством состояний на объекте, и неизмеренные возмущения (состояния из шумовых моделей не включены).

Xopt(i,:) содержит расчетные значения состояния во время k+i-1, для i = 2,...,p+1, где k текущее время. Xopt(1,:) эквивалентен текущие состояния утверждают значения.

Временные интервалы, возвращенные как вектор-столбец длины p +1. Topt(1) = 0, представляя текущее время. Последующие временные шаги Topt(i) даны Ts*(i-1), где Ts = MPCobj.Ts шаг расчета контроллера.

Используйте Topt при графическом выводе Uopt, Xopt, или Yopt последовательности.

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

  • ε = 0 — Всем ограничениям удовлетворили для целого горизонта предсказания.

  • ε> 0 — По крайней мере одно мягкое ограничение нарушено. Когда больше чем одно ограничение нарушено, ε представляет худший случай мягкое нарушение ограничений (масштабируемый вашими значениями ECR для каждого ограничения).

Смотрите Задачу оптимизации для получения дополнительной информации.

Количество итераций решателя, возвращенных как одно из следующего:

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

  • 0 — Задача оптимизации не могла быть решена в заданном максимальном количестве итераций.

  • –1 — Задача оптимизации была неосуществима. Задача оптимизации неосуществима, если никакое решение не может удовлетворить всем трудным ограничениям.

  • –2 — Числовая ошибка произошла при решении задачи оптимизации.

Состояние решения для оптимизации, возвращенное как одно из следующего:

  • 'feasible' — Оптимальное решение было получено (Iterations > 0)

  • 'infeasible' — Решатель обнаружил проблему без возможного решения (Iterations = –1), или числовая ошибка произошла (Iterations = –2)

  • 'unreliable' — Решателю не удалось сходиться (Iterations = 0). В этом случае, если MPCobj.Optimizer.UseSuboptimalSolution falseU замораживания в новом успешном решении. В противном случае это использует субоптимальное решение, найденное во время последней итерации решателя.

Стоимость целевой функции, возвращенная как неотрицательное скалярное значение. Стоимость определяет количество степени, до которой контроллер достиг ее целей. Для получения дополнительной информации смотрите Задачу оптимизации.

Величина затрат только значима когда QPCode = 'feasible', или когда QPCode = 'feasible' и MPCobj.Optimizer.UseSuboptimalSolution true.

Советы

  • mpcmove обновления xc, даже при том, что это - входной параметр.

  • Если ymR или v задан как [], mpcmove использует соответствующий MPCobj.Model.Nominal значение вместо этого.

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

  • Чтобы определить состояние оптимизации, проверяйте Info.Iterations и Info.QPCode.

Альтернативы

  • Использование sim поскольку объект не сочетается и шумовая симуляция если не с помощью ограничений во время выполнения или изменений веса.

  • Используйте приложение MPC Designer, чтобы в интерактивном режиме спроектировать и симулировать прогнозирующие контроллеры модели.

  • Используйте блок MPC Controller в Simulink и для генерации кода.

  • Использование mpcmoveCodeGeneration для генерации кода.

Представлено до R2006a