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 обеспечить регулировку ограничений и весов во время выполнения симуляции замкнутой системы.

Примеры

свернуть все

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

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

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 и MV, соответственно.

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

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

Figure contains an axes. The axes 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. The axes 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. The axes 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 горизонта предсказания.

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

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

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

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

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

свернуть все

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

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

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

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

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

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

Предсказанные оптимальные манипулированные переменные корректировки (движения), возвращенные как (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 или положительная скалярная величина значение.

  • .r= 0 - Все ограничения были удовлетворены для всего горизонта предсказания.

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

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

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

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

  • 0 - Не удалось решить задачу оптимизации в указанном максимальном количестве итераций.

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

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

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

  • 'feasible' - Получено оптимальное решение (Iterations > 0)

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

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

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

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

Совет

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

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

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

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

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

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

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

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

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

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