Я обожаю задачи оптимизации и давно ими занимаюсь (с конца 2021 года), в т. ч. методами их решения и некоторыми численными методами линейной алгебры. В качестве полноценной практики я решил написать свою мини-библиотеку, способную решать достаточно общие варианты задач, которые часто встречаются. Это такие задачи, как например линейная задача наименьших квадратов, минимизация квадратичных форм с ограничениями равенствами и неравенствами, выпуклая негладкая оптимизация (в случае, когда возможно посчитать проксимальный оператор, например LASSO-регрессия), задачи линейного и полуопределённого программирования. Также присутствуют реализации метода Ньютона и метода золотого сечения для поиска корня или минимума функций одного переменного.
- Прямо-двойственные методы внутренней точки для задач линейного, квадратичного и полуопределённого программирования, основанные на схеме Predictor-Corrector Санджея Мехротры (Sanjay Mehrotra)
- Ускоренный градиентный спуск Нестерова с адаптивными рестартами и возможностью кастомизации (применение оператора проекции или проксимального оператора, выбор схемы подбора константы Липшица в зависимости от наличия выпуклости в задаче)
- Обыкновенный метод Ньютона для решения произвольной выпуклой задачи оптимизации с линейными ограничениями-равенствами и выбором шага по правилу Армихо
- Метод Нелдера-Мида для невыпуклой негладкой оптимизации с экономным вычислением значений функции
- Проекции на 7 наиболее часто встречающихся множеств:
- множество решений СЛАУ
$Ax=b$ - шары в
$1,2,\infty-$ нормах - "коробку"
$a \leq x \leq b$ - неотрицательный ортант
$\mathbb{R}^n_+ = \{x \in \mathbb{R}^n |\ x_i \geq 0\ \forall i=\overline{1,n}\}$ - симплекс
$S_n = \{x \in \mathbb{R}^n\ | \displaystyle \sum_{i=1}^{n} x_i = \alpha, x_i \geq 0\ \forall i=\overline{1,n},\ \alpha > 0 \}$
- множество решений СЛАУ
- Проксимальные операторы для
$\ell_1, \ell_2, \ell_\infty$ норм - Метод Ньютона для поиска корня функции одной переменной с эвристическим выбором шага или выбором по правилу Армихо (backtracking), метод золотого сечения для поиска минимума
- Некоторые вспомогательные функции, позволяющие автоматически решать задачи линейного и квадратичного программирования, задачу LASSO-регрессии, а также симметрическая векторизация симметричной матрицы (svec) и обратная её операция - восстановление симметрической матрицы по вектору (smat).
Точка Ферма-Торичелли (работа Suman Vaze)
Даны