exponenta event banner

nlmpc

Контроллер прогнозирования нелинейной модели

Описание

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

Создание

Описание

пример

nlobj = nlmpc(nx,ny,nu) создает nlmpc объект, модель прогнозирования которого имеет nx состояния, ny выходы, и nu входные данные, где все входные данные являются управляемыми переменными. Используйте этот синтаксис, если в модели нет измеренных или неизмеренных входов возмущений.

nlobj = nlmpc(nx,ny,'MV',mvIndex,'MD',mdIndex) создает nlmpc объект, модель прогнозирования которого имеет измеренные входы возмущений. Укажите входные индексы для обрабатываемых переменных, mvIndexи измеренные возмущения, mdIndex.

nlobj = nlmpc(nx,ny,'MV',mvIndex,'UD',udIndex) создает nlmpc объект, модель прогнозирования которого имеет неизмеренные входы возмущений. Укажите входные индексы для манипулируемых переменных и неизмеренных возмущений, udIndex.

пример

nlobj = nlmpc(nx,ny,'MV',mvIndex,'MD',mdIndex,'UD',udIndex) создает nlmpc объект, модель прогнозирования которого имеет как измеренные, так и неизмеренные входы возмущений. Укажите входные индексы для манипулируемых переменных, измеренных возмущений и неизмеренных возмущений.

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

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

Число состояний модели прогнозирования, указанное как положительное целое число. Это значение сохраняется в Dimensions.NumberOfStates свойство только для чтения контроллера. После создания объекта контроллера изменить количество состояний невозможно.

Количество выходов модели прогнозирования, указанное как положительное целое число. Это значение сохраняется в Dimensions.NumberOfOutputs свойство только для чтения контроллера. Невозможно изменить количество выходов после создания объекта контроллера.

Количество входов модели прогнозирования, которые задаются в качестве переменных манипулирования, указанных как положительное целое число. Это значение сохраняется в Dimensions.NumberOfInputs свойство только для чтения контроллера. После создания объекта контроллера изменить число управляемых переменных невозможно.

Манипулируемые индексы переменных, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.MVIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.

Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.

Измеренные индексы возмущений, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.MDIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.

Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.

Неизмеренные индексы возмущений, определяемые как вектор положительных целых чисел. Это значение сохраняется в Dimensions.UDIndex свойство только для чтения контроллера. После создания объекта контроллера изменить эти индексы невозможно.

Комбинированный набор индексов из mvIndex, mdIndex, и udIndex должен содержать все целые числа из 1 через Nu, где Nu - количество входов модели прогнозирования.

Свойства

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

Время выборки модели прогнозирования, указанное как положительный конечный скаляр. Контроллер использует модель дискретного времени с временем выборки Ts для прогнозирования. Если задана модель прогнозирования непрерывного времени (Model.IsContinuousTime является true), то контроллер дискретизирует модель, используя встроенное неявное трапециевидное правило с временем выборки Ts.

Шаги горизонта прогнозирования, заданные как положительное целое число. Продукт PredictionHorizon и Ts - время прогнозирования; то есть насколько контроллер смотрит в будущее.

Горизонт управления, указанный как один из следующих:

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

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

    • Меньше горизонта прогнозирования, тогда контроллер добавляет интервал блокировки. Длина этого интервала такова, что сумма длин интервала равна р. Например, если p =10 и указывается горизонт управления ControlHorizon=[1 2 3], то контроллер использует четыре интервала с длинами [1 2 3 4].

    • Больше горизонта прогнозирования, то интервалы усекаются до тех пор, пока сумма длин интервалов не будет равна р. Например, если p =10 и указывается горизонт управления ControlHorizon= [1 2 3 6 7], то контроллер использует четыре интервала с длинами [1 2 3 4].

Кусочно-постоянные блокирующие перемещения часто слишком ограничительны для приложений оптимального планирования пути. Чтобы создать менее ограничительную проблему нелинейного программирования с лучшими условиями, можно задать кусочно-линейные интервалы блокировки переменных. Для этого установите Optimization.MVInterpolationOrder собственность вашего nlmpc объект контроллера для 1.

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

Это свойство доступно только для чтения.

Информация о размерах модели прогнозирования, заданная при создании контроллера и сохраненная в виде структуры со следующими полями.

