Полуопределённое программирование

Материал из testwiki
Перейти к навигации Перейти к поиску

Полуопределённое программирование (или SDP от Шаблон:Lang-en) — подраздел выпуклого программирования, которое занимается оптимизацией линейной целевой функции (целевая функция — это заданная пользователем функция, значение которой пользователь хочет минимизировать или максимизировать) на пересечении конусов положительно полуопределённых матриц с аффинным пространством.

Полуопределённое программирование является относительно новой областью оптимизации, интерес к которой растёт по нескольким причинам. Много практических задач в областях исследования операций и комбинаторной оптимизации можно смоделировать или аппроксимировать как задачи полуопределённого программирования. В теории автоматического управления задачи SDP используются в контексте линейных матричных неравенств. Задачи SDP, фактически, являются частным случаем Шаблон:Не переведено 5 и могут быть эффективно решены методом внутренней точки. Все задачи линейного программирования могут быть выражены как задачи SDP, а с помощью иерархий задач SDP могут быть аппроксимированы решения задач полиномиальной оптимизации. Полуопределённое программирование используется при оптимизации сложных систем. В последние годы некоторые задачи сложности квантовых запросов были сформулированы в терминах полуопределённого программирования.

Мотивация и определение

Исходные мотивации

Задача линейного программирования — это задача, в которой нужно максимизировать или минимизировать линейную целевую функцию от вещественных переменных на многограннике. В полуопределённом программировании, вместо этого мы используем вещественные вектора и нам позволено использовать скалярное произведение векторов. Условие неотрицательности вещественных переменных задачи ЛП заменяется ограничениями полуопределённости на матрице переменных задачи SDP. В частности, общая задача полуопределённого программирования может быть определена как любая задача математического программирования вида

minx1,,xnni,j[n]ci,j(xixj)
при условиях i,j[n]ai,j,k(xixj)bkk.

Эквивалентные формулировки

Говорят, что n×n матрица M положительно полуопределённа, если она является матрицей Грама некоторых векторов (т.е. если существуют вектора x1,,xn, такие, что mi,j=xixj для всех i,j). Если это выполняется, мы обозначим это как M0. Заметим, что существуют некоторые другие эквивалентные определения положительной полуопределённости, например, положительно полуопределённые матрицы имеют только неотрицательные собственные значения и имеет положительно полуопределённый квадратный корень.

Обозначим через 𝕊n пространство всех n×n вещественных симметричных матриц. В этом пространстве имеется скалярное произведение A,B𝕊n=tr(ATB)=i=1,j=1nAijBij. (где tr означает след)

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

minX𝕊nC,X𝕊n
при условиях Ak,X𝕊nbk,k=1,,mX0

где элемент i,j матрицы C равно ci,j из предыдущей секции, а Akn×n матрица, имеющая в качестве элемента i,j матрицы значение ai,j,k из предыдущей секции.

Заметим, что если мы добавим Шаблон:Не переведено 5 должным образом, эта задача SDP может быть преобразована к виду

minX𝕊nC,X𝕊n
при условиях Ak,X𝕊n=bk,k=1,,mX0

Для удобства задача SDP может быть определена слегка в другой, но эквивалентной форме. Например, линейные выражения, использующие неотрицательные скалярные переменные могут быть добавлены в спецификацию задачи. Задача остаётся SDP, поскольку каждая переменная может быть включена в матрицу X как диагональный элемент (Xii для некоторого i). Чтобы обеспечить Xii0, можно добавить ограничения Xij=0 для всех ji. В качестве другого примера, заметим, что для любой положительной полуопределённой матрицы X, существует набор векторов {vi}, таких, что элемент i, j матрицы X равен Xij=(vi,vj), скалярному произведению векторов vi и vj. Таким образом, задачи SDP часто формулируются в терминах линейных выражений от скалярных произведений векторов. Если дано решение задачи SDP в стандартном виде, вектора {vi} могут быть восстановлены за время O(n3) (например, с помощью неполного разложения Холецкого матрицы X).

Теория двойственности

Определения

Аналогично линейному программированию, если задана общая задача SDP в виде

minX𝕊nC,X𝕊n
при условиях Ai,X𝕊n=bi,i=1,,mX0

(прямая задача, или P-SDP), мы определим двойственную полуопределённую задачу (D-SDP) как

