Приближенные алгоритмы Задача о покрытии множествами Алгоритмы на основе ЛП Задача о покрытии множествами • Дано: множество элементов E={e1,…,en}, набор его подмножеств S = {S1,…, Sm}, Sm E, и веса подмножеств w: S → Q+. • Найти покрытие наименьшего веса. • S' S является покрытием, если любой элемент из U принадлежит хотя бы одному элементу из S' . Кратность • Пусть fi – кратность элемента ei, то есть число множеств из S, в которые он входит. • Пусть f = maxi=1,…,n fi. Задача «Вершинное покрытие» • Условие. Задан граф G и целое число k. • Вопрос. Существует ли вершинное покрытие мощности k? • Вершинное покрытие это множество вершин V′ V такое, что каждое ребро имеет граничную точку в V′ . Задача линейного программирования z x c1 x1 cn xn min a11 x1 a1n xn b1 am1 x1 amn xn bm xi 0 for i 1, , n. 5 ЦЛПset (задача о покрытии множествами) m w x minimize j 1 s.t. x j j 1, i 1,..., n x j 0, 1 j 1,..., m j:ei S j j * Z Обозначим через IP значение оптимального решения ЦЛП для некоторого примера задачи о покрытии множествами. * Тогда Z IP = OPT, где OPT значение оптимального решения этого примера задачи о покрытии множествами. ЛПset (задача о покрытии множествами) m w x minimize j 1 s.t. x j:ei S j j xj 0 1, j j i 1,..., n j 1,..., m * Z Обозначим через LP значение оптимального решения ЛП. Любое оптимальное решение задачи ЦЛП является допус* тимым решением задачи ЛП и имеет значение Z IP . * * Z IP OPT. Следовательно, Z LP Алгоритм «Округление ЛПset» 1) Найти оптимальное решение ЛП-релаксации. 2) Выбрать все множества Sj, для которых xj ≥ 1/f. f-приближение Теорема 8.1 Алгоритм «Округление ЛП set» является f-приближенным алгоритмом для задачи о покрытии множествами. Доказательство. • ei E: (1) xj ≥ 1/f (ei Sj) все элементы покрыты. • Так как xj ≥ 1/f для всех выбранных S, стоимость полученного покрытия превышает стоимость дробного покрытия не больше чем в f раз. 2-приближение Следствие 8.2 Алгоритм «Округление ЛП set» является 2-приближенным алгоритмом для задачи о вершинном покрытии. Точный пример (гиперграф) V1 V2 V3 Vk V=V1V2 … Vk nk гиперребер Каждое гиперребро соответствует элементу, вершина – множеству (nk множеств; стоимость всех 1), которое содержит инцидентные элементы-гиперребра. Прямая и двойственная задачи n c x j 1 j j min n s.t. a x j 1 ij x j 0, j bi , i 1, , m j 1, , n m b y i 1 i i max m s.t. a i 1 ij yi ci , yi 0, j 1,, n i 1, , m Двойственная программа ДЛП set (задача о покрытии множествами) n y maximize s.t. y i:ei S j i yi 0, i 1 wj , i j 1,...,m, i 1,...,n. Свойства решений • Пусть x ― допустимое решение задачи ЛПset . • Пусть y ― допустимое решение задачи ДЛПset . n n m m y y x x y x w . i 1 i i 1 i j:ei S j j j 1 j i:ei S j i j 1 j j Следовательно, любое допустимое решение ДЛПset не больше оптимального решения ЛПset : n * y Z i LP OPT . i 1 1-ая теорема двойственности Прямая и двойственная к ним задачи либо одновременно разрешимы, либо одновременно неразрешимы. При этом в первом случае значения целевых функций этих задач совпадают, а во втором случае, по крайней мере, одна из задач неразрешима в силу несовместности ее ограничений. m n j 1 i 1 * * w x y j j i. Алгоритм «Округление ДЛПset» 1) Найти оптимальное решение y* двойственной программы ДЛП set . 2) Выбрать все множества Sj , * y для которых i w j . i:ei S j Допустимость • Лемма 8.3 Пусть S ― набор подмножеств, выбранных алгоритмом «Округление ДЛПset». Тогда S является покрытием. Доказательство (1) • Пусть существует некоторый непокрытый элемент ek. Тогда для каждого Sj содержащего элемент ek должно быть выполнено yi* w j . i:ei S j • Пусть ε ― наименьшая разность между правой и левой частью этого неравенства среди всех ограничений включающих ek, min w j j:ek S j * y i . i:ei S j Доказательство (2) • Рассмотрим новое двойственное решение y, в котором yk yk* и все остальные компоненты решения y равны тем же значениям, что и в y*. • Тогда y является допустимым двойственным решением поскольку для всех j таких, что ek Sj, * y y i i w j , по выбору , i:ei S j i:ei S j yi * y i wj. а для всех j таких, что ek Sj, i:e S i:ei S j i j • Получаем противоречие с оптимальностью y*, n n i 1 i 1 * y y i i. f-приближение Теорема 8.4 Алгоритм «Округление ДЛПset» является f-приближенным алгоритмом для задачи о покрытии множествами. Доказательство (неформальное) * y Множество Sj выбирается в покрытие, если i w j . i:ei S j • Можно сказать, что стоимость выбранного множества покрывается стоимостью yi* каждого элемента, входящего в это множество. • Так как каждый элемент входит не более чем в f множеств, то суммарная стоимость не m превосходит величины f yi*. i 1 Доказательство (формальное) • Пусть S ― набор подмножеств, выбранных алгоритмом. * y i wj. • Так как Sj S только, если i:e i S j • Оценим стоимость покрытия S. wj S j S ' * * y S S ' : e S y i j i j i n S j S ' i:ei S j i 1 n n i 1 i 1 f i yi* f yi* f OPT . Свойства решений n n m m y y x x y x w . i 1 i i i 1 j:ei S j j j 1 m n j 1 i 1 j i:ei S j i j 1 j j * * w x y j j i. То есть для оптимальных решений x* и y* оба неравенства выполняются как равенства. 2-ая теорема двойственности • Допустимые решения x′ и y′ соответственно прямой и двойственной задачи оптимальны тогда и только тогда, когда m j : x j c j aij yi 0. i 1 m i : yi aij x j bi 0. i 1 Сравнение решений алгоритмов «Округление ЛПset» и «Округление ДЛПset » • Пусть xj* > 0 в некотором оптимальном решении ЛПset. • Тогда соответствующее двойственное неравенство для Sj должно выполняться как равенство в любом оптимальном решении ДЛПset. • Алгоритм «Округление ЛПset» выбирает Sj в покрытие S, когда xj* ≥ 1/f >0. • Но тогда по условию дополняющей нежесткости алгоритм «Округление ДЛПset » выберет Sj в покрытие S и, следовательно, S S . n c x j 1 j Релаксированные условия дополняющей нежесткости min b y max n j j 1 n s.t. a j 1 ij x j bi , i 1, , m i i m s.t. a i 1 x j 0, j 1, , n ij yi ci , yi 0, j 1, , n i 1, , m Прямое условие 1, j,1 j n : x j 0 cj m aij yi c j . i 1 Двойственное условие m 1, i,1 i m : yi 0 bi aij x j bi . i 1 Соотношение между целевыми функциями • Утверждение 8.5 Если x и y прямое и двойственное допустимые решения, удовлетворяющие релаксированным условиям дополняющей нежесткости, то n c x j 1 j m j bi yi . i 1 Доказательство Утверждения 8.5 n c x j 1 j m aij yi x j j 1 i 1 primal j n m n dual aij x j yi bi yi . i 1 j 1 i 1 m Идея прямо-двойственной схемы • Алгоритм начинает работу с прямого недопустимого решения и с двойственного допустимого решения. Как правило это тривиальное решение x = 0 и y = 0. • Итеративно улучшается допустимость прямого решения и оптимальность двойственного решения, так чтобы в конце получить допустимое прямое решение, при котором выполнены релаксированные условия дополняющей нежесткости для выбранных α и β. • При расширении прямое решение всегда остается целочисленным. • Улучшение прямого и двойственного решения происходит совместно, то есть текущее прямое решение используется для улучшения двойственного и наоборот. • В конце стоимость двойственного решения используется как нижняя оценка на величину оптимального решения. α = 1, β = f Прямое условие S j S : x j 0 y i:ei S j Двойственное условие i : yi 0 1 Множество S называется строгим, если i wj x j:ei S j y i:ei S j i j f wj. Каждый элемент имеющий ненулевое двойственное значение может быть покрыт не более f раз. Прямо-двойственный алгоритм 0) 1) 2) • • • 3) Input (U, Ω, c: Ω → Q+) x ← 0, y ← 0 . Until все элементы не покрыты, do Выбрать непокрытый элемент, например e, и увеличить ye до тех пор пока какое-либо множество не станет строгим. Поместить все строгие множества в покрытие и обновить x. Объявить все элементы появляющиеся в этих множествах «покрытыми». Output (x) f-приближение • Теорема 8.6 Прямо-двойственный алгоритм является f-приближенным алгоритмом для задачи о покрытии. Доказательство Теоремы 8.6 • Алгоритм останавливается когда все элементы покрыты (допустимость). • В покрытие выбираются только строгие множества и значения yi элементов, которые в них входят больше не изменяются (допустимость и прямое условие). • Каждый элемент входит не больше чем в f множеств по условию задачи (двойственное условие). • Следовательно алгоритм находит допустимое решение и по утверждению 8.5 является f-приближенным. Точный пример 1 1 e1 f=n e2 1 en-1 en en+1 1+ε