Оптимальное управление: идея LQR
Когда вместо ручного подбора K используют оптимальный критерий: идея LQR.
LQR (Linear-Quadratic Regulator) — метод, который вычисляет оптимальную обратную связь по состоянию, минимизируя баланс между ошибкой и затратами на управление.
Проблема ручного выбора полюсов
Размещение полюсов мощно, но где именно ставить полюса для сложной системы — неочевидно. Поставишь слишком быстро — привод перегрузится; слишком медленно — система вялая. Хочется, чтобы компьютер сам нашёл компромисс. Именно это делает LQR — оптимальное управление, одна из жемчужин современной теории.
Идея: штрафуем ошибку и усилие
LQR формулирует управление как задачу минимизации. Мы задаём функционал стоимости (cost): штраф за отклонение состояния от нуля плюс штраф за величину воздействия. В виде суммы по времени: J = Σ (x·Q·x + u·R·u). Матрица Q говорит, насколько важно держать каждое состояние близко к цели; R — насколько дорого «жать на газ». LQR находит обратную связь u = -K·x, которая минимизирует этот баланс. Хотим точнее — увеличиваем Q; хотим экономнее расходовать привод — увеличиваем R.
| Крутим | Эффект |
| больше Q | агрессивнее держим состояние у цели (быстрее, но дороже по усилию) |
| больше R | экономим привод (плавнее, мягче, но медленнее) |
Как работает под капотом: эффект штрафов на качество
Точный расчёт K для LQR требует решения уравнения Риккати (вне stdlib). Но мы можем показать смысл штрафов: сравним два готовых K — «дорогое управление» (бережём привод, большое R) и «точное управление» (бережём состояние, большое Q) — на той же массе-пружине и посмотрим на компромисс «скорость против усилия».
def run(K, label):
m, kc, dt = 1.0, 4.0, 0.05
A = [[0.0,1.0],[-kc/m, 0.0]]; B=[0.0,1.0/m]
x = [1.0, 0.0]
effort, t_settle = 0.0, 0.0
for step in range(400):
u = -(K[0]*x[0] + K[1]*x[1])
effort += abs(u)*dt
dx0 = x[1]; dx1 = A[1][0]*x[0] + B[1]*u
x[0]+=dx0*dt; x[1]+=dx1*dt
if abs(x[0]) > 0.02 or abs(x[1]) > 0.02:
t_settle = (step+1)*dt
print(f"{label}: t_settle={t_settle:.2f}c, суммарное усилие={effort:.2f}")
run([2.0, 2.5], "мягкое (большое R, бережём привод)")
run([10.0, 6.0], "точное (большое Q, бережём состояние)")Вывод:
мягкое (большое R, бережём привод): t_settle=3.85c, суммарное усилие=2.95 точное (большое Q, бережём состояние): t_settle=1.85c, суммарное усилие=3.68
Видно компромисс, который и оптимизирует LQR: «точная» настройка успокаивает систему быстрее, но тратит больше усилия привода; «мягкая» экономит привод ценой скорости. LQR автоматически находит оптимальную точку между этими крайностями для заданных Q и R. В реальных проектах K считают библиотеки (python-control, MATLAB), а инженер лишь крутит Q и R — это куда удобнее, чем подбирать полюса вручную.
Где применяют LQR
LQR — рабочий инструмент в аэрокосмосе и робототехнике: стабилизация ракет и спутников, балансировка перевёрнутого маятника и шагающих роботов, управление квадрокоптерами. Везде, где много связанных состояний и важен баланс точность/расход, LQR даёт системный способ получить хорошую обратную связь. Его расширение с учётом шума — это связка LQR + фильтр Калмана (LQG), о котором — в следующем разделе.
От LQR к LQG и MPC
LQR — это вершина линейно-квадратичной теории, но у неё есть продолжения. Если состояние известно неточно (есть шум измерения), LQR соединяют с фильтром Калмана, получая LQG (Linear-Quadratic-Gaussian) — оптимальное управление при неполной и зашумлённой информации, рабочую лошадку аэрокосмоса. Если на воздействие и состояние наложены жёсткие ограничения (привод не сильнее X, угол не больше Y), на сцену выходит MPC (Model Predictive Control): на каждом шаге решается задача оптимизации на горизонт вперёд с учётом всех ограничений, применяется первый шаг, и всё повторяется. MPC сегодня управляет нефтехимией, автопилотами и даже посадкой ракет. LQR — это фундамент, на котором стоят эти продвинутые методы, поэтому понять его идею «штрафуем ошибку и усилие» так важно.
Частые ошибки
- Считать LQR «волшебной кнопкой». Качество зависит от выбора Q и R; их всё равно подбирают под задачу.
- Забыть про насыщение. LQR не знает о пределах привода; при агрессивном Q расчётное усилие может быть нереализуемым.
- Применять LQR без знания состояния. Как и любая обратная связь по состоянию, LQR требует полного вектора x (или наблюдателя).
Итоги
- LQR вычисляет оптимальную обратную связь u=-Kx, минимизируя баланс ошибки и усилия.
- Матрица Q штрафует отклонение состояния, R — расход управления; крутят их под задачу.
- LQR удобнее ручного размещения полюсов и широко применяется в аэрокосмосе и робототехнике.