Число состояний в модели прогнозирования, указанное как положительное целое число. Это значение соответствует nx.

Количество выходов в модели прогнозирования, указанное как положительное целое число. Это значение соответствует ny.

Число входов в модели прогнозирования, указанное как положительное целое число. Это значение соответствует либо nmv или сумма длин mvIndex, mdIndex, и udIndex.

Манипулируемые индексы переменных для модели прогнозирования, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex.

Измеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует mdIndex.

Неизмеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует udIndex.

Модель прогнозирования, заданная как структура со следующими полями.

Функция состояния, заданная как строка, символьный вектор или дескриптор функции. Для модели непрерывного прогнозирования, StateFcn - производная от состояния. Для модели дискретного прогнозирования, StateFcn - функция обновления состояния.

Если функция состояния выполняется непрерывно, контроллер автоматически дискретизирует модель с помощью неявного трапециевидного правила. Этот метод может обрабатывать умеренно жесткие модели, и его точность прогнозирования зависит от времени выборки контроллера Ts; то есть большое время выборки приводит к неточному прогнозированию.

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

Можно указать функцию состояния одним из следующих способов:

  • Имя функции в текущей рабочей папке или в пути MATLAB ®, указанное как вектор строки или символа

    Model.StateFcn = "myStateFunction";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Model.StateFcn = @myStateFunction;
  • Анонимная функция

    Model.StateFcn = @(x,u,params) myStateFunction(x,u,params)

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

Функция вывода, заданная как строка, символьный вектор или дескриптор функции. Если количество состояний и выходов модели прогнозирования одинаково, можно опустить OutputFcn, что подразумевает, что все состояния поддаются измерению; то есть каждый выход соответствует одному состоянию.

Примечание

Функция вывода не может иметь прямой проход от любой управляемой переменной к любому выходу в любое время.

Можно указать функцию вывода одним из следующих способов:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Model.OutputFcn = "myOutputFunction";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Model.OutputFcn = @myOutputFunction;
  • Анонимная функция

    Model.OutputFcn = @(x,u,params) myOutputFunction(x,u,params)

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

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

  • true - Модель непрерывного прогнозирования. В этом случае контроллер автоматически дискретизирует модель во время прогнозирования с использованием Ts.

  • false - Модель дискретно-временного прогнозирования. В этом случае Ts - время выборки модели.

Примечание

IsContinuousTime должны соответствовать функциям, указанным в Model.StateFcn и Model.OutputFcn.

Если IsContinuousTime является true, StateFcn должен возвращать производную состояния относительно времени, в текущее время. Иначе StateFcn должен возвращать состояние в следующем интервале управления.

Число необязательных параметров модели, используемых моделью прогнозирования, функцией пользовательских затрат и функциями пользовательских ограничений, указанных как неотрицательное целое число. Количество параметров включает все параметры, используемые этими функциями. Например, если функция состояния использует только параметр p1, функции ограничения используют только параметр p2, и функция затрат использует только параметр p3, то NumberOfParameters является 3.

Информация о состоянии, границы и масштабные коэффициенты, заданные как структурный массив с элементами Nx, где Nx - количество состояний. Каждый структурный элемент имеет следующие поля.

Состояние нижней границы, указанное как скаляр или вектор. По умолчанию нижняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

Границы состояний всегда являются жесткими ограничениями.

Верхняя граница состояния, заданная как скаляр или вектор. По умолчанию верхняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

Границы состояний всегда являются жесткими ограничениями.

Имя состояния, указанное как строковый или символьный вектор. Имя состояния по умолчанию: "x#", где # - его индекс состояния.

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

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

Информация выходной переменной (OV), границы и масштабные коэффициенты, заданные как структурный массив с элементами Ny, где Ny - количество выходных переменных. Для доступа к этому свойству можно использовать псевдоним OV вместо OutputVariables.

Каждый структурный элемент имеет следующие поля.

Нижняя граница OV, заданная как скаляр или вектор. По умолчанию эта нижняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

Верхняя граница OV, заданная как скаляр или вектор. По умолчанию эта верхняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

OV мягкость нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию верхние границы OV являются мягкими ограничениями.

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

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

