Нелинейный образцовый прогнозирующий контроллер
Нелинейный образцовый прогнозирующий контроллер вычисляет оптимальное управление, преодолевает горизонт прогноза с помощью нелинейной модели прогноза, нелинейной функции стоимости и нелинейных ограничений. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.
nlobj = nlmpc(nx,ny,nu)
nlobj = nlmpc(nx,ny,'MV',mvIndex,'MD',mdIndex)
nlobj = nlmpc(nx,ny,'MV',mvIndex,'UD',udIndex)
nlobj = nlmpc(nx,ny,'MV',mvIndex,'MD',mdIndex,'UD',udIndex)
создает объект nlobj
= nlmpc(nx
,ny
,nu
)nlmpc
, модель прогноза которого имеет состояния nx
, ny
выходные параметры и входные параметры nu
, где все входные параметры являются переменными, которыми управляют. Используйте этот синтаксис, если ваша модель не имеет никаких измеренных или неизмеренных входных параметров воздействия.
nx
— Количество состояний модели прогнозаКоличество состояний модели прогноза, заданных как положительное целое число. Вы не можете изменить количество состояний после создания объекта контроллера.
ny
— Количество модели прогноза выходные параметрыКоличество модели прогноза выходные параметры, заданные как положительное целое число. Вы не можете изменить количество выходных параметров после создания объекта контроллера.
\nu
Количество входных параметров модели прогнозаКоличество входных параметров модели прогноза, которые являются всеми переменными, которыми управляют, заданными как положительное целое число. Вы не можете изменить количество переменных, которыми управляют, после создания объекта контроллера.
mvIndex
— ManipulatedПеременные индексы, которыми управляют, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение хранится в контроллере 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
— Prediction1
(значение по умолчанию) | положительный конечный скалярШаг расчета модели Prediction, заданный как положительный конечный скаляр. Диспетчер использует модель дискретного времени с шагом расчета 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 +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
— Количество состоянийКоличество входных параметров в модели прогноза, заданной как положительное целое число. Это значение соответствует или nmv
или сумме длин mvIndex
, mdIndex
и udIndex
.
MVIndex
— ManipulatedПеременные индексы, которыми управляют, для модели прогноза, заданной как вектор положительных целых чисел. Это значение соответствует 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
.
ложь
Модель прогноза дискретного времени. В этом случае Ts
является шагом расчета модели.
IsContinuousTime
должен быть сопоставим с функциями, заданными в Model.StateFcn
и Model.OutputFcn
.
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, связанный финал используется для остающихся шагов горизонта прогноза.
Границы состояния всегда являются трудными ограничениями.
Имя
Имя состоянияИмя состояния, заданное как строка или вектор символов. Именем состояния по умолчанию является "x#"
, где #
является своим индексом состояния.
Модули
Модули состояния""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули состояния, заданные как строка или вектор символов.
ScaleFactor
Масштабный коэффициент состояния1
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент состояния, заданный как положительный конечный скаляр. В целом используйте рабочий диапазон состояния. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
OutputVariables
— Информация о выходной переменной, границы и масштабные коэффициентыИнформация о выходной переменной (OV), границы и масштабные коэффициенты, заданные как массив структур с элементами Ny, где Ny является количеством выходных переменных. Чтобы получить доступ к этому свойству, можно использовать псевдоним OV
вместо OutputVariables
.
Каждый элемент структуры имеет следующие поля.
Min
Нижняя граница OV-Inf
(значение по умолчанию) | скаляр | векторНижняя граница OV, заданная как скаляр или вектор. По умолчанию эта нижняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k +1 ко времени k +p, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
Max
Верхняя граница OVInf
(значение по умолчанию) | скаляр | векторВерхняя граница OV, заданная как скаляр или вектор. По умолчанию эта верхняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k +1 ко времени k +p, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
MinECR
— Мягкость нижней границы OV1
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость нижней границы OV, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный конечный скаляр или вектор. По умолчанию верхние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значение ECR по горизонту прогноза со времени k +1 ко времени k +p, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта прогноза.
MaxECR
— Мягкость верхней границы OV1
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость верхней границы OV, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный конечный скаляр или вектор. По умолчанию нижние границы OV являются мягкими ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значение ECR по горизонту прогноза со времени k +1 ко времени k +p, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта прогноза.
Имя
Имя OVИмя OV, заданное как строка или вектор символов. Именем OV по умолчанию является "y#"
, где #
является своим выходным индексом.
Модули
Модули OV""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули OV, заданные как строка или вектор символов.
ScaleFactor
Масштабный коэффициент OV1
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент OV, заданный как положительный конечный скаляр. В целом используйте рабочий диапазон выходной переменной. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
ManipulatedVariables
— Manipulated, границы и масштабные коэффициентыИнформация о Переменной, которой управляют, (MV), границы и масштабные коэффициенты, заданные как массив структур с элементами Nmv, где Nmv является количеством переменных, которыми управляют. Чтобы получить доступ к этому свойству, можно использовать псевдоним MV
вместо ManipulatedVariables
.
Каждый элемент структуры имеет следующие поля.
Min
Нижняя граница мВ-Inf
(значение по умолчанию) | скаляр | векторНижняя граница мВ, заданная как скаляр или вектор. По умолчанию эта нижняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
Max
Верхняя граница мВInf
(значение по умолчанию) | скаляр | векторВерхняя граница мВ, заданная как скаляр или вектор. По умолчанию эта верхняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
MinECR
— Мягкость нижней границы мВ0
(значение по умолчанию) | неотрицательный скаляр | векторМягкость нижней границы мВ, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный скаляр или вектор. По умолчанию нижние границы мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значение ECR по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта прогноза.
MaxECR
— Верхняя граница мВ0
(значение по умолчанию) | неотрицательный скаляр | векторМягкость верхней границы мВ, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный скаляр или вектор. По умолчанию верхние границы мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значение ECR по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговое значение ECR используется для остающихся шагов горизонта прогноза.
RateMin
— Нижняя граница скорости изменения мВ-Inf
(значение по умолчанию) | неположительный скаляр | векторНижняя граница скорости изменения мВ, заданная как неположительный скаляр или вектор. Скорость изменения мВ задана как MV (k) - MV (k-1), где k является текущим временем. По умолчанию эта нижняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
RateMax
— Верхняя граница скорости изменения мВInf
(значение по умолчанию) | неотрицательный скаляр | векторВерхняя граница скорости изменения мВ, заданная как неотрицательный скаляр или вектор. Скорость изменения мВ задана как MV (k) - MV (k-1), где k является текущим временем. По умолчанию эта нижняя граница неограничена.
Чтобы использовать то же самое, связанное через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться связанное по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта прогноза.
RateMinECR
— Мягкость нижней границы скорости изменения мВ0
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость нижней границы скорости изменения мВ, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный конечный скаляр или вектор. По умолчанию нижние границы скорости изменения мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значения ECR по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговые значения ECR используются для остающихся шагов горизонта прогноза.
RateMaxECR
— Мягкость верхней границы скорости изменения мВ0
(значение по умолчанию) | неотрицательный конечный скаляр | векторМягкость верхней границы скорости изменения мВ, где большее значение ECR указывает на более мягкое ограничение, заданное как неотрицательный конечный скаляр или вектор. По умолчанию верхние границы скорости изменения мВ являются трудными ограничениями.
Чтобы использовать то же значение ECR через горизонт прогноза, задайте скалярное значение.
Чтобы отличаться значения ECR по горизонту прогноза со времени k ко времени k +p-1, задайте вектор до значений p. Здесь, k является текущим временем, и p является горизонтом прогноза. Если вы задаете меньше, чем значения p, итоговые значения ECR используются для остающихся шагов горизонта прогноза.
Имя
Имя мВИмя мВ, заданное как строка или вектор символов. Именем мВ по умолчанию является "u#"
, где #
является своим входным индексом.
Модули
Модули мВ""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули мВ, заданные как строка или вектор символов.
ScaleFactor
Масштабный коэффициент мВ1
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент мВ, заданный как положительный конечный скаляр. В целом используйте рабочий диапазон переменной, которой управляют. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
MeasuredDisturbances
— Измеренная информация о воздействии и масштабные коэффициентыИнформация об измеренном воздействии (MD) и масштабные коэффициенты, заданные как массив структур с элементами Nmd, где Nmd является количеством измеренных воздействий. Если ваша модель не имеет измеренных воздействий, то MeasuredDisturbances
является []
. Чтобы получить доступ к этому свойству, можно использовать псевдоним MD
вместо MeasuredDisturbances
.
Каждый элемент структуры имеет следующие поля.
Имя
Имя MDИмя MD, заданное как строка или вектор символов. Именем MD по умолчанию является "u#"
, где #
является своим входным индексом.
Модули
Модули MD""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули MD, заданные как строка или вектор символов.
ScaleFactor
Масштабный коэффициент MD1
(значение по умолчанию) | положительный конечный скалярМасштабный коэффициент MD, заданный как положительный конечный скаляр. В целом используйте рабочий диапазон воздействия. Определение соответствующего масштабного коэффициента может улучшить числовое создание условий для оптимизации.
Weights
— Стандартные настраивающие веса функции стоимостиСтандартные настраивающие веса функции стоимости, заданные как структура. Контроллер применяет эти веса к масштабированным переменным. Поэтому настраивающиеся веса являются безразмерными значениями.
Если вы задаете пользовательскую функцию стоимости с помощью Optimization.CustomCostFcn
и устанавливаете Optimization.ReplaceStandardCost
на true
, то контроллер игнорирует стандартные настраивающие веса функции стоимости в Weights
.
Weights
имеет следующие поля.
ManipulatedVariables
— ManipulatedПеременные настраивающие веса, которыми управляют, которые штрафуют отклонения от целей мВ, заданных как вектор - строка или массив неотрицательных значений. Весом по умолчанию для всех переменных, которыми управляют, является 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
— Slack1e5
(значение по умолчанию) | положительная скалярная величинаОслабьте переменный настраивающий вес, заданный как положительная скалярная величина.
Оптимизация
Пользовательские функции оптимизации и решательПользовательские функции оптимизации и решатель, заданный как структура со следующими полями.
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
контроллера проигнорировано.
ложь
Диспетчер использует сумму стандартной стоимости и пользовательской стоимости как целевая функция во время оптимизации.
Если вы не задаете пользовательскую функцию стоимости с помощью 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,data,params) myIneqConFunction(X,U,data,params);
Ваша ограничительная функция равенства должна иметь подпись:
function cineq = myIneqConFunction(X,U,data,params)
Для получения дополнительной информации смотрите, Задают Ограничения для Нелинейного MPC.
CustomSolverFcn
— Пользовательский решатель нелинейного программирования[]
(значение по умолчанию) | представляет в виде строки | вектор символов | указатель на функциюПользовательская функция решателя нелинейного программирования, заданная как строка, вектор символов или указатель на функцию. Если у вас нет программного обеспечения Optimization Toolbox™, необходимо задать собственный решатель нелинейного программирования. Можно задать пользовательскую функцию решателя одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданном как строка или вектор символов
Optimization.CustomSolverFcn = "myNLPSolver";
Обработайте к функции в текущей рабочей папке или на пути MATLAB
Optimization.CustomSolverFcn = @myNLPSolver;
Для получения дополнительной информации смотрите, Конфигурируют Решатель Оптимизации для Нелинейного MPC.
Опции решателя
Опции решателя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
— Якобианы образцовых функций, и пользовательская стоимость и ограничительные функцииЯкобианы образцовых функций, и пользовательская стоимость и ограничительные функции, заданные как структура. Это - лучшая практика использовать Якобианы каждый раз, когда они доступны, поскольку они повышают эффективность оптимизации. Если вы не задаете якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить якобиан.
Структура 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 для потенциальных проблем |
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 22-Feb-2019 01:45:42): --------------------------------------------- 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
. Во время каждого интервала управления:
Исправьте предыдущий прогноз с помощью текущего измерения.
Вычислите перемещения оптимального управления с помощью nlmpcmoveopt
. Эта функция возвращает вычисленные оптимальные последовательности в nloptions
. Передача обновленного объекта опций к nlmpcmoveopt
в следующем интервале управления обеспечивает исходные предположения для оптимальных последовательностей.
Предскажите образцовые состояния.
Примените первое вычисленное перемещение оптимального управления к объекту, обновив состояния объекта.
Сгенерируйте данные о датчике с белым шумом.
Сохраните состояния объекта.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.