maxymb,ym
при условиях i=1myiAiC

Где для любых двух матриц P и Q, PQ означает PQ0.

Слабая двойственность

Теорема о слабой двойственности утверждает, что прямая задача SDP имеет значение, не меньшее значения двойственной SDP. Таким образом, любое допустимое решение двойственной задачи SDP ограничивает снизу значение прямой SDP, и наоборот, любое допустимое значение прямой задачи SDP ограничивает сверху значение двойственной SDP. Это происходит потому, что

C,Xb,y=C,Xi=1myibi=C,Xi=1myiAi,X=Ci=1myiAi,X0,

где последнее неравенство отражает факт положительной полуопределённости обеих матриц. Значение этой функции иногда называется двойственным зазором.

Сильная двойственность

При условии, известном как условие Слейтера, значения прямой и двойственной SDP-задач равны. Это называется сильной двойственностью. В отличие от задач линейного программирования, не всякая задача SDP обладает строгой двойственностью. В общем случае значение двойственной задачи SDP может быть строго меньше значения прямой задачи.

(i) Предположим, что прямая задача (P-SDP) ограничена снизу и строго допустима (то есть существуют X0𝕊n,X00, такие, что Ai,X0𝕊n=bi, i=1,,m). Тогда имеется оптимальное решение y* для двойственной задачи (D-SDP) и

C,X*𝕊n=b,y*m.

(ii) Предположим, что двойственная задача (D-SDP) ограничена сверху и строго допустима (то есть i=1m(y0)iAiC для некоторого y0m). Тогда существует оптимальное решение X* для прямой задачи (P-SDP) и выполняется равенство из (i).

Примеры

Пример 1

Рассмотрим три случайные переменные A, B и C. По определению, их коэффициенты корреляции ρAB, ρAC,ρBC допустимы тогда и только тогда, когда

(1ρABρACρAB1ρBCρACρBC1)0

Предположим, что из каких-то источников (например, из эмпирических или экспериментальных данных) мы знаем, что 0,2ρAB0,1 и 0,4ρBC0,5. Задачу определения наименьшего и наибольшего значений ρAC  можно выписать в виде:

минимизировать/максимизировать x13
при условиях
0,2x120,1
0,4x230,5
x11=x22=x33=1 
(1x12x13x121x23x13x231)0

Здесь мы принимаем ρAB=x12, ρAC=x13, ρBC=x23. Задачу можно сформулировать как задачу SDP. Мы дополняем неравенства путём расширения матрицы переменных и введения Шаблон:Не переведено 5, например

tr((010000000000000000000100000000000000)(1x12x13000x121x23000x13x231000000s1000000s2000000s3))=x12+s1=0,1

После решения этой задачи SDP получим минимум и максимум значений ρAC=x13  (0,978 и 0,872 соответственно).

Пример 2

Рассмотрим задачу

минимизировать (cTx)2dTx
при условиях Ax+b0,

где предполагается, что dTx>0 при Ax+b0.

Введя дополнительную переменную t, перепишем задачу в виде:

минимизировать t
при условиях Ax+b0,(cTx)2dTxt

В этой формулировке целевая функция является линейной функцией от двух переменных (x,t).

Первое ограничение можно переписать в виде

diag(Ax+b)0,

где матрица diag(Ax+b) является квадратной матрицей со значениями на диагонали, равными элементам вектора Ax+b.

Второе ограничение можно записать в виде

tdTx(cTx)20

Определим матрицу D следующим образом

D=[tcTxcTxdTx]

Мы можем использовать теорию дополнения Шура, чтобы показать, что

D0 Шаблон:Sfn

Задача полуоределённого программирования для этой задачи будет иметь вид

минимизировать t
при условиях [diag(Ax+b)000tcTx0cTxdTx]0

Пример 3 (Аппроксимационный алгоритм Гоеманса — Уильямсона MAX CUT)

Полуопределённое программирование является важным инструментом для создания аппроксимационных алгоритмов для NP-трудных задач максимизации. Первый аппроксимационный алгоритм, основанный на SDP, предложили Михель Гоеманс и Дэвид УильямсонШаблон:Sfn. Они изучали задачу MAX CUT: Дан граф G = (V, E), требуется разбить вершины V на две части так, чтобы максимизировать число рёбер соединяющих эти две части. Задачу можно представить как задачу целочисленного квадратичного программирования:

Максимизировать (i,j)E1vivj2, при условии vi{1,1} для любого i.

Если только не P = NP, мы не можем решить эту задачу эффективно. Однако Гоеманс и Уильямсон наметили трёхшаговую процедуру для атаки такого рода задач:

  1. Ослабляем целочисленную задачу квадратичного программирования до задачи SDP.
  2. Решаем задачу SDP (с любой произвольно малой ошибкой ϵ).
  3. Округляем решение задачи SDP для получения приближённого решения исходной задачи целочисленного квадратичного программирования.

Для задачи MAX CUT наиболее естественным ослаблением является

max(i,j)E1vi,vj2, для vi2=1, где максимизация осуществляется по векторам {vi}, а не скалярным целым переменным.

Задача является задачей SDP, поскольку и целевая функция, и ограничения являются линейными функциями от скалярных произведений векторов. Решение задачи SDP даёт набор единичных векторов в 𝐑𝐧. Поскольку вектора не обязательно коллинеарны, значение ослабленной задачи может быть только больше значения исходной целочисленной задачи квадратичного программирования. Конечная процедура округления необходима, чтобы получить разбиение. Гоеманс и Уильямсон выбирают случайную гиперплоскость (используя равномерное распределение), проходящую через начало координат и разбивают вершины в зависимости от расположения относительно этой плоскости. Непосредственный анализ показывает, что эта процедура обеспечивает ожидаемый аппроксимационный коэффициент 0,87856 - ε. (Математическое ожидание значения разреза равно сумме по всем рёбрам вероятностей, что ребро входит в разрез и это ожидание пропорционально углу cos1vi,vj между векторами в конечных вершинах ребра. Если сравнивать эту вероятность с (1vi,vj)/2, математическое ожидание отношения всегда будет не меньшим 0,87856.) В предположении верности Шаблон:Не переведено 5 можно показать, что аппроксимационный коэффициент этой аппроксимации, главным образом, оптимален.

Со времени появления статья Гоеманса и Уильямсона задачи SDP были применены для разработки большого количества аппроксимационных алгоритмов. Не так давно Прасад Рагхавендра разработал общую схему для задач удовлетворения ограничений, основанную на Шаблон:Не переведено 5Шаблон:Sfn.

Алгоритмы

Имеется несколько видов алгоритмов для решения задач SDP. Результат работы этих алгоритмов является значение задачи SDP с точностью до ϵ, которое получается за время, полиномиально зависящее от размера задачи и log(1/ϵ).

Методы внутренней точки

Большинство систем решения базируются на методе внутренней точки (CSDP, SeDuMi, SDPT3, DSDP, SDPA), робастном и эффективном для линейных задач SDP общего вида. Подход ограничен в использовании тем фактом, что алгоритмы являются методами второго порядка и требуют запоминания и разложения больших (и, зачастую, плотных) матриц.

Методы первого порядка

Методы первого порядка для Шаблон:Не переведено 5 избегают запоминания и разложения больших матриц Гессе и применимы к существенно большим по размеру задачам, чем методы внутренней точки, за счёт потери в точности. Метод реализован в системе «SCS solver».

Метод пучков

Задача SDP формулируется как задача негладкой оптимизации и решается методом спектрального пучка. Этот подход очень эффективен для частных классов линейных задач SDP.

Другие

Алгоритмы, основанные на Шаблон:Не переведено 5 (PENSDP), близки по поведению к методам внутренней точки и могут быть приспособлены для некоторых очень больших задач. Другие алгоритмы используют низкоуровневую информацию и переформулировку задачи SDP как задачи нелинейного программирования (SPDLR).

Приложения

Полуопределённое программирование было использовано для поиска приближённых решений задач комбинаторной оптимизации, таких как решение задачи максимального разреза c аппроксимационным коэффициентом 0,87856. Задачи SDP используется также в геометрии для определения тенсегрити-графов, и появляются в теории управления как линейные матричные неравенства.

Примечания

Шаблон:Примечания

Литература

Шаблон:Refbegin

Шаблон:Refend

Ссылки

Шаблон:Методы оптимизации Шаблон:Rq