OV мягкость верхней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию нижние границы OV являются мягкими ограничениями.

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

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

Имя OV, указанное как строковый или символьный вектор. Имя OV по умолчанию: "y#", где # - его выходной индекс.

Единицы OV, указанные как строковый или символьный вектор.

Коэффициент масштаба OV, заданный как положительный конечный скаляр. В общем случае используйте рабочий диапазон выходной переменной. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.

Информация о манипулированной переменной (MV), границах и масштабных коэффициентах, заданная как структурный массив с элементами Nmv, где Nmv - количество манипулируемых переменных. Для доступа к этому свойству можно использовать псевдоним MV вместо ManipulatedVariables.

Каждый структурный элемент имеет следующие поля.

Нижняя граница MV, заданная как скаляр или вектор. По умолчанию эта нижняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

Верхняя граница MV, заданная как скаляр или вектор. По умолчанию эта верхняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

MV мягкость нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный скаляр или вектор. По умолчанию нижние границы СН являются жесткими ограничениями.

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

Для изменения значения РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.

MV верхняя граница мягкости, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный скаляр или вектор. По умолчанию верхние границы СН являются жесткими ограничениями.

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

Для изменения значения РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, окончательное значение ECR используется для оставшихся шагов горизонта прогнозирования.

MV скорость изменения нижней границы, заданная как непозволительный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k-1), где k - текущее время. По умолчанию эта нижняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

MV скорость изменения верхней границы, заданная как неотрицательный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k-1), где k - текущее время. По умолчанию эта нижняя граница не ограничена.

Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.

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

MV скорость изменения мягкости нижней границы, где большее значение ECR указывает более мягкое ограничение, указанное как неотрицательный конечный скаляр или вектор. По умолчанию MV скорости изменения нижних границ являются жесткими ограничениями.

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

Для изменения значений РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, то конечные значения ECR используются для оставшихся шагов горизонта прогнозирования.

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

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

Для изменения значений РПУ по горизонту прогнозирования от времени k до времени k + p-1 задайте вектор до значений p. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, то конечные значения ECR используются для оставшихся шагов горизонта прогнозирования.

Имя MV, указанное как строковый или символьный вектор. Имя MV по умолчанию: "u#", где # является его входным индексом.

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

Масштабный коэффициент СН, заданный как положительный конечный скаляр. В общем случае используйте рабочий диапазон управляемой переменной. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.

Измеренная информация о возмущениях (MD) и масштабные коэффициенты, определенные как структурная матрица с элементами Nmd, где Nmd - количество измеренных возмущений. Если в модели нет измеренных возмущений, то MeasuredDisturbances является []. Для доступа к этому свойству можно использовать псевдоним MD вместо MeasuredDisturbances.

Каждый структурный элемент имеет следующие поля.

Имя MD, указанное как строковый или символьный вектор. Имя MD по умолчанию: "u#", где # является его входным индексом.

Единицы MD, заданные как строковый или символьный вектор.

Масштабный коэффициент MD, заданный как положительный конечный скаляр. В общем, используйте рабочий диапазон возмущений. Определение соответствующего масштабного коэффициента может улучшить численное кондиционирование для оптимизации.

Веса настройки функции стандартных затрат, определенные как структура. Контроллер применяет эти веса к масштабированным переменным. Поэтому веса настройки являются безразмерными значениями.

Примечание

При определении пользовательской функции затрат с помощью Optimization.CustomCostFcn и набор Optimization.ReplaceStandardCost кому true, то контроллер игнорирует веса настройки функции стандартной стоимости в Weights.

Weights имеет следующие поля.

Манипулируемые переменные настроечные веса, которые штрафуют за отклонения от целей СН, указанные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех управляемых переменных: 0.

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

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

Чтобы указать цели СН во время выполнения, создайте nlmpcmoveopt объект и задайте его MVTarget собственность.

Манипулируемые веса настройки переменной скорости, которые штрафуют за большие изменения в движениях управления, указанные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех манипулируемых переменных скоростей равен 0.1.

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

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

Веса настройки выходной переменной, штрафующие за отклонение от выходных ссылок, заданные как вектор строки или массив неотрицательных значений. Вес по умолчанию для всех выходных переменных: 1.

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

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

