Нелинейный прогнозирующий контроллер модели
Нелинейный прогнозирующий контроллер модели вычисляет оптимальное управление, преодолевает горизонт предсказания с помощью нелинейной модели предсказания, нелинейной функции стоимости и нелинейных ограничений. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.
создает nlobj
= nlmpc(nx
,ny
,nu
)nlmpc
возразите, чья модель предсказания имеет nx
состояния, ny
выходные параметры и nu
входные параметры, где все входные параметры являются переменными, которыми управляют. Используйте этот синтаксис, если ваша модель не имеет никаких измеренных или неизмеренных входных параметров воздействия.
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
— Шаг расчета модели Prediction
(значение по умолчанию) | положительный конечный скалярШаг расчета модели Prediction в виде положительного конечного скаляра. Диспетчер использует модель дискретного времени с шагом расчета Ts
для предсказания. Если вы задаете модель предсказания непрерывного времени (Model.IsContinuousTime
true
), затем контроллер дискретизирует модель с помощью встроенного неявного метода трапеций с шагом расчета Ts
.
PredictionHorizon
— Горизонт предсказания
(значение по умолчанию) | положительное целое числоГоризонт предсказания продвигается в виде положительного целого числа. Продукт PredictionHorizon
и Ts
время предсказания, то есть, как далеко контроллер изучает будущее.
ControlHorizon
— Управляйте горизонтом
(значение по умолчанию) | положительное целое число | вектор из положительных целых чиселУправляйте горизонтом в виде одного из следующего:
Положительное целое число, m, между 1
и p, включительно, где p равен PredictionHorizon
. В этом случае контроллер вычисляет m свободные перемещения управления, происходящие во времена k через k +m–1, и содержит контроллер выход, постоянный для остающихся шагов горизонта предсказания от k +m через k +p–1. Здесь, k является текущим контрольным интервалом.
Вектор из положительных целых чисел [m 1, m 2, …], задавая длины блокирующихся интервалов. По умолчанию контроллер вычисляет блоки M свободных перемещений, где M является количеством блокирующихся интервалов. Первое свободное перемещение применяется ко временам k через k +m1–1, второе свободное перемещение применяется со времени k +m1 через k +m1+m2–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
— Модель Prediction размерная информацияЭто свойство доступно только для чтения.
Размерная информация модели Prediction, указанная, когда вы создаете контроллер и сохраненный как структура следующими полями.
NumberOfStates
— Количество состоянийКоличество состояний в модели предсказания в виде положительного целого числа. Это значение соответствует nx
.
NumberOfOutputs
— Количество выходных параметровКоличество выходных параметров в модели предсказания в виде положительного целого числа. Это значение соответствует ny
.
NumberOfInputs
— Количество входных параметровКоличество входных параметров в модели предсказания в виде положительного целого числа. Это значение соответствует любому nu
или сумма длин mvIndex
, mdIndex
, и udIndex
.
MVIndex
— Переменные индексы, которыми управляют,Переменные индексы, которыми управляют, для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует mvIndex
.
MDIndex
— Измеренные индексы воздействияИзмеренные индексы воздействия для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует mdIndex
.
UDIndex
— Неизмеренные индексы воздействияНеизмеренные индексы воздействия для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует udIndex
.
Model
— Модель PredictionМодель Prediction в виде структуры со следующими полями.
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
— Количество дополнительных параметров модели
(значение по умолчанию) | неотрицательное целое числоКоличество дополнительных параметров модели, используемых моделью предсказания, пользовательской функцией стоимости и пользовательским ограничением, функционирует в виде неотрицательного целого числа. Количество параметров включает все параметры, используемые этими функциями. Например, если функция состояния использует только параметр p1
, ограничительные функции используют только параметр p2
, и функция стоимости использует только параметр p3
, затем NumberOfParameters
3
.
States
— Информация состояния, границы и масштабные коэффициентыИнформация состояния, границы и масштабные коэффициенты в виде массива структур с элементами Nx, где Nx является количеством состояний. Каждый элемент структуры имеет следующие поля.
Min
— Нижняя граница состояния-Inf
(значение по умолчанию) | скаляр | векторНижняя граница состояния в виде скаляра или вектора. По умолчанию этой нижней границей является -Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы состояния всегда являются трудными ограничениями.
Max
— Верхняя граница состоянияInf
(значение по умолчанию) | скаляр | векторВерхняя граница состояния в виде скаляра или вектора. По умолчанию этой верхней границей является +Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы состояния всегда являются трудными ограничениями.
Name
— Имя состоянияИмя состояния в виде строки или вектора символов. Именем состояния по умолчанию является "x#"
, где #
его индекс состояния.
Units
— Модули состояния""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули состояния в виде строки или вектора символов.
ScaleFactor
— Масштабный коэффициент состояния
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент состояния в виде положительного конечного скаляра. В общем случае используйте рабочий диапазон состояния. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
OutputVariables
— Информация о выходной переменной, границы и масштабные коэффициентыИнформация о выходной переменной (OV), границы и масштабные коэффициенты в виде массива структур с элементами Ny, где Ny является количеством выходных переменных. Чтобы получить доступ к этому свойству, можно использовать псевдоним OV
вместо OutputVariables
.
Каждый элемент структуры имеет следующие поля.
Min
— Нижняя граница OV-Inf
(значение по умолчанию) | скаляр | векторНижняя граница OV в виде скаляра или вектора. По умолчанию этой нижней границей является -Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Max
— Верхняя граница OVInf
(значение по умолчанию) | скаляр | векторВерхняя граница OV в виде скаляра или вектора. По умолчанию этой верхней границей является +Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
MinECR
— Мягкость нижней границы OV
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость нижней границы OV, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного конечного скаляра или вектора. По умолчанию верхние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значение ECR по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта предсказания.
MaxECR
— Мягкость верхней границы OV
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость верхней границы OV, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного конечного скаляра или вектора. По умолчанию нижние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значение ECR по горизонту предсказания со времени k +1 ко времени k +p, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта предсказания.
Name
— Имя OVOV называют в виде строки или вектора символов. Именем OV по умолчанию является "y#"
, где #
его выходной индекс.
Units
— Модули OV""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули OV в виде строки или вектора символов.
ScaleFactor
— Масштабный коэффициент OV
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент OV в виде положительного конечного скаляра. В общем случае используйте рабочий диапазон выходной переменной. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
ManipulatedVariables
— Переменная информация, которой управляют, границы и масштабные коэффициентыИнформация о Переменной, которой управляют, (MV), границы и масштабные коэффициенты в виде массива структур с элементами Nmv, где Nmv является количеством переменных, которыми управляют. Чтобы получить доступ к этому свойству, можно использовать псевдоним MV
вместо ManipulatedVariables
.
Каждый элемент структуры имеет следующие поля.
Min
— Нижняя граница мВ-Inf
(значение по умолчанию) | скаляр | векторНижняя граница мВ в виде скаляра или вектора. По умолчанию этой нижней границей является -Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Max
— Верхняя граница мВInf
(значение по умолчанию) | скаляр | векторВерхняя граница мВ в виде скаляра или вектора. По умолчанию этой верхней границей является +Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
MinECR
— Мягкость нижней границы мВ
(значение по умолчанию) | неотрицательный скаляр | векторМягкость нижней границы мВ, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного скаляра или вектора. По умолчанию нижние границы мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значение ECR по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта предсказания.
MaxECR
— Верхняя граница мВ
(значение по умолчанию) | неотрицательный скаляр | векторМягкость верхней границы мВ, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного скаляра или вектора. По умолчанию верхние границы мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значение ECR по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта предсказания.
RateMin
— Нижняя граница скорости изменения мВ-Inf
(значение по умолчанию) | неположительный скаляр | векторНижняя граница скорости изменения мВ в виде неположительного скаляра или вектора. Скорость изменения мВ задана как MV (k) - MV (k –1), где k является текущим временем. По умолчанию этой нижней границей является -Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
RateMax
— Верхняя граница скорости изменения мВInf
(значение по умолчанию) | неотрицательный скаляр | векторВерхняя граница скорости изменения мВ в виде неотрицательного скаляра или вектора. Скорость изменения мВ задана как MV (k) - MV (k –1), где k является текущим временем. По умолчанию этой верхней границей является +Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
RateMinECR
— Мягкость нижней границы скорости изменения мВ
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость нижней границы скорости изменения мВ, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного конечного скаляра или вектора. По умолчанию нижние границы скорости изменения мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значения ECR по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговые значения ECR используются для остающихся шагов горизонта предсказания.
RateMaxECR
— Мягкость верхней границы скорости изменения мВ
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость верхней границы скорости изменения мВ, где большее значение ECR указывает на более мягкое ограничение в виде неотрицательного конечного скаляра или вектора. По умолчанию верхние границы скорости изменения мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться значения ECR по горизонту предсказания со времени k ко времени k +p–1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, итоговые значения ECR используются для остающихся шагов горизонта предсказания.
Name
— Имя мВИмя мВ в виде строки или вектора символов. Именем мВ по умолчанию является "u#"
, где #
его входной индекс.
Units
— Модули мВ""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули мВ в виде строки или вектора символов.
ScaleFactor
— Масштабный коэффициент мВ
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент мВ в виде положительного конечного скаляра. В общем случае используйте рабочий диапазон переменной, которой управляют. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
MeasuredDisturbances
— Измеренная информация о воздействии и масштабные коэффициентыИнформация об измеренном воздействии (MD) и масштабные коэффициенты в виде массива структур с элементами Nmd, где Nmd является количеством измеренных воздействий. Если ваша модель не имеет измеренных воздействий, то MeasuredDisturbances
[]
. Чтобы получить доступ к этому свойству, можно использовать псевдоним MD
вместо MeasuredDisturbances
.
Каждый элемент структуры имеет следующие поля.
Name
— Имя MDИмя MD в виде строки или вектора символов. Именем MD по умолчанию является "u#"
, где #
его входной индекс.
Units
— Модули MD""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули MD в виде строки или вектора символов.
ScaleFactor
— Масштабный коэффициент MD
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент MD в виде положительного конечного скаляра. В общем случае используйте рабочий диапазон воздействия. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
Weights
— Стандартные настраивающие веса функции стоимостиСтандартные настраивающие веса функции стоимости в виде структуры. Контроллер применяет эти веса к масштабированным переменным. Поэтому настраивающиеся веса являются безразмерными значениями.
Примечание
Если вы задаете пользовательскую функцию стоимости с помощью Optimization.CustomCostFcn
и набор Optimization.ReplaceStandardCost
к true
, затем контроллер игнорирует стандартные настраивающие веса функции стоимости в Weights
.
Weights
имеет следующие поля.
ManipulatedVariables
— Переменные настраивающие веса, которыми управляют,Переменные настраивающие веса, которыми управляют, которые штрафуют отклонения от целей мВ в виде вектора-строки или массива неотрицательных значений. Весом по умолчанию для всех переменных, которыми управляют, является 0
.
Чтобы использовать те же веса через горизонт предсказания, задайте вектор-строку из длины Nmv, где Nmv является количеством переменных, которыми управляют.
Чтобы варьироваться настраивающиеся веса по горизонту предсказания со времени k ко времени k +p-1, задайте массив со столбцами Nmv и до строк p. Здесь, k является текущим временем, и p является горизонтом предсказания. Каждая строка содержит переменные настраивающие веса, которыми управляют, для одного шага горизонта предсказания. Если вы задаете меньше, чем строки p, веса в итоговой строке используются для остающихся шагов горизонта предсказания.
Чтобы задать цели мВ во время выполнения, создайте 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
— Порядок линейной интерполяции используется для перемещений блока
(значение по умолчанию) | 1
Порядок линейной интерполяции, используемый перемещениями блока в виде одного из следующего:
0 — Используйте кусочные постоянные переменные интервалы, которыми управляют.
1 — Используйте кусочные линейные переменные интервалы, которыми управляют.
Если горизонт управления является скаляром, то контроллер игнорирует MVInterpolationOrder
.
Для получения дополнительной информации о переменном блокировании, которым управляют смотрите Переменное Блокирование, которым Управляют.
Jacobian
— Якобианы функций модели, и пользовательская стоимость и ограничительные функцииЯкобианы функций модели, и пользовательская стоимость и ограничение функционируют в виде структуры. Как лучшая практика, используйте Якобианы каждый раз, когда они доступны, поскольку они повышают эффективность оптимизации. Если вы не задаете якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить якобиан.
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 25-Aug-2021 18:44:28): --------------------------------------------- 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,Ts)
Optimal fuel consumption = 1.884953
Создайте нелинейный контроллер 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.