Skip to content

SENATOROVAI/Optimal_Control_Report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Optimal Control — Problem Set Solutions

Аналитические и численные решения набора задач по теории оптимального управления: линейно-квадратичный регулятор (LQR), вывод уравнения Риккати из принципа максимума Понтрягина, фильтр Калмана–Бьюси, двойственность LQR↔Kalman и частотный (сингулярный) анализ замкнутой системы. Все выкладки доведены до численного эксперимента на модели двойного интегратора.


📌 Задача

Рассматривается линейная стационарная (LTI) система с квадратичным функционалом качества

$$\dot{x} = Ax + Bu, \qquad J = x^\top(t_f)F,x(t_f) + \int_{0}^{t_f}\big(x^\top Q x + u^\top R u\big),dt.$$

На этой общей постановке решаются пять связанных задач:

Задача Что требуется
2 LQR со свободной начальной точкой Условие трансверсальности по свободной компоненте $x_1(0)$ и оптимальное значение
3 Вывод уравнения Риккати Получить матричное дифференциальное уравнение Риккати (DRE) из гамильтониана
4 LQR для двойного интегратора Численно решить DRE, найти оптимальный закон, траекторию и стоимость
5 Уравнение Риккати для фильтра Калмана Вывести фильтр Калмана–Бьюси и показать двойственность с LQR
6 Сингулярные значения замкнутой системы Связь $\sigma(\omega)$ с частотой и построение sigma-графика

Модель для расчётов — двойной интегратор (точечная масса под действием силы $u$):

$$A=\begin{bmatrix}0&1\0&0\end{bmatrix},\quad B=\begin{bmatrix}0\1\end{bmatrix},\quad Q=I,\quad R=1,\quad F=I,\quad t_f=5,\quad x_0=(1,0).$$


🧩 Решение

  • Принцип Понтрягина → гамильтонова система. Из гамильтониана выписываются канонические уравнения состояние–сопряжённая переменная, минимизация $H$ по $u$ даёт $u^* = -R^{-1}B^\top \lambda$.
  • Sweep-подстановка $\lambda = P(t)x$ приводит к матричному дифференциальному уравнению Риккати $\dot P = -(A^\top P + PA - PBR^{-1}B^\top P + Q)$, интегрируемому назад от $P(t_f)=F$.
  • Численное интегрирование DRE выполнено scipy.integrate.solve_ivp (с высокой точностью), стационарное решение проверено через solve_continuous_are.
  • Свободная начальная точка (задача 2): условие $\lambda_1(0)=0$ даёт замкнутую формулу оптимального выбора $x_1(0)^* = -P_{12}(0),x_2(0)/P_{11}(0)$.
  • Фильтр Калмана (задача 5) получен как точный дуал регулятора — основа принципа разделения в LQG.
  • Частотный анализ (задача 6): сингулярные значения передаточной матрицы $G(j\omega)=(j\omega I-(A+BK))^{-1}B$ строятся по сетке частот.

Ключевые численные результаты

P(0)      = [[1.7318, 0.9999], [0.9999, 1.7321]]
K_ss      = [1.0, 1.7321]
eig(A_cl) = -0.866 ± 0.5j      (устойчиво, ζ ≈ 0.866)
J_opt     = 1.7318
x1(0)*    = -0.5774   →  J_free = 1.1548   (против J = 1.7321 при x1(0)=0)
σ_max     = 1.0       (плато на низких частотах, 0 дБ)

✅ Выводы

  1. Конечный горизонт ≈ стационарный режим. Решение DRE быстро (за «пограничный слой» у $t_f$) выходит на постоянное решение алгебраического уравнения Риккати, поскольку $t_f=5$ велик по сравнению с постоянной времени замкнутого контура.
  2. Оптимальный регулятор устойчив: полюса $-0.866\pm0.5j$, коэффициент демпфирования $\zeta\approx0.866$ — состояние плавно приводится к нулю.
  3. Свобода начальной точки снижает стоимость: оптимальный выбор $x_1(0)^*=-0.577$ уменьшает функционал с $1.7321$ до $1.1548$, что подтверждает корректность условия трансверсальности.
  4. Двойственность LQR↔Kalman показана явно — управление и оценивание описываются одной и той же структурой уравнения Риккати.
  5. Частотная характеристика замкнутой системы имеет вид ФНЧ: низкочастотное плато $\sigma=1$ (0 дБ) и спад за полосой пропускания — многомерное обобщение характеристики Боде.

📂 Структура проекта

Optimal_Control_Report/
├── oc_solution.py                  # численное решение задач 2, 4, 6 и генерация графиков
├── Optimal_Control_Solutions.docx  # полный отчёт с выкладками (задачи 2–6 + приложение)
├── Optimal_Control_Solutions.pdf   # тот же отчёт в PDF
└── README.md

Скрипт oc_solution.py при запуске печатает численные результаты в консоль и сохраняет три рисунка:

  • fig_P.png — элементы матрицы Риккати $P(t)$;
  • fig_xu.png — оптимальная траектория $x(t)$ и управление $u^*(t)$;
  • fig_sigma.png — сингулярные значения $\sigma(\omega)$ замкнутой системы.

🛠 Технологический стек

  • Python 3 — язык реализации
  • NumPy — линейная алгебра, матричные операции
  • SciPysolve_ivp (интегрирование DRE и замкнутой системы), solve_continuous_are (алгебраическое уравнение Риккати)
  • Matplotlib — построение графиков
  • Отчёт подготовлен в форматах DOCX и PDF

🚀 Запуск

pip install numpy scipy matplotlib
python oc_solution.py

После выполнения в каталоге появятся рисунки fig_P.png, fig_xu.png, fig_sigma.png, а числовые результаты будут выведены в консоль.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages