Вычислите действие оптимального управления
mv = mpcmove(MPCobj,x,ym,r,v)
[mv,info] = mpcmove(MPCobj,x,ym,r,v)
[___] = mpcmove(___,options)
вычисляет оптимальные переменные перемещения, которыми управляют, u (k), в текущее время. u (k) вычисляется, учитывая текущее предполагаемое расширенное состояние, x (k), измеренный объект выходные параметры, ym (k), выходные ссылки, r (k) и измеренные воздействия, v (k), в текущее время k. Вызовите mv
= mpcmove(MPCobj
,x
,ym
,r
,v
)mpcmove
неоднократно симулировать прогнозирующее управление модели с обратной связью.
[
возвращает дополнительную информацию относительно прогнозирующего контроллера модели во втором выходном аргументе mv
,info
] = mpcmove(MPCobj
,x
,ym
,r
,v
)info
.
[___] = mpcmove(___,
ограничения значения по умолчанию переопределений и настройки весов в options
)MPCobj
со значениями, заданными Options
, mpcmoveopt
объект. Используйте Options
обеспечить корректировку во время выполнения ограничений и весов во время симуляции с обратной связью.
MPCobj
— Прогнозирующий контроллер моделиПрогнозирующий контроллер модели, заданный как контроллер MPC объект. Чтобы создать контроллер MPC, используйте mpc
.
x
— Текущее состояние контроллераmpcstate
объектТекущее состояние контроллера, заданное как mpcstate
объект.
Прежде чем вы начнете симуляцию с mpcmove
, инициализируйте состояние контроллера использование x = mpcstate(MPCobj)
. Затем измените свойства по умолчанию x
как соответствующий. mpcmove
изменяет значение x
отразить текущее состояние контроллера.
Если вы используете оценку состояния по умолчанию, mpcmove
ожидает x
представлять x[n|n-1]
. mpcmove
команда обновляет значения состояния в предыдущем интервале управления с той информацией. Поэтому вы не должны программно обновлять x
вообще. Средство оценки состояния по умолчанию использует установившийся Фильтр Калмана.
Если вы используете пользовательскую оценку состояния, mpcmove
ожидает x
представлять x[n|n]
. Поэтому до каждого mpcmove
команда, необходимо установить x.Plant
, x.Disturbance
, и x.Noise
к наилучшим оценкам этих состояний (использующий последние измерения) в текущем интервале управления.
ym
— Текущие измеренные выходные значенияТекущие измеренные выходные значения во время k, заданный как вектор-столбец длины Nym, где Nym является количеством измеренных выходных параметров.
Если вы используете пользовательскую оценку состояния, установите ym = []
.
r
— Объект выходные значения ссылкиВыходные значения ссылки объекта, заданные как p-by-Ny массив, где p является горизонтом прогноза MPCobj
и Ny является количеством выходных параметров. Строка r(i,:)
задает ссылочные значения на шаге i горизонта прогноза.
r
должен содержать по крайней мере одну строку. Если r
содержит меньше, чем строки p, mpcmove
копирует последнюю строку, чтобы заполнить p-by-Ny массив. Если вы предоставляете точно одну строку, поэтому, постоянная ссылка применяется к целому горизонту прогноза.
Реализовывать ссылочный предварительный просмотр, который может улучшить отслеживание, когда ссылка варьируется по предсказуемому способу, r
должен содержать ожидаемые изменения, идеально для шагов p.
v
— Текущие и ожидаемые измеренные воздействияТекущие и ожидаемые измеренные воздействия, заданные как (p +1)-by-Nmd массив, где p является горизонтом прогноза MPCobj
и Nmd является количеством измеренных воздействий. Первая строка v
задает текущие измеренные значения воздействия. Строка v(i+1,:)
задает ожидаемые значения воздействия на шаге i горизонта прогноза.
Моделирование измеренных воздействий обеспечивает действие управления feedforward. Если ваша модель объекта управления не включает измеренные воздействия, используйте v
= []
.
Если ваша модель включает измеренные воздействия, v
должен содержать по крайней мере одну строку. Если v
содержит меньше, чем p +1 строка, mpcmove
копирует последнюю строку, чтобы заполнить (p +1)-by-Nmd массив. Если вы предоставляете точно одну строку, постоянное измеренное воздействие запрашивает целый горизонт прогноза.
Реализовывать предварительный просмотр воздействия, который может улучшить отслеживание, когда воздействие варьируется по предсказуемому способу, v
должен содержать ожидаемые изменения, идеально для шагов p.
options
— Опции во время выполненияmpcmoveopt
объектОпции во время выполнения, заданные как mpcmoveopt
объект. Используйте options
заменять выбранные свойства MPCobj
в процессе моделирования. Эти опции применяются к текущему mpcmove
момент времени только. Используя options
дает к тому же результату как переопределяющий или изменяющий MPCobj
перед каждым вызовом mpcmove
, но включает значительно меньше служебное. Используя options
эквивалентно использованию блока MPC Controller Simulink® в сочетании с дополнительными входными сигналами, которые изменяют настройки контроллера, такие как мВ и ограничения OV.
mv
— Оптимальные переменные перемещения, которыми управляют,Оптимальные переменные перемещения, которыми управляют, возвращенные как вектор-столбец длины Nmv, где Nmv является количеством переменных, которыми управляют.
Если контроллер обнаруживает неосуществимую задачу оптимизации или сталкивается с числовыми трудностями при решении плохо обусловленной задачи оптимизации, mv
остается в его новом успешном решении, x.LastMove
.
В противном случае, если задача оптимизации выполнима, и решатель достигает заданного максимального количества итераций, не находя оптимальное решение, mv
:
Остается в его новом успешном решении если Optimizer.UseSuboptimalSolution
свойством контроллера является false
.
Субоптимальное решение, достигнутое после итоговой итерации если Optimizer.UseSuboptimalSolution
свойством контроллера является true
. Для получения дополнительной информации смотрите Субоптимальное Решение QP.
info
— Детали решенияДетали решения, возвращенные как структура со следующими полями.
Uopt
— Оптимальная переменная последовательность, которой управляют,Предсказанные оптимальные переменные корректировки, которыми управляют (перемещения), возвращенные как (p +1)-by-Nmv массив, где p является горизонтом прогноза и Nmv, являются количеством переменных, которыми управляют.
Uopt(i,:)
содержит расчетные оптимальные значения во время k+i-1
, для i = 1,...,p
, где k
текущее время. Первая строка Info.Uopt
содержит те же значения переменных, которыми управляют, как выходной аргумент mv
. Поскольку контроллер не вычисляет перемещения оптимального управления во время k+p
, Uopt(p+1,:)
равно Uopt(p,:)
.
Yopt
— Оптимальная последовательность выходной переменнойОптимальная последовательность выходной переменной, возвращенная как (p +1)-by-Ny массив, где p является горизонтом прогноза и Ny, является количеством выходных параметров.
Первая строка Info.Yopt
содержит расчетные выходные параметры во время k
на основе предполагаемых состояний и измеренных воздействий; это не измеренный выход во время k
. Yopt(i,:)
содержит предсказанные выходные значения во время k+i-1
, для i = 1,...,p+1
.
Yopt(i,:)
содержит расчетные выходные значения во время k+i-1
, для i = 2,...,p+1
, где k
текущее время. Yopt(1,:)
вычисляется на основе предполагаемых состояний и измеренных воздействий.
Xopt
— Оптимальная модель прогноза утверждает последовательностьОптимальная модель прогноза утверждает последовательность, возвращенную как (p +1)-by-Nx массив, где p является горизонтом прогноза, и Nx является количеством состояний на объекте, и неизмеренные возмущения (состояния из шумовых моделей не включены).
Xopt(i,:)
содержит расчетные значения состояния во время k+i-1
, для i = 2,...,p+1
, где k
текущее время. Xopt(1,:)
эквивалентен текущие состояния утверждают значения.
Topt
— Временные интервалыВременные интервалы, возвращенные как вектор-столбец длины p +1. Topt(1)
= 0, представляя текущее время. Последующие временные шаги Topt(i)
даны Ts*(i-1)
, где Ts = MPCobj.Ts
шаг расчета контроллера.
Используйте Topt
при графическом выводе Uopt
, Xopt
, или Yopt
последовательности.
Slack
— Слабая переменнаяОслабьте переменную, ε, используемый в ограничительном смягчении, возвращенном как 0
или значение положительной скалярной величины.
ε = 0 — Всем ограничениям удовлетворили для целого горизонта прогноза.
ε> 0 — По крайней мере одно мягкое ограничение нарушено. Когда больше чем одно ограничение нарушено, ε представляет худший случай мягкое ограничительное нарушение (масштабируемый вашими значениями ECR для каждого ограничения).
Смотрите Задачу оптимизации для получения дополнительной информации.
Iterations
— Количество итераций решателя0
| -1
| -2
Количество итераций решателя, возвращенных как одно из следующего:
Положительное целое число — Количество итераций должно было решить задачу оптимизации, которая определяет оптимальные последовательности.
0 — Задача оптимизации не могла быть решена в заданном максимальном количестве итераций.
–1 — Задача оптимизации была неосуществима. Задача оптимизации неосуществима, если никакое решение не может удовлетворить всем трудным ограничениям.
–2 — Числовая ошибка произошла при решении задачи оптимизации.
QPCode
— Состояние решения для оптимизации'feasible'
| 'infeasible'
| 'unrealiable'
Состояние решения для оптимизации, возвращенное как одно из следующего:
'feasible'
— Оптимальное решение было получено (Iterations
> 0)
'infeasible'
— Решатель обнаружил проблему без выполнимого решения (Iterations
= –1), или числовая ошибка произошла (Iterations
= –2)
'unreliable'
— Решателю не удалось сходиться (Iterations
= 0). В этом случае, если MPCobj.Optimizer.UseSuboptimalSolution
false
U
замораживания в новом успешном решении. В противном случае это использует субоптимальное решение, найденное во время последней итерации решателя.
Cost
— Целевая функция стоитсяСтоимость целевой функции, возвращенная как неотрицательное скалярное значение. Стоимость определяет количество степени, до которой контроллер достиг ее целей. Для получения дополнительной информации смотрите Задачу оптимизации.
Величина затрат только значима когда QPCode = 'feasible'
, или когда QPCode = 'feasible'
и MPCobj.Optimizer.UseSuboptimalSolution
true
.
Выполните симуляцию с обратной связью объекта с одним мВ, и один измерил OV.
Задайте модель объекта управления и создайте прогнозирующий контроллер модели с ограничениями мВ.
ts = 2; Plant = ss(0.8,0.5,0.25,0,ts); MPCobj = mpc(Plant);
-->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.
MPCobj.MV(1).Min = -2; MPCobj.MV(1).Max = 2;
Инициализируйте mpcstate
объект для симуляции. Используйте свойства состояния по умолчанию.
x = mpcstate(MPCobj);
-->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.
Установите ссылочный сигнал. Нет никакого измеренного воздействия.
r = 1;
Симулируйте ответ с обратной связью путем вызова mpcmove
итеративно.
t = [0:ts:40]; N = length(t); y = zeros(N,1); u = zeros(N,1); for i = 1:N % simulated plant and predictive model are identical y(i) = 0.25*x.Plant; u(i) = mpcmove(MPCobj,x,y(i),r); end
y
и u
сохраните значения мВ и OV.
Анализируйте результат.
[ts,us] = stairs(t,u); plot(ts,us,'r-',t,y,'b--') legend('MV','OV')
Измените верхнюю границу мВ как доходы симуляции с помощью mpcmoveopt
объект.
MPCopt = mpcmoveopt; MPCopt.MVMin = -2; MPCopt.MVMax = 2;
Симулируйте ответ с обратной связью и введите изменение верхнего предела в реальном времени в восемь секунд (пятый шаг итерации).
x = mpcstate(MPCobj); y = zeros(N,1); u = zeros(N,1); for i = 1:N % simulated plant and predictive model are identical y(i) = 0.25*x.Plant; if i == 5 MPCopt.MVMax = 1; end u(i) = mpcmove(MPCobj,x,y(i),r,[],MPCopt); end
Анализируйте результат.
[ts,us] = stairs(t,u); plot(ts,us,'r-',t,y,'b--') legend('MV','OV')
Задайте модель объекта управления.
ts = 2; Plant = ss(0.8,0.5,0.25,0,ts);
Создайте прогнозирующий контроллер модели с ограничениями и на переменную, которой управляют, и на скорость изменения переменной, которой управляют. Горизонтом прогноза является 10
интервалы и горизонт управления блокируются.
MPCobj = mpc(Plant,ts,10,[2 3 5]);
-->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.
MPCobj.MV(1).Min = -2; MPCobj.MV(1).Max = 2; MPCobj.MV(1).RateMin = -1; MPCobj.MV(1).RateMax = 1;
Инициализируйте mpcstate
объект для симуляции от конкретного состояния.
x = mpcstate(MPCobj);
-->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.
x.Plant = 2.8; x.LastMove = 0.85;
Вычислите оптимальное управление в текущее время.
y = 0.25*x.Plant; r = 1; [u,Info] = mpcmove(MPCobj,x,y,r);
Анализируйте предсказанные оптимальные последовательности.
[ts,us] = stairs(Info.Topt,Info.Uopt); plot(ts,us,'r-',Info.Topt,Info.Yopt,'b--') legend('MV','OV')
plot
игнорирует Info.Uopt(end)
когда это - NaN
.
Исследуйте оптимальную стоимость.
Info.Cost
ans = 0.0793
mpcmove
обновления x
.
Если ym
R
или v
задан как []
, mpcmove
использует соответствующий MPCobj.Model.Nominal
значение вместо этого.
Чтобы просмотреть предсказанное оптимальное поведение для целого горизонта прогноза, постройте соответствующие последовательности, обеспеченные в Info
.
Чтобы определить состояние оптимизации, проверяйте Info.Iterations
и Info.QPCode
.
Используйте sim
поскольку объект не сочетается и шумовая симуляция если не с помощью ограничений во время выполнения или изменений веса.
Используйте приложение MPC Designer, чтобы в интерактивном режиме спроектировать и симулировать прогнозирующие контроллеры модели.
Используйте блок MPC Controller в Simulink и для генерации кода.
Используйте mpcmoveCodeGeneration
для генерации кода.
getEstimator
| mpc
| mpcmoveopt
| mpcstate
| review
| setEstimator
| sim
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.