# Disciplined Convex Programming: как автоматизировать инженерную оптимизацию

Источник: https://www.youtube.com/watch?v=WXedHBeW8go
Канал: Stanford Online
Опубликовано: 03.07.2025

---

## Disciplined Convex Programming: как автоматизировать оптимизацию инженерных задач 🚀
[[JUMP:02:46]]

В лекции курса Стэнфордского университета, посвященной дисциплинированному выпуклому программированию (Disciplined Convex Programming, DCP), приглашенный эксперт Арек объясняет, как современные программные инструменты позволяют автоматизировать решение сложных задач оптимизации. Ключевая идея DCP заключается в том, чтобы свести задачу к стандартизированному виду, который гарантированно решается с высокой эффективностью, позволяя инженерам фокусироваться на постановке задачи, а не на поиске метода решения.

## 🧠 Основы выпуклой оптимизации
[[JUMP:01:10]]

Выпуклая оптимизация является фундаментом для надежного инженерного проектирования. По словам Арека, преимущество выпуклых программ заключается в двух фундаментальных свойствах:

*   **Глобальный оптимум:** любой локальный минимум в выпуклой задаче является глобальным, поэтому «дно чаши» всегда дает верный ответ.
*   **Сильная двойственность:** при соблюдении мягких допущений значения прямой (primal) и двойственной (dual) задач совпадают, что позволяет использовать сертификаты оптимальности для проверки корректности результата.

Благодаря этим свойствам такие методы незаменимы в задачах управления или финансах, где требуется решение в реальном времени (например, 100 Гц) и гарантия того, что найденное значение — лучшее.

## 🛠 Методология DCP и правила построения
[[JUMP:08:22]]

Disciplined Convex Programming — это подкласс выпуклых программ, которые могут быть автоматически проверены, приведены к каноническому виду и решены. Чтобы задача считалась DCP-совместимой, она должна соответствовать двум типам правил: правилам знаков для выражений без произведений и правилам композиции.

### Правила знаков для выражений без произведений
[[JUMP:08:52]]

Эти правила ограничивают использование переменных в математических выражениях:

1.  Нельзя перемножать разные функции, так как даже произведение двух аффинных функций (например, $x_1 \cdot x_2$) делает задачу невыпуклой.
2.  Выражение является выпуклым, если:
    *   Функция выпукла, а коэффициент перед ней неотрицателен.
    *   Функция вогнута, а коэффициент перед ней неположителен.
    *   Функция является аффинной.

Сумма выпуклых функций всегда дает выпуклую функцию, что позволяет строить сложные системы из простых «атомов».

### Правила композиции
[[JUMP:11:43]]

Композиция функций $f(g(x))$ сохраняет выпуклость, если соблюдаются условия монотонности. Например, композиция выпуклой функции $f$ и выпуклой функции $g$ будет выпуклой, если $f$ является невозрастающей (уточнение: здесь обсуждались правила монотонности). Арек подчеркивает: если текущий набор правил DCP не может доказать выпуклость (как в случае с $\sqrt{\exp(x)}$), это не означает, что задача невыпукла — просто необходимо либо переформулировать её, либо доказать выпуклость иными способами.

## ⚙️ Как работают решатели (solvers)
[[JUMP:20:39]]

Процесс решения DCP-задачи состоит из трех этапов:

1.  **Автоматическая верификация:** решатель строит дерево выражений, используя библиотеку «атомов» (базовых функций, таких как $\exp$, $\log$, нормы), и рекурсивно проверяет соблюдение правил.
2.  **Канонизация:** приведение выражения к partitioned canonical form. Это достигается за счет линеаризации (введение новых переменных для сложных функций и ограничений) и графического расширения (замена выпуклой функции минимизацией над её эпиграфом).
3.  **Решение:** использование методов внутренних точек (interior point methods). Эти методы преобразуют ограничения в барьерную функцию в целевой задаче, что позволяет эффективно применять метод Ньютона. Благодаря разреженной структуре канонической формы, инверсия барьерной функции происходит очень быстро.