Вес настройки переменной Slack, заданный как положительный скаляр.

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

Пользовательская функция затрат, заданная как одна из следующих:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Optimization.CustomCostFcn = "myCostFunction";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Optimization.CustomCostFcn = @myCostFunction;
  • Анонимная функция

    Optimization.CustomCostFcn = @(X,U,e,data,params) myCostFunction(X,U,e,data,params);

Функция затрат должна иметь подпись:

function J = myCostFunction(X,U,e,data,params)

Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.

Флаг, указывающий, следует ли заменить функцию стандартных затрат функцией пользовательских затрат, указанной как одно из следующих значений:

  • true - Контроллер использует только пользовательские затраты в качестве целевой функции при оптимизации. В этом случае Weights свойство контроллера игнорируется.

  • false - Контроллер использует сумму стандартных и пользовательских затрат в качестве целевой функции при оптимизации.

Если пользовательская функция затрат не указана с помощью CustomCostFcn, то контроллер игнорирует RepalceStandardCost.

Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.

Пользовательская функция ограничения равенства, заданная следующим образом:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Optimization.CustomEqConFcn = "myEqConFunction";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Optimization.CustomEqConFcn = @myEqConFunction;
  • Анонимная функция

    Optimization.CustomEqConFcn = @(X,U,data,params) myEqConFunction(X,U,data,params);

Ваша функция ограничения равенства должна иметь подпись:

function ceq = myEqConFunction(X,U,data,p1,p2,...)

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

Пользовательская функция ограничения неравенства, заданная следующим образом:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Optimization.CustomIneqConFcn = "myIneqConFunction";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Optimization.CustomIneqConFcn = @myIneqConFunction;
  • Анонимная функция

    Optimization.CustomIneqConFcn = @(X,U,e,data,params) myIneqConFunction(X,U,e,data,params);

Ваша функция ограничения равенства должна иметь подпись:

function cineq = myIneqConFunction(X,U,e,data,params)

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

Пользовательская функция решателя нелинейного программирования, заданная как строка, символьный вектор или дескриптор функции. Если у вас нет программного обеспечения Optimization Toolbox™, необходимо указать собственный пользовательский решатель нелинейного программирования. Пользовательскую функцию решателя можно задать одним из следующих способов.

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Optimization.CustomSolverFcn = "myNLPSolver";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Optimization.CustomSolverFcn = @myNLPSolver;

Дополнительные сведения см. в разделе Настройка решателя оптимизации для нелинейного MPC.

Опции решателя, указанные как объект опций для fmincon или [].

При наличии ПО Optimization Toolbox SolverOptions содержит объект опций для fmincon решатель.

Если панель инструментов оптимизации отсутствует, SolverOptions является [].

Дополнительные сведения см. в разделе Настройка решателя оптимизации для нелинейного MPC.

Флаг, указывающий, следует ли моделировать как линейный контроллер, указанный как одно из следующих значений:

  • "off" - Моделирование контроллера как нелинейного контроллера с помощью модели нелинейного прогнозирования.

  • "Adaptive" - для каждого интервала управления линейная модель получается из заданного нелинейного состояния и выходных функций в текущей рабочей точке и используется по горизонту прогнозирования. Чтобы определить, обеспечивает ли адаптивный MPC-контроллер производительность, сравнимую с нелинейным, используйте эту опцию. Дополнительные сведения о адаптивном MPC см. в разделе Адаптивный MPC.

  • "TimeVarying" - для каждого интервала управления получают p линейных моделей из заданного нелинейного состояния и выводят функции в p рабочих точках, предсказанных из предыдущего интервала, по одной для каждого шага горизонта прогнозирования. Чтобы определить, обеспечивает ли линейный контроллер MPC с изменяющимся во времени производительностью, сравнимой с нелинейным контроллером, используйте эту опцию. Дополнительные сведения о изменяющемся во времени MPC см. в разделе Изменяющийся во времени MPC.

Для использования либо "Adaptive" или "TimeVarying" , ваш контроллер не должен иметь пользовательских ограничений и пользовательской функции затрат.

Пример моделирования нелинейного MPC-контроллера в качестве линейного контроллера см. в разделе Оптимизация и управление реактором периодического питания с использованием нелинейного MPC.

