Выпуклое программирование


Выпуклое программирование — это подобласть математической оптимизации, которая изучает задачу минимизации выпуклых функций на выпуклых множествах. В то время как многие классы задач выпуклого программирования допускают алгоритмы полиномиального времени[1], математическая оптимизация в общем случае NP-трудна[2][3][4].

Выпуклое программирование находит применение в целом ряде дисциплин, таких как автоматические системы управления, оценка и обработка сигналов, коммуникации и сети, схемотехника[5], анализ данных и моделирование, финансы, статистика (оптимальный план эксперимента[en])[6] и структурная оптимизация[en][7]. Развитие вычислительной техники и алгоритмов оптимизации сделало выпуклое программирование почти столь же простым как линейное программирование[8].

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

В частности, задачей выпуклого программирования является задача нахождения некоторого , на котором достигается