Введение

Алгоритмы решения задач выпуклой оптимизации

Методы внутренних точек (также известные как барьерные методы или IPM) — это алгоритмы для решения линейных и нелинейных задач выпуклой оптимизации. Методы IPM сочетают в себе два преимущества ранее известных алгоритмов:

Теоретически, их время работы полиномиально — в отличие от симплекс-метода, который в худшем случае имеет экспоненциальное время работы. Практически, они работают так же быстро, как и симплекс-метод — в отличие от метода эллипсоидов, который теоретически имеет полиномиальное время работы, но на практике работает очень медленно. В отличие от симплекс-метода, который проходит по границе допустимой области, и метода эллипсоидов, который ограничивает допустимую область снаружи, IPM достигает оптимального решения, двигаясь внутри допустимой области — отсюда и название.

История

Метод внутренней точки был открыт советским математиком И. И. Дикиным в 1967 году. Метод был заново изобретен в США в середине 1980-х годов. В 1984 году Нарендра Кармаркар разработал метод линейного программирования, названный алгоритмом Кармаркара, который работает за доказуемо полиномиальное время (операции с L-битными числами, где n – число переменных и констант) и также очень эффективен на практике. Работа Кармаркара вызвала всплеск интереса к методам внутренней точки. Два года спустя Джеймс Ренегар изобрел первый метод внутренней точки, следующий по пути, с временем выполнения. Позднее метод был расширен с линейных задач оптимизации на выпуклые, основываясь на самосогласующей барьерной функции, используемой для кодирования выпуклых множеств. Любая задача выпуклой оптимизации может быть преобразована в минимизацию (или максимизацию) линейной функции над выпуклым множеством путем приведения к форме эпиграфа. Идея кодирования допустимого множества с помощью барьера и разработки барьерных методов была изучена Энтони В. Фиакко, Гартом П. Маккормиком и другими в начале 1960-х годов. Эти идеи в основном разрабатывались для общего нелинейного программирования, но впоследствии были заброшены из-за появления более конкурентоспособных методов для этого класса задач (например, последовательного квадратичного программирования). Юрий Нестеров и Аркадий Немировский предложили специальный класс таких барьеров, которые могут быть использованы для кодирования любого выпуклого множества. Они гарантируют, что число итераций алгоритма ограничено полиномом от размерности и точности решения.

Определения

Нам дается выпуклая программа вида: где f — выпуклая функция, а G — выпуклое множество. Без потери общности можно предположить, что целевая функция f является линейной. Обычно выпуклое множество G представлено набором выпуклых неравенств и линейных равенств; линейные равенства можно исключить с помощью линейной алгебры, поэтому для простоты мы предполагаем, что есть только выпуклые неравенства, и программа может быть описана следующим образом, где gi — выпуклые функции: Мы предполагаем, что функции ограничений принадлежат некоторому семейству (например, квадратичным функциям), так что программа может быть представлена конечным вектором коэффициентов (например, коэффициентами квадратичных функций). Размерность этого вектора коэффициентов называется размером программы. Численный решатель для данного семейства программ — это алгоритм, который, получив вектор коэффициентов, генерирует последовательность приближенных решений xt для t = 1, 2, …, используя конечное число арифметических операций. Численный решатель называется сходящимся, если для любой программы из семейства и любого положительного ε > 0 существует некоторое T (которое может зависеть от программы и от ε), такое что для любого t > T приближенное решение xt является ε-приближенным, то есть: f(xt) − f* ≤ ε, gi(xt) ≤ ε для i = 1, …, m, xt ∈ G, где f* — оптимальное решение. Решатель называется полиномиальным, если общее число арифметических операций в первых T шагах не превышает poly(размер задачи) * log(V/ε), где V — некоторая зависящая от данных константа, например, разность между наибольшим и наименьшим значением в допустимом множестве. Другими словами, V/ε — это «относительная точность» решения — точность относительно наибольшего коэффициента. log(V/ε) представляет собой число «цифр точности». Следовательно, решатель является «полиномиальным», если каждая дополнительная цифра точности требует числа операций, полиномиального по размеру задачи.

Типы выпуклых программ, разрешимых с помощью методов внутренней точки

Вот некоторые специальные случаи выпуклых задач, которые могут быть эффективно решены методами внутренней точки.

Полуопределенные программы

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