Флаг, указывающий, является ли неоптимальное решение приемлемым, указывается как логическое значение. Когда решатель нелинейного программирования достигает максимального количества итераций без нахождения решения (флаг выхода - 0), контроллер:

  • Замораживает значения СН, если UseSuboptimalSolution является false

  • Применяет неоптимальное решение, найденное решателем после окончательной итерации, если UseSuboptimalSolution является true

Чтобы указать максимальное количество итераций, используйте Optimization.SolverOptions.MaxIter.

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

  • 0 - Использование кусочно-постоянных регулируемых интервалов.

  • 1 - использование кусочно-линейных регулируемых интервалов.

Если горизонт управления является скалярным, то контроллер игнорирует MVInterpolationOrder.

Дополнительные сведения о блокировании манипулируемых переменных см. в разделе Блокирование манипулируемых переменных.

Якобианы функций модели и пользовательских функций затрат и ограничений, заданных как структура. Рекомендуется использовать якобинцев всякий раз, когда они доступны, поскольку они повышают эффективность оптимизации. Если якобиан для данной функции не указан, решатель нелинейного программирования должен численно вычислить якобиан.

Jacobian содержит следующие поля.

Якобян государственной функции z от Model.StateFcn, указано как одно из следующих

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Model.StateFcn = "myStateJacobian";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Model.StateFcn = @myStateJacobian;
  • Анонимная функция

    Model.StateFcn = @(x,u,params) myStateJacobian(x,u,params)

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

Якобиан выходной функции y от Model.OutputFcn, указано как одно из следующих:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Model.StateFcn = "myOutputJacobian";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Model.StateFcn = @myOutputJacobian;
  • Анонимная функция

    Model.StateFcn = @(x,u,params) myOutputJacobian(x,u,params)

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

Якобиан пользовательской функции затрат J от Optimization.CustomCostFcn, указано как одно из следующих:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Jacobian.CustomCostFcn = "myCostJacobian";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Jacobian.CustomCostFcn = @myCostJacobian;
  • Анонимная функция

    Jacobian.CustomCostFcn = @(X,U,e,data,params) myCostJacobian(X,U,e,data,params)

Ваша функция Jacobian должна иметь подпись:

function [G,Gmv,Ge] = myCostJacobian(X,U,e,data,params)

Дополнительные сведения см. в разделе Определение функции затрат для нелинейного MPC.

Якобян о пользовательских ограничениях равенства ceq от Optimization.CustomEqConFcn, указано как одно из следующих:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Jacobian.CustomEqConFcn = "myEqConJacobian";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Jacobian.CustomEqConFcn = @myEqConJacobian;
  • Анонимная функция

    Jacobian.CustomEqConFcn = @(X,U,data,params) myEqConJacobian(X,U,data,params);

Ваше ограничение равенства якобинская функция должна иметь подпись:

function [G,Gmv] = myEqConJacobian(X,U,data,params)

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

Якобян о пользовательских ограничениях неравенства c от Optimization.CustomIneqConFcn, указано как одно из следующих:

  • Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа

    Jacobian.CustomEqConFcn = "myIneqConJacobian";
  • Обращаться к функции в текущей рабочей папке или по пути MATLAB

    Jacobian.CustomEqConFcn = @myIneqConJacobian;
  • Анонимная функция

    Jacobian.CustomEqConFcn = @(X,U,data,params) myIneqConJacobian(X,U,data,params);

Ваше ограничение неравенства якобинская функция должна иметь подпись:

function [G,Gmv,Ge] = myIneqConJacobian(X,U,data,params)

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

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

nlmpcmoveВычислите оптимальное действие управления для нелинейного контроллера MPC
validateFcnsИзучение модели прогнозирования и пользовательских функций nlmpc или nlmpcMultistage объекты для потенциальных проблем
convertToMPCНовообращенный nlmpc объект в один или несколько mpc объекты
createParameterBusСоздание объекта шины Simulink и настройка блока Bus Creator для передачи параметров модели в блок нелинейного контроллера MPC

Примеры

свернуть все

Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.

nx = 4;
ny = 2;
nu = 1;
nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Укажите время выборки и горизонты контроллера.

