Инструменты и применения
В реальной работе алгоритмы из курса обычно не пишут с нуля — используют зрелые солверы; важно знать, какой под какую задачу.
Солвер — готовая библиотека, реализующая методы оптимизации (часто промышленного качества), которой задают задачу в стандартной форме.
Зачем учить методы, если есть солверы
Мы реализовали градиентный спуск, симплекс, отжиг вручную — чтобы понимать, что происходит внутри. В продакшене же берут отлаженные солверы: они быстрее, надёжнее, обрабатывают вырожденные случаи. Но без понимания методов вы не сможете ни выбрать правильный солвер, ни диагностировать, почему он не сходится, ни правильно поставить задачу. Знание = осознанное использование инструментов.
Карта солверов
| Библиотека | Для чего | Класс задач |
scipy.optimize | Общая численная оптимизация | Гладкие, BFGS/Ньютон, без/с ограничениями, корни |
cvxpy | Выпуклая оптимизация декларативно | LP, QP, SOCP, SDP — формулируешь, солвер сам решает |
PuLP | Линейное и целочисленное программирование | LP / MILP, простой синтаксис |
Google OR-Tools | Комбинаторика и расписания | Маршруты, упаковка, расписания, CP-SAT |
Как это выглядит (для чтения)
Эти примеры используют сторонние библиотеки, поэтому в браузере не запускаются — они помечены как текст и приведены для знакомства с синтаксисом.
# scipy: безусловная минимизация методом BFGS
from scipy.optimize import minimize
res = minimize(lambda v: (v[0]-3)**2 + (v[1]+1)**2, x0=[0, 0], method="BFGS")
print(res.x) # ~ [3, -1]
# cvxpy: выпуклая задача задаётся почти как на бумаге
import cvxpy as cp
x = cp.Variable(2)
prob = cp.Problem(cp.Maximize(30*x[0] + 20*x[1]),
[4*x[0] + 2*x[1] <= 40, 2*x[0] + 3*x[1] <= 42, x >= 0])
prob.solve() # находит (6, 8), прибыль 340Заметьте: в cvxpy мы не пишем симплекс — лишь декларируем задачу, а солвер выбирает метод. Но узнаёте задачу? Это наш цех из раздела про LP.
Где оптимизация работает в реальном мире
| Область | Что оптимизируют | Типичный класс |
| Машинное обучение | Веса модели (минимум ошибки) | Невыпуклая, SGD/Adam |
| Финансы | Портфель (доход против риска) | Выпуклая QP, многокритериальная |
| Логистика | Маршруты доставки | Комбинаторная, OR-Tools |
| Производство | План выпуска при ресурсах | LP / MILP |
| Энергетика | Загрузка электростанций | MILP, большие масштабы |
| Инженерия | Форма крыла, конструкции | Невыпуклая с ограничениями |
Маленький практический итог исполнимо
Соберём «шпаргалку выбора» как данные и распечатаем — финальный взгляд на курс.
guide = [
("гладкая выпуклая, малое n", "Ньютон / BFGS (scipy)"),
("выпуклая с ограничениями", "cvxpy / внутренняя точка"),
("линейная / целочисленная", "симплекс, PuLP, OR-Tools"),
("невыпуклая, большое n", "SGD / Adam"),
("комбинаторная (маршруты)", "OR-Tools / метаэвристики"),
("чёрный ящик без градиента", "отжиг / ГА / Нелдер-Мид"),
]
for task, tool in guide:
print(f"{task:28s}-> {tool}")Вывод:
гладкая выпуклая, малое n -> Ньютон / BFGS (scipy) выпуклая с ограничениями -> cvxpy / внутренняя точка линейная / целочисленная -> симплекс, PuLP, OR-Tools невыпуклая, большое n -> SGD / Adam комбинаторная (маршруты) -> OR-Tools / метаэвристики чёрный ящик без градиента -> отжиг / ГА / Нелдер-Мид
Как работает под капотом
Промышленные солверы (Gurobi, CPLEX для MILP; IPOPT для нелинейного; OSQP для QP) реализуют те же идеи, что мы прошли, но с десятилетиями инженерной полировки: численная устойчивость, предобработка (presolve), параллелизм, эвристики отсечения. Ваше преимущество как понимающего инженера — правильно сформулировать задачу (выпукло, хорошо обусловленно, в подходящем классе) и распознать, когда солвер врёт о сходимости. Формулировка важнее выбора солвера: выпуклая постановка решается за секунды, невыпуклая той же задачи — за часы и без гарантий.
Частые ошибки
- Писать алгоритм с нуля в продакшене. Зрелый солвер почти всегда быстрее и надёжнее; ручная реализация — для учёбы.
- Брать общий солвер для специальной задачи. LP лучше решит симплекс/cvxpy, а не общий нелинейный минимизатор.
- Не проверять статус сходимости. Солвер может вернуть «решение», не достигнув оптимума — всегда читайте флаг успеха.
Итоги
- В продакшене используют солверы: scipy (общая), cvxpy (выпуклая), PuLP (LP/MILP), OR-Tools (комбинаторика).
- Знание методов нужно, чтобы выбрать солвер, поставить задачу и диагностировать проблемы.
- Оптимизация — двигатель ML, финансов, логистики, производства; правильная формулировка важнее выбора солвера.