mpcmoveMultiple

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

Описание

mv = mpcmoveMultiple(MPCArray,states,index,ym,r,v) вычисляет оптимальные перемещения манипулированной переменной в текущее время с помощью прогнозирующего контроллера модели, выбранного по индексу из массива контроллеров MPC. Эти результаты зависят от свойств, содержащихся в контроллере MPC и состояниях контроллера. Результат также зависит от измеренных выходов объекта управления, ссылок на выход (уставки) и измеренных входов нарушения порядка. mpcmoveMultiple обновляет состояние контроллера, когда используется оценка состояния по умолчанию. Звонить mpcmoveMultiple неоднократно, чтобы симулировать прогнозирующее управление модели с обратной связью.

[mv,info] = mpcmoveMultiple(MPCArray,states,index,ym,r,v) возвращает дополнительные сведения о расчетах в структуре. Чтобы определить, завершено ли оптимальное вычисление управления нормально, проверьте данные в info.

[___] = mpcmoveMultiple(___,options) изменяет выбранные настройки контроллера, используя опции, заданные с mpcmoveopt. Эти изменения применяются только к текущему времени, позволяя моделировать командную строку с помощью mpcmoveMultiple для имитации блока Multiple MPC Controllers в Simulink® вычислительно эффективным способом.

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

свернуть все

Контроллеры MPC для моделирования, заданный как массив ячеек традиционных (неявных) объектов контроллера MPC. Используйте mpc Команда для создания контроллеров MPC.

Все контроллеры в MPCArray необходимо использовать оценку состояния по умолчанию или пользовательскую оценку состояния. Несоответствие не разрешено.

Токовый контроллер, состояния для каждого контроллера MPC в MPCArray, заданный как массив ячеек mpcstate объекты.

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

Если вы используете оценку состояния по умолчанию, mpcmoveMultiple ожидает x для представления x[n|n-1] (где x является одной записью в states, текущее состояние одного контроллера MPC в MPCArray). mpcmoveMultiple команда обновляет значения состояния в предыдущем контрольном интервале этой информацией. Поэтому вы не должны программно обновляться x вообще. Оценщик состояния по умолчанию использует установившийся фильтр Калмана.

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

Индекс выбранного контроллера в массиве ячеек MPCArray, заданный как положительное целое число.

Измеренный ток выходов, заданный как вектор-строка длины Nym, где Nym - количество измеренных выходов. Если вы используете пользовательскую оценку состояния, ym игнорируется. Если вы задаете ym = [], затем mpcmoveMultiple использует соответствующее номинальное значение.

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

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

Если вы задаете r = [], затем mpcmoveMultiple использует соответствующее номинальное значение.

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

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

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

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

Если вы задаете v = [], затем mpcmoveMultiple использует соответствующее номинальное значение.

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

Переопределите значения для выбранных свойств выбранного контроллера MPC, заданные как объект опций, который вы создаете с mpcmoveopt. Эти опции применяются к текущему mpcmoveMultiple только мгновенное время. Использование options приводит к тому же результату, что и переопределение или изменение выбранного контроллера перед каждым вызовом на mpcmoveMultiple, но включает значительно меньше накладных расходов. Использование options эквивалентно использованию блока Multiple MPC Controllers 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.

Совет

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

Введенный в R2014b