Оптимизация - это тот блок, который вам нужен для решения многих проблем. Оптимизация всегда преобладает везде, от управления сырьем на фабрике в 19 веке до решения, какой всадник назначить каким клиентам в компании, занимающейся разработкой цифровых технологий для пищевых продуктов.

Задачи квадратичной оптимизации относятся к особым типам, в которых целевая функция имеет квадратичную форму.

Здесь P, q, r, G, h, A и b - матрицы. h, b - одномерные векторы. Обычно мы пропускаем r (член постоянного смещения), поскольку это не меняет решения.

Мы возьмем пример и посмотрим, как мы можем использовать готовые решатели для решения задачи QP. Предположим, проблема такая:

x₁ ›0, x₂› 0 можно записать как -x₁ ‹0, -x₂‹ 0, чтобы привести его к стандартному виду. Здесь x будет [x₁ x₂]

Когда мы сравниваем приведенное выше уравнение со стандартной формой, мы получаем p1 = 3, p4 = 4 и так далее. Окончательные матрицы будут выглядеть как

(1/2) xᵀ P x + qᵀ x - выражение второй степени по x, что делает его квадратичным. Неравенства и ограничения равенства - все аффинны.

Обратите внимание, что в определении стандартной формы есть множитель (1/2). Библиотека CVXOPT, однако, не ожидает этого в своем решателе. Кроме того, переменные, ожидаемые cvxopt, должны быть с плавающей запятой, поэтому убедитесь, что 3 записывается как 3.0.

CVXOPT также имеет оболочку в Julia, но мне пока не удалось ее успешно запустить.