Ts = 0.1;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 5;

Укажите функцию состояния контроллера, которая находится в файле pendulumDT0.m. Эта дискретно-временная модель интегрирует непрерывную временную модель, определенную в pendulumCT0.m с использованием многоступенчатого прямого метода Эйлера.

nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;

Функция состояния дискретного времени использует необязательный параметр, время выборки Ts, для интеграции модели непрерывного времени. Поэтому необходимо указать количество дополнительных параметров как 1.

nlobj.Model.NumberOfParameters = 1;

Укажите функцию вывода для контроллера. В этом случае определите первое и третье состояния как выходные. Даже если эта функция вывода не использует необязательный параметр времени выборки, необходимо указать параметр в качестве входного аргумента (Ts).

nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];

Проверка функций модели прогнозирования для номинальных состояний x0 и номинальные входы u0. Поскольку в модели прогнозирования используется пользовательский параметр, необходимо передать этот параметр в validateFcns.

x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

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

nlobj = nlmpc(3,1,'MV',3,'MD',[1 2],'UD',4);

Для просмотра состояния контроллера, выходных и входных размеров и индексов используйте Dimensions свойства контроллера.

nlobj.Dimensions
ans = struct with fields:
     NumberOfStates: 3
    NumberOfOutputs: 1
     NumberOfInputs: 4
            MVIndex: 3
            MDIndex: [1 2]
            UDIndex: 4

Укажите время и горизонты выборки контроллера.

nlobj.Ts = 0.5;
nlobj.PredictionHorizon = 6;
nlobj.ControlHorizon = 3;

Укажите функцию состояния модели прогнозирования, которая находится в файле exocstrStateFcnCT.m.

nlobj.Model.StateFcn = 'exocstrStateFcnCT';

Укажите функцию вывода модели прогнозирования, которая находится в файле exocstrOutputFcn.m.

nlobj.Model.OutputFcn = 'exocstrOutputFcn';

Проверка функций модели прогнозирования с использованием начальной рабочей точки в качестве номинального условия для тестирования и установки состояния неизмеренного возмущения. x0(3)Кому 0. Поскольку модель измерила возмущения, необходимо передать их в validateFcns.

x0 = [311.2639; 8.5698; 0];
u0 = [10; 298.15; 298.15];
validateFcns(nlobj,x0,u0(3),u0(1:2)');
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.

nx = 6;
ny = 6;
nu = 4;
nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Укажите время и горизонты выборки контроллера.

Ts = 0.4;
p = 30;
c = 4;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = p;
nlobj.ControlHorizon = c;

Укажите функцию состояния модели прогнозирования и якобиан функции состояния. В этом примере используется модель летающего робота.

nlobj.Model.StateFcn = "FlyingRobotStateFcn";
nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";

Укажите пользовательскую функцию затрат для контроллера, который заменит функцию стандартных затрат.

nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));
nlobj.Optimization.ReplaceStandardCost = true;

Укажите пользовательскую функцию ограничения для контроллера.

nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';

Проверка модели прогнозирования и пользовательских функций в начальных состояниях (x0) и начальные входы (u0) робота.

x0 = [-10;-10;pi/2;0;0;0];
u0 = zeros(nu,1); 
validateFcns(nlobj,x0,u0);
Model.StateFcn is OK.
Jacobian.StateFcn is OK.
No output function specified. Assuming "y = x" in the prediction model.
Optimization.CustomCostFcn is OK.
Optimization.CustomEqConFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Создайте нелинейный контроллер MPC с четырьмя состояниями, одной выходной переменной, одной управляемой переменной и одним измеренным возмущением.

nlobj = nlmpc(4,1,'MV',1,'MD',2);

Укажите время и горизонты выборки контроллера.

nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 3;

Укажите функцию состояния модели прогнозирования.

nlobj.Model.StateFcn = 'oxidationStateFcn';

Укажите функцию вывода модели прогнозирования и масштабный коэффициент выходной переменной.

nlobj.Model.OutputFcn = @(x,u) x(3);
nlobj.OutputVariables.ScaleFactor = 0.03;

Задайте изменяемые зависимости и масштабный коэффициент.

