Оптимальный расчет перемещений управления с поддержкой генерации кода
[ вычисляет оптимальные перемещения управления MPC и поддерживает генерацию кода для развертывания в целях реального времени. Структуры входных данных, созданные с использованием mv,newStateData] = mpcmoveCodeGeneration(configData,stateData,onlineData)getCodeGenerationData, определите контроллер MPC для моделирования.
mpcmoveCodeGeneration не проверяет входные аргументы на правильность измерений и типов данных.
[___, возвращает дополнительную информацию о результате оптимизации, включая количество итераций и стоимость целевой функции.info] = mpcmoveCodeGeneration(___)
В этом примере используются:
Создайте правильную модель завода.
plant = rss(3,1,1); plant.D = 0;
Укажите время выборки контроллера.
Ts = 0.1;
Создайте контроллер MPC.
mpcObj = mpc(plant,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10. -->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2. -->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
Создание структур данных генерации кода.
[configData,stateData,onlineData] = getCodeGenerationData(mpcObj);
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Установите нулевое состояние установки в соответствии с состояниями по умолчанию, используемыми контроллером MPC.
Выполните моделирование с замкнутым контуром. На каждом контрольном интервале обновите оперативную структуру данных и вызовите mpcmoveCodeGeneration для вычисления оптимальных перемещений управления.
x = zeros(size(plant.B,1),1); % Initialize plant states to zero (|mpcObj| default). Tsim = 20; for i = 1:round(Tsim/Ts)+1 % Update plant output. y = plant.C*x; % Update measured output in online data. onlineData.signals.ym = y; % Update reference signal in online data. onlineData.signals.ref = 1; % Compute control actions. [u,statedata] = mpcmoveCodeGeneration(configData,stateData,onlineData); % Update plant state. x = plant.A*x + plant.B*u; end
Создание функции MEX с помощью MATLAB ® Coder™ с указаниемconfigData как константа.
func = 'mpcmoveCodeGeneration'; funcOutput = 'mpcmoveMEX'; Cfg = coder.config('mex'); Cfg.DynamicMemoryAllocation = 'off'; codegen('-config',Cfg,func,'-o',funcOutput,'-args',... {coder.Constant(configData),stateData,onlineData});
Code generation successful.
configData - Параметры конфигурации ПДКПараметры конфигурации MPC, которые являются постоянными во время выполнения, задаются как структура, генерируемая с помощью getCodeGenerationData.
Примечание
При использовании codegen (Кодер MATLAB), configData должно быть определено как coder.Constant (Кодер MATLAB).
stateData - Состояние контроллераСостояние контроллера во время выполнения, указанное как структура. Создание структуры начального состояния с помощью getCodeGenerationData. Для последующих интервалов управления используйте обновленное состояние контроллера из предыдущего интервала. В общем, используйте newStateData непосредственно структура.
Если оценка пользовательского состояния включена, необходимо вручную обновить stateData структура в течение каждого контрольного интервала. Дополнительные сведения см. в разделе Оценка пользовательского состояния.
stateData имеет следующие поля:
Plant - Оценки состояния модели установкиMPCobj номинальные состояния растений (по умолчанию) | вектор столбца длиной nxpОценки состояния модели растения, определенные как вектор столбца длиной Nxp, где Nxp - количество состояний модели растения.
Примечание
Если оценка пользовательского состояния включена, обновить Plant на каждом контрольном интервале. В противном случае не изменяйте это поле. Вместо этого используйте значения, возвращенные либо getCodeGenerationData или mpcmoveCodeGeneration.
Disturbance - Оценки состояния модели неизмеренного возмущения[] (по умолчанию) | вектор столбцаОценки состояния модели неизмеренного возмущения, определенные как вектор столбца длины Nxd, где Nxd - количество состояний модели неизмеренного возмущения. Disturbance содержит состояния входной модели возмущения, за которыми следуют состояния выходной модели возмущения.
Для просмотра моделей входных и выходных возмущений используйте getindist и getoutdist соответственно.
Примечание
Если оценка пользовательского состояния включена, обновить Disturbance на каждом контрольном интервале. В противном случае не изменяйте это поле. Вместо этого используйте значения, возвращенные либо getCodeGenerationData или mpcmoveCodeGeneration.
Noise - Оценки состояния модели шума выходного измерения[] (по умолчанию) | вектор столбцаОценки состояния модели шума выходного измерения, заданные как вектор столбца длины Nxn, где Nxn - количество состояний модели шума.
Примечание
Если оценка пользовательского состояния включена, обновить Noise на каждом контрольном интервале. В противном случае не изменяйте это поле. Вместо этого используйте значения, возвращенные либо getCodeGenerationData или mpcmoveCodeGeneration.
LastMove - Управление управляемыми переменными перемещается из предыдущего интервала управленияMPCobj номинальные значения среднего напряжения (по умолчанию) | вектор столбцаУправление управляемыми переменными перемещается из предыдущего интервала управления, заданного как вектор столбца длиной Nmv, где Nmv - количество управляемых переменных.
Примечание
Не изменять значение LastMove. Всегда использовать значения, возвращаемые любым из них getCodeGenerationData или mpcmoveCodeGeneration.
Covariance - Ковариационная матрица для оценок состояния контроллераКовариационная матрица для оценок состояния контроллера, заданная как симметричная матрица N-на-N, где N - число расширенных состояний контроллера; то есть сумма Nxp, Nxd и Nxn.
Если контроллер использует пользовательскую оценку состояния, Covariance пуст.
Примечание
Не изменять значение Covariance. Всегда использовать значения, возвращаемые любым из них getCodeGenerationData или mpcmoveCodeGeneration.
iA - активные ограничения неравенства;Активные ограничения неравенства, где равная часть неравенства true, заданный как логический вектор длины М. Если iA(i) является true, то i-е неравенство активно для последнего решения решателя QP.
Примечание
Не изменять значение iA. Всегда использовать значения, возвращаемые любым из них getCodeGenerationData или mpcmoveCodeGeneration.
onlineData - Интерактивные данные контроллераДанные оперативного контроллера, которые необходимо обновить во время выполнения, указанные как структура со следующими полями. Создание начальной структуры с помощью getCodeGenerationData.
signals - Обновленные входные и выходные сигналыОбновленные входные и выходные сигналы, указанные как структура со следующими полями:
ym - Измеренные выходыИзмеренные выходы, определенные как вектор длины Nym, где Nym - количество измеренных выходов.
По умолчанию getCodeGenerationData наборы ym к номинальным измеренным выходным значениям от контроллера.
ref - Выходные ссылкиВыходные ссылки, указанные как одна из следующих:
Вектор строки длиной Ny, где Ny - количество выходов.
Если используется предварительный просмотр опорного сигнала с неявным или адаптивным MPC, укажите массив p-by-Ny, где p - горизонт прогнозирования.
По умолчаниюgetCodeGenerationData наборы ref к номинальным выходным значениям контроллера.
md - Измеренные возмущенияИзмеренные возмущения, указанные как:
Вектор строки длиной Nmd, где Nmd - количество измеренных возмущений.
Если используется предварительный просмотр сигнала с неявным или адаптивным MPC, укажите массив p-by-Nmd.
По умолчанию, если контроллер измерил нарушения,getCodeGenerationData наборы md к номинальным измеренным значениям возмущений от контроллера. В противном случае это поле пусто и игнорируется mpcmoveCodeGeneration.
mvTarget - Цели для управляемых переменных[] (по умолчанию) | векторЦели для управляемых переменных, которые заменяют цели, определенные в configData.uTarget, указано как одно из следующих:
Вектор длины Nmv, где Nmv - количество манипулируемых переменных
[] для использования целей по умолчанию, определенных в configData.uTarget
Это поле игнорируется при использовании явного контроллера MPC.
externalMV - управляемые переменные, применяемые к заводу извне;[] (по умолчанию) | векторУправляемые переменные, внешне применяемые к установке, указанные как:
Вектор длины Nmv.
[] для применения оптимальных контрольных перемещений к установке.
weights - Обновленные веса оптимизации QPОбновлены веса оптимизации QP, указанные как структура. Если вы не ожидаете изменения веса настройки во время выполнения, игнорируйте weights. Это поле игнорируется при использовании явного контроллера MPC.
Эта структура содержит следующие поля:
y - Веса настройки выходных переменных[] (по умолчанию) | вектор строки | массивВеса настройки выходных переменных, которые заменяют исходные веса выходных данных контроллера во время выполнения во время выполнения, заданные как вектор строки или массив неотрицательных значений.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Ny, где Ny - количество выходных переменных.
Чтобы изменить веса настройки по горизонту прогнозирования от времени k + 1 до времени k + p, укажите массив со столбцами Ny и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит веса настройки выходной переменной для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
Если y пуст, []используются веса по умолчанию, определенные в исходном контроллере MPC.
u - Манипулируемые веса переменной настройки[] (по умолчанию) | вектор строки | массивМанипулированные веса настройки переменных, которые заменяют исходный контроллер, манипулируют весами переменных во время выполнения, заданными как вектор строки или массив неотрицательных значений.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Nmv, где Nmv - количество манипулируемых переменных.
Чтобы изменять веса настройки по горизонту прогнозирования от времени k до времени k + p-1, укажите массив со столбцами Nmv и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит управляемые веса настройки переменной для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
Если u пуст, []используются веса по умолчанию, определенные в исходном контроллере MPC.
du - Манипулируемые веса настройки переменной скорости[] (по умолчанию) | вектор строки | массивМанипулируемые веса настройки переменной скорости, которые заменяют исходный контроллер, манипулируют весами переменной скорости во время выполнения, заданными как вектор строки или массив неотрицательных значений.
Чтобы использовать одни и те же веса по горизонту прогнозирования, укажите вектор строки длиной Nmv, где Nmv - количество манипулируемых переменных.
Чтобы изменять веса настройки по горизонту прогнозирования от времени k до времени k + p-1, укажите массив со столбцами Nmv и до строк p. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит манипулированные веса настройки переменной скорости для одного шага горизонта прогнозирования. Если указано меньше p строк, веса в последней строке используются для оставшихся шагов горизонта прогнозирования.
Если du пуст, []используются веса по умолчанию, определенные в исходном контроллере MPC.
ecr - Вес переменной слабости, используемой для смягчения ограничения[] (по умолчанию) | неотрицательный скалярВес переменной ослабления, используемой для смягчения ограничения, задается как неотрицательный скаляр.
Если ecr пуст, []используется вес по умолчанию, определенный в исходном контроллере MPC.
limits - Обновленные ограничения ввода и выводаОбновленные ограничения ввода и вывода, заданные как структура. Если во время выполнения не ожидается изменения ограничений, проигнорируйте limits. Это поле игнорируется при использовании явного контроллера MPC.
Эта структура содержит следующие поля:
ymin - Выходные переменные нижние границы[] (по умолчанию) | вектор столбцаВыходные переменные нижние границы, заданные как вектор столбца длиной Ny. ymin(i) заменяет OutputVariables(i).Min ограничение от исходного контроллера. Если OutputVariables(i).Min свойство контроллера задается как вектор, ymin(i) заменяет первую конечную запись в этом векторе, а остальные значения сдвигаются, чтобы сохранить тот же профиль ограничения.
Если ymin пуст, []используются границы по умолчанию, определенные в исходном контроллере MPC.
ymax - Выходные переменные верхние границы[] (по умолчанию) | вектор столбцаВыходные переменные верхние границы, заданные как вектор столбца длиной Ny. ymax(i) заменяет OutputVariables(i).Max ограничение от исходного контроллера. Если OutputVariables(i).Max свойство контроллера задается как вектор, ymax(i) заменяет первую конечную запись в этом векторе, а остальные значения сдвигаются, чтобы сохранить тот же профиль ограничения.
Если ymax пуст, []используются границы по умолчанию, определенные в исходном контроллере MPC.
umin - Манипулируемые переменные нижние границы[] (по умолчанию) | вектор столбцаМанипулируемые переменные нижние границы, заданные как вектор столбца длиной Nmv. umin(i) заменяет ManipulatedVariables(i).Min ограничение от исходного контроллера. Если ManipulatedVariables(i).Min свойство контроллера задается как вектор, umin(i) заменяет первую конечную запись в этом векторе, а остальные значения сдвигаются, чтобы сохранить тот же профиль ограничения.
Если umin пуст, []используются границы по умолчанию, определенные в исходном контроллере MPC.
umax - Манипулируемые переменные верхние границы[] (по умолчанию) | вектор столбцаМанипулируемые переменные верхние границы, заданные как вектор столбца длиной Nmv. umax(i) заменяет ManipulatedVariables(i).Max ограничение от исходного контроллера. Если ManipulatedVariables(i).Max свойство контроллера задается как вектор, umax(i) заменяет первую конечную запись в этом векторе, а остальные значения сдвигаются, чтобы сохранить тот же профиль ограничения.
Если umax пуст, [], используются границы по умолчанию, определенные в исходном контроллере MPC.
customconstraints - Обновлены настраиваемые смешанные ограничения ввода/выводаОбновлены настраиваемые смешанные ограничения ввода/вывода, указанные как структура. Это поле игнорируется при использовании явного контроллера MPC.
Эта структура имеет следующие поля:
E - константа регулируемой зависимости[] (по умолчанию) | Массив Nc-by-NmvКонстанта изменяемой зависимости, заданная как массив Nc-by-Nmv, где Nc - количество зависимостей, а Nmv - количество обрабатываемых переменных.
Если E пуст, []используется соответствующее ограничение, определенное в исходном контроллере MPC.
F - Константа регулируемого выходного ограничения[] (по умолчанию) | Массив Nc-by-NyКонстанта ограничения управляемого выхода, заданная как массив Nc-by-Ny, где Ny - количество контролируемых выходов (измеренных и неизмеренных).
G - Константа смешанного ограничения ввода/вывода[] (по умолчанию) | вектор столбца длиной NcКонстанта смешанного ограничения ввода/вывода, заданная как вектор столбца длиной Nc.
S - Измеренная константа ограничения возмущения[] (по умолчанию) | Массив Nc-by-NvИзмеренная константа ограничения возмущения, заданная как массив Nc-by-Nmd, где Nmd - количество измеренных возмущений.
horizons - Обновленные горизонты контроллераОбновлены горизонты контроллера, указанные как структура. Для изменения горизонтов во время выполнения сначала создайте структуры данных с помощью getCodeGenerationData установка UseVariableHorizon пара имя-значение к true. При изменении горизонтов необходимо указать как горизонт прогнозирования, так и управляющий горизонт. Дополнительные сведения см. в разделе Корректировка горизонтов во время выполнения.
Это поле игнорируется при использовании явного контроллера MPC.
Эта структура имеет следующие поля:
p - Горизонт прогнозирования[] (по умолчанию) | положительное целое числоm - Горизонт управления[] (по умолчанию) | положительное целое | вектор положительных целых чиселГоризонт управления, заменяющий значение configData.m во время выполнения, указанное как одно из следующих:
Положительное целое число, m, между 1 и p, включительно, где p - горизонт прогнозирования (horizons.p). В этом случае контроллер вычисляет m свободных перемещений управления, происходящих в моменты времени от k до k + m-1, и удерживает выходную константу контроллера для оставшихся шагов горизонта прогнозирования от k + m до k + p-1. Здесь k - текущий интервал управления. Для оптимального планирования траектории установите m равным p.
Вектор положительных целых чисел, [m1, m2,...], где сумма целых чисел равна горизонту предсказания, р. В этом случае контроллер вычисляет M блоков свободных перемещений, где M - длина вектора управляющего горизонта. Первое свободное перемещение применяется к временам k-k + m1-1, второе свободное перемещение применяется от времени k + m1-k + m1 + m2-1 и так далее. Использование блокировочных перемещений может повысить надежность контроллера по сравнению со случаем по умолчанию.
model - Обновленные заводские и номинальные значенияОбновленные заводские и номинальные значения для адаптивных ПДК и изменяющихся во времени ПДК, указанные как структура. model доступен только при указании isAdaptive или isLTV как true при создании структур данных генерации кода.
Эта структура содержит следующие поля:
A - Матрица состояния модели дискретно-временного состояния-космической установкиМатрица состояний модели дискретно-временного состояния-космической установки, заданная как:
Массив Nx-by-Nx при использовании адаптивного MPC,
Массив Nx-by-Nx-by- (p + 1) при использовании изменяющегося во времени MPC,
где Nx - число состояний растений.
B - Матрица «вход в состояние» модели дискретно-временной установки «состояние-пространство»Матрица «вход в состояние» модели дискретно-временной установки «состояние-пространство», заданная как:
Массив Nx-by-Nu при использовании адаптивного MPC,
Массив Nx-by-Nu-by- (p + 1) при использовании изменяющегося во времени MPC,
где Nu - количество вводов установки.
C - Матрица «состояние-выход» модели дискретно-временной установки «состояние-пространство»Матрица «состояние-выход» модели дискретно-временной установки «состояние-пространство», заданная как:
Массив Ny-by-Nx при использовании адаптивного MPC.
Массив Ny-by-Nx-by- (p + 1) при использовании изменяющегося во времени MPC.
D - Матрица прохождения модели дискретно-временного состояния-космической установкиМатрица прохождения модели дискретно-временного состояния-пространства установки, заданная как:
Массив Ny-by-Nu при использовании адаптивного MPC.
Массив Ny-by-Nu-by- (p + 1) при использовании изменяющегося во времени MPC.
Поскольку контроллеры ПДК не поддерживают установки с прямым проходом, указать D как массив нулей.
X - Номинальные состояния установкиНоминальные состояния установки, указанные как:
Вектор столбца длиной Nx при использовании адаптивного MPC.
Массив Nx-by-1-by- (p + 1) при использовании изменяющегося во времени MPC.
U - Номинальные заводские вводыНоминальные заводские вводы, указанные как:
Вектор столбца длиной Nu при использовании адаптивного MPC.
Массив Nu-by-1-by- (p + 1) при использовании изменяющегося во времени MPC.
Y - Номинальные выходы установкиНоминальные выходы установки, указанные как:
Вектор столбца длиной Nywhen с использованием адаптивного MPC.
Массив Ny-by-1-by- (p + 1) при использовании изменяющегося во времени MPC.
DX - Номинальные производные состояния растенийНоминальные производные состояния растений, указанные как:
Вектор столбца длиной Nx при использовании адаптивного MPC.
Массив Nx-by-1-by- (p + 1) при использовании изменяющегося во времени MPC.
mv - Оптимальные манипулируемые перемещения переменныхОптимальная управляемая переменная перемещается, возвращаемая в виде вектора столбца длиной Nmv, где Nmv - количество обрабатываемых переменных.
Если контроллер обнаруживает невыполнимую задачу оптимизации или сталкивается с численными трудностями в решении плохо обусловленной задачи оптимизации, mv остается на своем последнем успешном решении, xc.LastMove.
В противном случае, если задача оптимизации выполнима и решатель достигает указанного максимального числа итераций без нахождения оптимального решения, mv:
Остается на своем последнем успешном решении, если Optimizer.UseSuboptimalSolution свойство контроллера: false.
Достигнуто ли неоптимальное решение после окончательной итерации, если Optimizer.UseSuboptimalSolution свойство контроллера: true. Дополнительные сведения см. в разделе Неоптимальное решение QP.
newStateData - Обновлено состояние контроллераОбновлено состояние контроллера, возвращено в виде структуры. Для последующих контрольных интервалов пройти newStateData кому mpcmoveCodeGeneration как stateData.
Если оценка пользовательского состояния включена, используйте newStateData для обновления структуры состояния вручную до следующего интервала управления. Дополнительные сведения см. в разделе Оценка пользовательского состояния.
info - Информация по оптимизации контроллераИнформация об оптимизации контроллера, возвращенная в виде структуры.
При использовании неявного или адаптивного MPC info содержит следующие поля:
| Область | Описание |
|---|---|
Iterations | Количество итераций решателя QP |
QPCode | Код состояния решателя QP |
Cost | Стоимость целевой функции |
Uopt | Оптимальная регулируемая переменная |
Yopt | Оптимальная прогнозируемая последовательность выходных переменных |
Xopt | Оптимальная прогнозируемая последовательность переменных состояния |
Topt | Интервалы временного горизонта |
Slack | Переменная провисания, используемая при смягчении ограничения |
Если configData.OnlyComputeCost является true, оптимальная информация о последовательности, Uopt, Yopt, Xopt, Topt, и Slack, недоступно:
Дополнительные сведения см. в разделе mpcmove и mpcmoveAdaptive.
Если используется явный MPC, info содержит следующие поля:
| Область | Описание |
|---|---|
Region | Регион, в котором найдено оптимальное решение |
ExitCode | Код состояния решения |
Дополнительные сведения см. в разделе mpcmoveExplicit.
Примечания и ограничения по использованию:
Можно создать код как для неявных, так и для явных контроллеров MPC.
Для формирования кода для вычисления оптимальных перемещений управления MPC:
Создание структур данных из контроллера MPC или явного контроллера MPC с помощью getCodeGenerationData.
Чтобы убедиться, что ваш контроллер дает ожидаемые результаты замкнутого цикла, смоделируйте его с помощью mpcmoveCodeGeneration вместо mpcmove.
Создать код для mpcmoveCodeGeneration использование codegen (Кодер MATLAB). Для выполнения этого шага требуется программное обеспечение MATLAB ® Coder™.
getCodeGenerationData | mpcmove | mpcmoveAdaptive | mpcmoveExplicit | codegen (кодер MATLAB)
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.