Нелинейный прогнозирующий контроллер модели
Нелинейный прогнозирующий контроллер модели вычисляет оптимальные перемещения управления через горизонт предсказания с помощью нелинейной модели предсказания, нелинейной функции затрат и нелинейных ограничений. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.
nx
- Количество состояний модели предсказанияКоличество состояний модели предсказания, заданное как положительное целое число. Это значение сохранено в Dimensions.NumberOfStates
свойство только для чтения контроллера. Вы не можете изменить количество состояний после создания объекта контроллера.
ny
- Количество выходов модели предсказанияКоличество выходов модели предсказания, заданное как положительное целое число. Это значение сохранено в Dimensions.NumberOfOutputs
свойство только для чтения контроллера. Вы не можете изменить количество выходов после создания объекта контроллера.
nu
- Количество входов модели предсказанияКоличество входов модели предсказания, которые все заданы как управляемые переменные, заданное в виде положительного целого числа. Это значение сохранено в Dimensions.NumberOfInputs
свойство только для чтения контроллера. Вы не можете изменить количество манипулируемых переменных после создания объекта контроллера.
mvIndex
- Манипулируемые индексы переменныхМанипулируемые индексы переменных, заданные как вектор положительных целых чисел. Это значение сохранено в Dimensions.MVIndex
свойство только для чтения контроллера. Вы не можете изменить эти индексы после создания объекта контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
mdIndex
- Измеренные индексы нарушения порядкаИзмеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Это значение сохранено в Dimensions.MDIndex
свойство только для чтения контроллера. Вы не можете изменить эти индексы после создания объекта контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
udIndex
- Неизмеренные индексы нарушения порядкаНеизмеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Это значение сохранено в Dimensions.UDIndex
свойство только для чтения контроллера. Вы не можете изменить эти индексы после создания объекта контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
Ts
- Время расчета модели предсказания1
(по умолчанию) | положительный конечный скалярМодель предсказания шага расчета, заданная как положительный конечный скаляр. Контроллер использует модель в дискретном времени со шаг расчета Ts
для предсказания. Если вы задаете модель предсказания в непрерывном времени (Model.IsContinuousTime
является true
), затем контроллер дискретизирует модель с помощью встроенного неявного метода трапеций с шагом расчета Ts
.
PredictionHorizon
- Горизонт предсказания10
(по умолчанию) | положительное целое числоШаги горизонта предсказания, заданные как положительное целое число. Область продукта PredictionHorizon
и Ts
- время предсказания; то есть как далеко контроллер смотрит в будущее.
ControlHorizon
- Горизонт управления2
(по умолчанию) | положительное целое число | вектор положительных целых чиселГоризонт управления, заданный как один из следующих:
Положительное целое число, m, между 1
и p включительно, где p равно PredictionHorizon
. В этом случае контроллер вычисляет, m свободные движения управления происходят в моменты времени, k через k + m -1, и удерживает выходной сигнал контроллера постоянным для остальных шагов горизонта предсказания от k + m до k + p -1. Здесь k текущий контрольный интервал.
Вектор положительных целых чисел [m 1, m 2,...], задающий длины блокирующих интервалов. По умолчанию контроллер вычисляет M блоки свободных ходов, где M - количество интервалов блокировки. Первое бесплатное движение относится ко временам k через k + <reservedrangesplaceholder6> 1-1, второе бесплатное движение применяется со времени k + <reservedrangesplaceholder4> 1 через k + <reservedrangesplaceholder2> 1 + <reservedrangesplaceholder1> 2-1 и так далее. Использование шагов блоков может улучшить робастность вашего контроллера. Сумма значений в ControlHorizon
должен совпадать с p горизонта предсказания. Если вы задаете вектор, сумма которого:
Меньше, чем горизонт предсказания, тогда контроллер добавляет интервал блокировки. Длина этого интервала такова, что сумма длин интервала p. Для примера, если p = 10
и вы задаете контрольный горизонт ControlHorizon
= [1 2 3]
, затем контроллер использует четыре интервала с длинами [1 2 3 4]
.
Больше горизонта предсказания, затем интервалы усекаются до тех пор, пока сумма длин интервалов не будет равна p. Для примера, если p = 10
и вы задаете контрольный горизонт ControlHorizon
= [1 2 3 6 7]
, затем контроллер использует четыре интервала с длинами [1 2 3 4]
.
Кусочно-постоянные блокирующие перемещения часто являются слишком ограничительными для оптимальных приложений планирования пути. Чтобы создать менее ограниченную, лучше обусловленную нелинейную задачу программирования, можно задать кусочно-линейные манипулируемые интервалы блокирования переменных. Для этого установите Optimization.MVInterpolationOrder
свойство вашего nlmpc
объект контроллера, для 1
.
Для получения дополнительной информации о том, как манипулированная блокировка переменных работает с различными методами интерполяции, см. «Манипулированная блокировка переменных».
Dimensions
- Информация о размерности модели предсказанияЭто свойство доступно только для чтения.
Размерная информация модели предсказания, заданная когда контроллер создан и сохранен как структура со следующими полями.
NumberOfStates
- Количество состоянийКоличество состояний в модели предсказания, заданное как положительное целое число. Это значение соответствует nx
.
NumberOfOutputs
- Количество выходовКоличество выходов в модели предсказания, заданное в виде положительного целого числа. Это значение соответствует ny
.
NumberOfInputs
- Количество состоянийКоличество входов в модели предсказания, заданное в виде положительного целого числа. Это значение соответствует любому из nmv
или сумму длин mvIndex
, mdIndex
, и udIndex
.
MVIndex
- Манипулируемые индексы переменныхМанипулируемые индексы переменных для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex
.
MDIndex
- Измеренные индексы нарушения порядкаИзмеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mdIndex
.
UDIndex
- Неизмеренные индексы нарушения порядкаНеизмеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует udIndex
.
Model
- Модель предсказанияМодель предсказания, заданная как структура со следующими полями.
StateFcn
- Функция состоянияФункция состояния, заданная как строка, вектор символов или указатель на функцию. Для модели предсказания в непрерывном времени, StateFcn
- производная от состояния функция. Для модели предсказания в дискретном времени, StateFcn
- функция обновления состояния.
Если ваша функция состояния находится в непрерывном времени, контроллер автоматически дискретизирует модель с помощью неявного метода трапеций. Этот метод может обрабатывать умеренно жесткие модели, и его точность предсказания зависит от шага расчета контроллером Ts
; то есть большой шаг расчета приводит к неточному предсказанию.
Если метод дискретизации по умолчанию не обеспечивает удовлетворительное предсказание для вашего приложения, можно задать свою собственную модель предсказания в дискретном времени, которая использует другой метод, такой как многостадийное прямое правило Эйлера.
Вы можете задать свою функцию состояния одним из следующих способов:
Имя функции в текущей рабочей папке или в MATLAB® путь, заданный как строковый или символьный вектор
Model.StateFcn = "myStateFunction";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateFunction;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateFunction(x,u,params)
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
OutputFcn
- Выходная функция[]
(по умолчанию) | строку | вектор символов | указатель на функциюВыходная функция, заданная как строка, вектор символов или указатель на функцию. Если количество состояний и выходов модели предсказания одинаковое, можно опустить OutputFcn
, что подразумевает, что все состояния поддаются измерению; то есть каждый выход соответствует одному состоянию.
Примечание
Вы выводите функцию не можете иметь прямое сквозное соединение от любой манипулированной переменной к любому выходу в любой момент времени.
Можно задать выходную функцию одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.OutputFcn = "myOutputFunction";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.OutputFcn = @myOutputFunction;
Анонимная функция
Model.OutputFcn = @(x,u,params) myOutputFunction(x,u,params)
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
IsContinuousTime
- Флаг, указывающий временной интервал модели предсказанияtrue
(по умолчанию) | false
Флаг, указывающий временной интервал модели предсказания, заданный как один из следующих:
true
- Модель предсказания в непрерывном времени. В этом случае контроллер автоматически дискретизирует модель во время предсказания, используя Ts
.
false
- Модель предсказания в дискретном времени. В этом случае Ts
- шаг расчета модели.
Примечание
IsContinuousTime
должны соответствовать функциям, указанным в Model.StateFcn
и Model.OutputFcn
.
Если IsContinuousTime
является true
, StateFcn
должен вернуть производную состояния относительно времени, в текущее время. В противном случае StateFcn
необходимо вернуть состояние в следующий контрольный интервал.
NumberOfParameters
- Количество необязательных параметров модели0
(по умолчанию) | неотрицательное целое числоКоличество необязательных параметров модели, используемых моделью предсказания, пользовательской функцией стоимости и пользовательскими функциями ограничения, заданное в виде неотрицательного целого числа. Количество параметров включает все параметры, используемые этими функциями. Для примера, если функция состояния использует только параметр p1
ограничительные функции используют только параметр p2
, и функция затрат использует только параметр p3
, затем NumberOfParameters
является 3
.
States
- Информация о состоянии, границы и масштабные коэффициентыИнформация о состоянии, границы и масштабные коэффициенты, заданные как массив структур с Nx элементами, где Nx количество состояний. Каждый структурный элемент имеет следующие поля.
Min
- нижняя граница состояния-Inf
(по умолчанию) | скалярный вектор |Нижняя граница состояния, заданная как скаляр или вектор. По умолчанию нижняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Границы состояний всегда являются жесткими ограничениями.
Max
- Верхняя граница состоянияInf
(по умолчанию) | скалярный вектор |Верхняя граница состояния, заданная как скаляр или вектор. По умолчанию верхняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Границы состояний всегда являются жесткими ограничениями.
Name
- имя государстваИмя состояния, заданное как строковый или символьный вектор. Имя состояния по умолчанию "x#"
, где #
- его индекс состояния.
Units
- Государственные модули""
(по умолчанию) | строку | вектор символовМодули измерения состояния, заданные как строковый или символьный вектор.
ScaleFactor
- Масштабный коэффициент состояния1
(по умолчанию) | положительный конечный скалярМасштабный коэффициент состояния, заданный как положительный конечный скаляр. В целом используйте рабочую область значений состояния. Установка правильного масштабного коэффициента может улучшить числовое обусловление для оптимизации.
OutputVariables
- Выход информации переменной, границ и масштабных коэффициентовВыход переменной (OV), границы и масштабные коэффициенты, заданные как массив структур с Ny элементами, где Ny - количество выходных переменных. Для доступа к этому свойству можно использовать псевдоним OV
вместо OutputVariables
.
Каждый структурный элемент имеет следующие поля.
Min
- OV нижняя граница-Inf
(по умолчанию) | скалярный вектор |OV нижняя граница, заданная как скаляр или вектор. По умолчанию эта нижняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Max
- OV верхняя границаInf
(по умолчанию) | скалярный вектор |OV верхняя граница, заданная как скаляр или вектор. По умолчанию эта верхняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
MinECR
- OV нижняя граничная мягкость1
(по умолчанию) | неотрицательный конечный вектор | скаляраНижняя граничная мягкость OV, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательная конечная скаляра или вектор. По умолчанию верхние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значение ECR по горизонту предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательное значение ECR используется для остальных шагов горизонта предсказания.
MaxECR
- OV верхняя граничная мягкость1
(по умолчанию) | неотрицательный конечный вектор | скаляраOV верхняя граничная мягкость, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательная конечная скаляра или вектор. По умолчанию нижние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значение ECR по горизонту предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательное значение ECR используется для остальных шагов горизонта предсказания.
Name
- Имя OVИмя OV, заданное как строковый или символьный вектор. Имя OV по умолчанию "y#"
, где #
- его выходной индекс.
Units
- модули""
(по умолчанию) | строку | вектор символовМодули, заданные как строковый или символьный вектор.
ScaleFactor
- масштабный коэффициент OV1
(по умолчанию) | положительный конечный скалярКоэффициент шкалы OV, заданный как положительный конечный скаляр. В целом используйте рабочую область значений переменного выхода. Установка правильного масштабного коэффициента может улучшить числовое обусловление для оптимизации.
ManipulatedVariables
- Манипулирование информацией переменной, границами и масштабными факторамиИнформация, ограничения и масштабные коэффициенты Манипулированной Переменной (MV), заданные как массив структур с Nmv элементами, где Nmv количество манипулируемых переменных. Для доступа к этому свойству можно использовать псевдоним MV
вместо ManipulatedVariables
.
Каждый структурный элемент имеет следующие поля.
Min
- нижняя граница СН-Inf
(по умолчанию) | скалярный вектор |MV нижняя граница, заданная как скаляр или вектор. По умолчанию эта нижняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Max
- верхняя граница СНInf
(по умолчанию) | скалярный вектор |Верхняя граница MV, заданная как скаляр или вектор. По умолчанию эта верхняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
MinECR
- нижняя граничная мягкость СН0
(по умолчанию) | неотрицательный скаляр |MV нижняя граничная мягкость, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательная скаляром или вектором. По умолчанию нижние границы СН являются жесткими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значение ECR по горизонту предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательное значение ECR используется для остальных шагов горизонта предсказания.
MaxECR
- верхняя граница СН0
(по умолчанию) | неотрицательный скаляр |MV верхняя граничная мягкость, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный скаляр или вектор. По умолчанию верхние границы СН являются жесткими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значение ECR по горизонту предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательное значение ECR используется для остальных шагов горизонта предсказания.
RateMin
- нижняя граница скорости изменения СН-Inf
(по умолчанию) | непозитивный скаляр |Скорость изменения MV нижняя граница, заданная как непозитивный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k -1), где k - текущее время. По умолчанию эта нижняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
RateMax
- верхняя граница скорости изменения СНInf
(по умолчанию) | неотрицательный скаляр |MV скорость изменения верхней границы, заданная как неотрицательный скаляр или вектор. Скорость изменения MV определяется как MV (k) - MV (k -1), где k - текущее время. По умолчанию эта нижняя граница без ограничений.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
RateMinECR
- Скорость изменения MV нижняя граничная мягкость0
(по умолчанию) | неотрицательный конечный вектор | скаляраСкорость изменения MV нижняя связанная мягкость, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательная конечная скаляра или вектор. По умолчанию нижние границы скорости изменения MV являются жесткими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значения ECR по горизонту предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательные значения ECR используются для остальных шагов горизонта предсказания.
RateMaxECR
- скорость изменения MV верхней связанной мягкости0
(по умолчанию) | неотрицательный конечный вектор | скаляраСкорость изменения верхней связанной мягкости MV, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательная конечная скаляра или вектор. По умолчанию скорость изменения MV верхние границы являются жесткими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы изменить значения ECR по горизонту предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, окончательные значения ECR используются для остальных шагов горизонта предсказания.
Name
- Имя СНИмя MV, заданное как строковый или символьный вектор. Имя MV по умолчанию "u#"
, где #
является его входным индексом.
Units
- модули СН""
(по умолчанию) | строку | вектор символовМодули измерения MV, заданные как строковый или символьный вектор.
ScaleFactor
- масштабный коэффициент СН1
(по умолчанию) | положительный конечный скалярКоэффициент шкалы MV, заданный как положительный конечный скаляр. В целом используйте рабочую область значений управляемой переменной. Установка правильного масштабного коэффициента может улучшить числовое обусловление для оптимизации.
MeasuredDisturbances
- Измеренная информация о нарушениях порядка и масштабные коэффициентыИнформация измеренного нарушения порядка (MD) и масштабные коэффициенты, заданные как массив структур с Nmd элементами, где Nmd - количество измеренных нарушений порядка. Если ваша модель не имеет измеренных нарушений порядка, то MeasuredDisturbances
является []
. Для доступа к этому свойству можно использовать псевдоним MD
вместо MeasuredDisturbances
.
Каждый структурный элемент имеет следующие поля.
Name
- Имя MDMD- имени, заданный как строка или вектор символов. Имя MD по умолчанию "u#"
, где #
является его входным индексом.
Units
- модули MD""
(по умолчанию) | строку | вектор символовMD- модулей, заданный как строка или вектор символов.
ScaleFactor
- масштабный коэффициент MD1
(по умолчанию) | положительный конечный скалярКоэффициент шкалы MD, заданный как положительный конечный скаляр. В целом используйте рабочую область значений нарушения порядка. Установка правильного масштабного коэффициента может улучшить числовое обусловление для оптимизации.
Weights
- Веса настройки функции стандартной стоимостиВеса настройки функции стандартных затрат, заданные как структура. Контроллер применяет эти веса к масштабируемым переменным. Поэтому веса настройки являются безразмерными значениями.
Примечание
Если вы определяете пользовательскую функцию затрат используя Optimization.CustomCostFcn
и установите Optimization.ReplaceStandardCost
на true
, затем контроллер игнорирует веса настройки функции стандартных затрат в Weights
.
Weights
имеет следующие поля.
ManipulatedVariables
- Манипулируемые переменные веса настройкиМанипулируемые веса настройки переменных, которые штрафуют отклонения от целей MV, заданные как вектор-строка или массив неотрицательных значений. Вес по умолчанию для всех манипулируемых переменных 0
.
Чтобы использовать те же веса на горизонте предсказания, задайте вектор-строку длины Nmv, где Nmv количество манипулируемых переменных.
Чтобы варьировать веса настройки по горизонту предсказания от времени k времени k + p -1, задайте массив с Nmv столбцами и до p строками. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит манипулированные переменные веса настройки для одного шага горизонта предсказания. Если вы задаете меньше p строк, веса в последней строке используются для остальных шагов горизонта предсказания.
Чтобы задать цели MV во время исполнения, создайте nlmpcmoveopt
Объектом и установите его MVTarget
свойство.
ManipulatedVariablesRate
- Манипулируемые веса настройки переменной скоростиМанипулируемые веса настройки переменной скорости, которые штрафуют большие изменения в движениях управления, заданные как вектор-строка или массив неотрицательных значений. Вес по умолчанию для всех манипулируемых переменных скоростей 0.1
.
Чтобы использовать те же веса на горизонте предсказания, задайте вектор-строку длины Nmv, где Nmv количество манипулируемых переменных.
Чтобы варьировать веса настройки по горизонту предсказания от времени k времени k + p -1, задайте массив с Nmv столбцами и до p строками. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит управляемые веса настройки переменной скорости для одного шага горизонта предсказания. Если вы задаете меньше p строк, веса в последней строке используются для остальных шагов горизонта предсказания.
OutputVariables
- Выходные переменные веса настройкиВыходы веса настройки переменных, которые штрафуют отклонение от выходных ссылок, заданные как вектор-строка или массив неотрицательных значений. Вес по умолчанию для всех выходных переменных 1
.
Чтобы использовать те же веса на горизонте предсказания, задайте вектор-строку Ny длины, где Ny количество переменных выходов.
Чтобы изменить веса настройки над горизонтом предсказания от времени k + 1 до времени k + p, задайте массив с Ny столбцами и до p строками. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит выходные переменные веса настройки для одного шага горизонта предсказания. Если вы задаете меньше p строк, веса в последней строке используются для остальных шагов горизонта предсказания.
ECR
- Шлак переменного веса настройки1e5
(по умолчанию) | положительная скалярная величинаПотеря веса настройки переменной, заданная как положительная скалярная величина.
Optimization
- Пользовательские оптимизационные функции и решательПользовательские оптимизационные функции и решатель, заданные как структура со следующими полями.
CustomCostFcn
- Функция пользовательских затрат[]
| строку | вектор символов | указатель на функциюФункция пользовательских затрат, заданная как одно из следующего:
Имя функции в текущей рабочей папке или на пути 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.
ReplaceStandardCost
- Флаг, указывающий, следует ли заменять функцию стандартных затратtrue
(по умолчанию) | false
Флаг, указывающий, следует ли заменить функцию стандартных затрат на пользовательскую функцию затрат, заданную как одно из следующего:
true
- Контроллер использует только пользовательскую стоимость в качестве целевой функции во время оптимизации. В этом случае Weights
свойство контроллера игнорируется.
false
- Контроллер использует сумму стандартной стоимости и пользовательских затрат в качестве целевой функции во время оптимизации.
Если вы не задаете пользовательскую функцию затрат, используя CustomCostFcn
, затем контроллер игнорирует RepalceStandardCost
.
Для получения дополнительной информации смотрите Задать функцию затрат для нелинейного MPC.
CustomEqConFcn
- Пользовательская функция ограничения равенства[]
(по умолчанию) | строку | вектор символов | указатель на функциюПользовательская функция ограничения равенства, заданная как одно из следующего:
Имя функции в текущей рабочей папке или на пути 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.
CustomIneqConFcn
- Пользовательская функция ограничения неравенства[]
(по умолчанию) | строку | вектор символов | указатель на функциюПользовательская функция ограничения неравенства, заданная как одно из следующего:
Имя функции в текущей рабочей папке или на пути 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.
CustomSolverFcn
- Пользовательский решатель нелинейного программирования[]
(по умолчанию) | строку | вектор символов | указатель на функциюПользовательская функция нелинейного решателя программирования, заданная как строка, вектор символов или указатель на функцию. Если у вас нет программного обеспечения Optimization Toolbox™, необходимо задать свой собственный пользовательский решатель нелинейного программирования. Вы можете задать свою пользовательскую функцию решателя одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Optimization.CustomSolverFcn = "myNLPSolver";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Optimization.CustomSolverFcn = @myNLPSolver;
Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.
SolverOptions
- Опции решателяfmincon
| []
Опции решателя, заданные как объект опций для fmincon
или []
.
Если у вас есть программное обеспечение Optimization Toolbox, SolverOptions
содержит объект опции для fmincon
решатель.
Если у вас нет Optimization Toolbox, SolverOptions
является []
.
Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.
RunAsLinearMPC
- Флаг, указывающий, моделировать ли его как линейный контроллер"off"
(по умолчанию) | "Adaptive"
| "TimeVarying"
Флаг, указывающий, моделировать ли его как линейный контроллер, задается как один из следующих:
"off"
- Моделируйте контроллер как нелинейный контроллер с нелинейной моделью предсказания.
"Adaptive"
- Для каждого контрольного интервала получают линейную модель из заданного нелинейного состояния и выходных функций в текущей рабочей точке и используют через горизонт предсказания. Чтобы определить, обеспечивает ли адаптивный контроллер MPC сопоставимую эффективность с нелинейным контроллером, используйте эту опцию. Дополнительные сведения об адаптивном MPC см. в разделе Адаптивный MPC.
"TimeVarying"
- Для каждого контрольного интервала получают p линейные модели из заданного нелинейного состояния и выходных функций в p рабочих точках, предсказанных из предыдущего интервала, по одной для каждого шага горизонта предсказания. Чтобы определить, обеспечивает ли линейный изменяющийся во времени контроллер MPC сопоставимую эффективность с нелинейным контроллером, используйте эту опцию. Для получения дополнительной информации о меняющемся во времени MPC, смотрите Изменяющийся во времени MPC.
Чтобы использовать либо "Adaptive"
или "TimeVarying"
опция, ваш контроллер не должен иметь пользовательских ограничений и никакой пользовательской функции затрат.
Для примера, который имитирует нелинейный контроллер MPC как линейный контроллер, см. Оптимизацию и управление подаваемым пакетным реактором с использованием нелинейного MPC.
UseSuboptimalSolution
- Флаг, указывающий, является ли неоптимальное решение приемлемымfalse
(по умолчанию) | true
Флаг, указывающий, является ли неоптимальное решение приемлемым, задается как логическое значение. Когда решатель нелинейного программирования достигает максимального количества итераций, не найдя решения (выходной флаг 0
), контроллер:
Замораживает значения СН, если UseSuboptimalSolution
является false
Применяет неоптимальное решение, найденное решателем после окончательной итерации, если UseSuboptimalSolution
является true
Чтобы задать максимальное количество итераций, используйте Optimization.SolverOptions.MaxIter
.
MVInterpolationOrder
- Линейный порядок интерполяции, используемый для перемещений блоков0
(по умолчанию) | 1
Порядок линейной интерполяции, используемый перемещениями блоков, задается как один из следующих:
0
- Используйте кусочно-постоянные манипулируемые интервалы переменных.
1
- Используйте кусочно-линейные манипулируемые интервалы переменных.
Если горизонт управления является скаляром, то контроллер игнорирует MVInterpolationOrder
.
Для получения дополнительной информации о манипулированных блокировках переменных смотрите Манипулированные блокировки переменных.
Jacobian
- Якобианы функций модели, и пользовательские функции затрат и ограниченийЯкобианы функций модели, и пользовательские функции затрат и ограничений, заданные как структура. Лучшую практику использовать якобиан всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.
The Jacobian
структура содержит следующие поля.
StateFcn
- якобиан государственной функции[]
(по умолчанию) | строку | вектор символов | указатель на функциюЯкобиан функции z
от Model.StateFcn
, указанный как одно из следующего
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.StateFcn = "myStateJacobian";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateJacobian(x,u,params)
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
OutputFcn
- якобиан выходной функции[]
(по умолчанию) | строку | вектор символов | указатель на функциюЯкобиан выходной функции y
от Model.OutputFcn
, указанный как одно из следующего:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.StateFcn = "myOutputJacobian";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myOutputJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myOutputJacobian(x,u,params)
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
CustomCostFcn
- якобиан пользовательской функции затрат[]
| строку | вектор символов | указатель на функциюЯкобиан пользовательской функции затрат J
от Optimization.CustomCostFcn
, указанный как одно из следующего:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Jacobian.CustomCostFcn = "myCostJacobian";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Jacobian.CustomCostFcn = @myCostJacobian;
Анонимная функция
Jacobian.CustomCostFcn = @(X,U,e,data,params) myCostJacobian(X,U,e,data,params)
Ваша стоимость якобианской функции должна иметь подпись:
function [G,Gmv,Ge] = myCostJacobian(X,U,e,data,params)
Для получения дополнительной информации смотрите Задать функцию затрат для нелинейного MPC.
CustomEqConFcn
- Якобиан пользовательских ограничений равенства[]
(по умолчанию) | строку | вектор символов | указатель на функциюЯкобиан пользовательских ограничений равенства 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.
CustomIneqConFcn
- якобиан пользовательских ограничений неравенства[]
(по умолчанию) | строку | вектор символов | указатель на функциюЯкобиан пользовательских ограничений неравенства 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 для передачи параметров модели в блок Nonlinear MPC Controller |
Создайте нелинейный контроллер 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
Создайте нелинейный контроллер 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
секунд. Во время каждого контрольного интервала:
Исправьте предыдущее предсказание с помощью измерения тока.
Вычисление оптимального управления перемещается с помощью nlmpcmove
. Эта функция возвращает вычисленные оптимальные последовательности в nloptions
. Передача обновленного объекта опции в nlmpcmove
в следующем контрольном интервале обеспечивают начальные догадки для оптимальных последовательностей.
Спрогнозируйте состояния модели.
Примените первое вычисленное оптимальное перемещение управления к объекту, обновляя состояния объекта.
Сгенерируйте данные датчика с белым шумом.
Сохраните состояния объекта.
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')
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.