nlobj.ManipulatedVariables.Min = 0.0704;
nlobj.ManipulatedVariables.Max = 0.7042;
nlobj.ManipulatedVariables.ScaleFactor = 0.6;

Укажите измеренный масштабный коэффициент возмущения.

nlobj.MeasuredDisturbances.ScaleFactor = 0.5;

Вычислите состояние и входные рабочие условия для трех линейных контроллеров MPC с помощью fsolve функция.

options = optimoptions('fsolve','Display','none');

uLow = [0.38 0.5];
xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options);

uMedium = [0.24 0.5];
xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options);

uHigh = [0.15 0.5];
xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);

Создайте линейные контроллеры MPC для каждого из этих номинальных условий.

mpcobjLow = convertToMPC(nlobj,xLow,uLow);
mpcobjMedium = convertToMPC(nlobj,xMedium,uMedium);
mpcobjHigh = convertToMPC(nlobj,xHigh,uHigh);

Можно также создать несколько контроллеров, используя массивы номинальных условий. Число строк в массивах определяет число создаваемых контроллеров. Линейные контроллеры возвращаются в виде массива ячеек mpc объекты.

u = [uLow; uMedium; uHigh];
x = [xLow; xMedium; xHigh];
mpcobjs = convertToMPC(nlobj,x,u);

Просмотр свойств mpcobjLow контроллер.

mpcobjLow
 
MPC object (created on 23-Apr-2021 11:07:17):
---------------------------------------------
Sampling time:      1 (seconds)
Prediction Horizon: 10
Control Horizon:    3

Plant Model:        
                                      --------------
      1  manipulated variable(s)   -->|  4 states  |
                                      |            |-->  1 measured output(s)
      1  measured disturbance(s)   -->|  2 inputs  |
                                      |            |-->  0 unmeasured output(s)
      0  unmeasured disturbance(s) -->|  1 outputs |
                                      --------------
Indices:
  (input vector)    Manipulated variables: [1 ]
                    Measured disturbances: [2 ]
  (output vector)        Measured outputs: [1 ]

Disturbance and Noise Models:
        Output disturbance model: default (type "getoutdist(mpcobjLow)" for details)
         Measurement noise model: default (unity gain after scaling)

Weights:
        ManipulatedVariables: 0
    ManipulatedVariablesRate: 0.1000
             OutputVariables: 1
                         ECR: 100000

State Estimation:  Default Kalman Filter (type "getEstimator(mpcobjLow)" for details)

Constraints:
 0.0704 <= u1 <= 0.7042, u1/rate is unconstrained, y1 is unconstrained

Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.

nx = 6;
ny = 6;
nu = 4;
nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Укажите время и горизонты выборки контроллера.

Ts = 0.4;
p = 30;
c = 4;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = p;
nlobj.ControlHorizon = c;

Укажите функцию состояния модели прогнозирования и якобиан функции состояния. В этом примере используется модель летающего робота.

nlobj.Model.StateFcn = "FlyingRobotStateFcn";
nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";

Укажите пользовательскую функцию затрат для контроллера, который заменит функцию стандартных затрат.

nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));
nlobj.Optimization.ReplaceStandardCost = true;

Укажите пользовательскую функцию ограничения для контроллера.

nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';

Задайте линейные ограничения для переменных, которыми манипулируют.

for ct = 1:nu
    nlobj.MV(ct).Min = 0;
    nlobj.MV(ct).Max = 1;
end

Проверка модели прогнозирования и пользовательских функций в начальных состояниях (x0) и начальные входы (u0) робота.

x0 = [-10;-10;pi/2;0;0;0];
u0 = zeros(nu,1); 
validateFcns(nlobj,x0,u0);
Model.StateFcn is OK.
Jacobian.StateFcn is OK.
No output function specified. Assuming "y = x" in the prediction model.
Optimization.CustomCostFcn is OK.
Optimization.CustomEqConFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

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

[~,~,info] = nlmpcmove(nlobj,x0,u0);
Slack variable unused or zero-weighted in your custom cost function. All constraints will be hard.

Постройте график оптимальных траекторий.

FlyingRobotPlotPlanning(info)
Optimal fuel consumption =   4.712383

Figure contains 6 axes. Axes 1 with title x contains an object of type line. Axes 2 with title y contains an object of type line. Axes 3 with title theta contains an object of type line. Axes 4 with title vx contains an object of type line. Axes 5 with title vy contains an object of type line. Axes 6 with title omega contains an object of type line.

Figure contains 4 axes. Axes 1 with title Thrust u(1) contains an object of type stair. Axes 2 with title Thrust u(2) contains an object of type stair. Axes 3 with title Thrust u(3) contains an object of type stair. Axes 4 with title Thrust u(4) contains an object of type stair.

Figure contains an axes. The axes with title Optimal Trajectory contains 62 objects of type patch, line.

Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.

nlobj = nlmpc(4,2,1);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Укажите время выборки и горизонты контроллера.

Ts = 0.1;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 5;

Укажите функцию состояния контроллера, которая находится в файле pendulumDT0.m. Эта дискретно-временная модель интегрирует непрерывную временную модель, определенную в pendulumCT0.m с использованием многоступенчатого прямого метода Эйлера.

nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;

Модель прогнозирования использует необязательный параметр, Ts, для представления времени выборки. Укажите количество параметров.

nlobj.Model.NumberOfParameters = 1;

Укажите функцию вывода модели, передав параметр времени выборки в качестве входного аргумента.

nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];

Определите стандартные ограничения для контроллера.

nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 0.1;
nlobj.OV(1).Min = -10;
nlobj.OV(1).Max = 10;
nlobj.MV.Min = -100;
nlobj.MV.Max = 100;

Проверка функций модели прогнозирования.

x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Измеримы только два состояния растений. Поэтому создайте расширенный фильтр Калмана для оценки четырех состояний установки. Его функция перехода состояния определена в pendulumStateFcn.m и его измерительная функция определена в pendulumMeasurementFcn.m.

EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);

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

x = [0;0;-pi;0];
y = [x(1);x(3)];
EKF.State = x;
mv = 0;

Укажите выходное ссылочное значение.

yref = [0 0];

Создание nlmpcmoveopt и укажите параметр времени выборки.

nloptions = nlmpcmoveopt;
nloptions.Parameters = {Ts};

Запустить моделирование для 10 секунд. В течение каждого контрольного интервала:

  1. Исправьте предыдущий прогноз с помощью текущего измерения.

  2. Вычисление оптимальных перемещений управления с помощью nlmpcmove. Эта функция возвращает вычисленные оптимальные последовательности в nloptions. Передача обновленного объекта опций nlmpcmove в следующем интервале управления обеспечивает начальные догадки для оптимальных последовательностей.

  3. Спрогнозировать состояния модели.

  4. Примените первое вычисленное оптимальное контрольное перемещение к установке, обновив состояния установки.

  5. Генерируйте данные датчика с белым шумом.

  6. Сохраните состояния завода.

Duration = 10;
xHistory = x;
for ct = 1:(Duration/Ts)
    % Correct previous prediction
    xk = correct(EKF,y);
    % Compute optimal control moves
    [mv,nloptions] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions);
    % Predict prediction model states for the next iteration
    predict(EKF,[mv; Ts]);
    % Implement first optimal control move
    x = pendulumDT0(x,mv,Ts);
    % Generate sensor data
    y = x([1 3]) + randn(2,1)*0.01;
    % Save plant states
    xHistory = [xHistory x];
end

Постройте график результирующих траекторий состояния.

figure
subplot(2,2,1)
plot(0:Ts:Duration,xHistory(1,:))
xlabel('time')
ylabel('z')
title('cart position')
subplot(2,2,2)
plot(0:Ts:Duration,xHistory(2,:))
xlabel('time')
ylabel('zdot')
title('cart velocity')
subplot(2,2,3)
plot(0:Ts:Duration,xHistory(3,:))
xlabel('time')
ylabel('theta')
title('pendulum angle')
subplot(2,2,4)
plot(0:Ts:Duration,xHistory(4,:))
xlabel('time')
ylabel('thetadot')
title('pendulum velocity')

Figure contains 4 axes. Axes 1 with title cart position contains an object of type line. Axes 2 with title cart velocity contains an object of type line. Axes 3 with title pendulum angle contains an object of type line. Axes 4 with title pendulum velocity contains an object of type line.

Представлен в R2018b