Приближенный алгоритм s∗ для задачи Штейнера на евклидовых ориентированных графах

Сер. 10. 2012. Вып. 3

ВЕСТНИК САНКТ-ПЕТЕРБУРГСКОГО УНИВЕРСИТЕТА

УДК 519.176 Д. А. Ейбоженко

ПРИБЛИЖЕННЫЙ АЛГОРИТМ ДЛЯ ЗАДАЧИ ШТЕЙНЕРА НА ЕВКЛИДОВЫХ ОРИЕНТИРОВАННЫХ ГРАФАХ

1. Введение. Задача Штейнера на графах состоит в поиске минимального дерева, связывающего некоторый поднабор вершин. Она является NP-трудной [1], и ее исследование в первую очередь связано с разработкой приближенных методов (аппроксимаций и эвристик), использующих разнообразный математический инструментарий. Однако существуют и точные решения, применимые к задачам малых размерностей.

Задача Штейнера широко используется в многих областях науки и техники: в проектировании сверхбольших интегральных схем (Very Large Scale Integration, VLSI), примерами которых являются центральные микропроцессоры (CPU) и графические микропроцессоры (GPU), в программируемых пользователем логических матрицах (Field-Programmable Gate Arrays, FPGA) [2], а также в биологии [3]. В связи с развитием интерактивных телекоммуникационных технологий, например форматов выборочного телевещания, вещания по требованию, растет востребованность задачи Штейнера в этой области [4].

Многие подобные задачи, ставящиеся на практике, сводятся к евклидовому графу. Напомним, в таком графе каждая вершина имеет евклидовы координаты, а длина каждой дуги задается расстоянием между инцидентными ей вершинами. В п. 4 представлен достаточно эффективный полиномиальный приближенный алгоритм, основанный на модификации точного алгоритма решения задачи Штейнера.

2. Определения и обозначения. Ориентированный граф определяется множеством вершин M и множеством дуг N, причем каждой дуге j G N сопоставляется упорядоченная пара вершин, называемых соответственно началом и концом этой дуги, begj и endj.

Граф называется евклидовым, если для каждой вершины m G M заданы ее евклидовы координаты (xm,ym), а на дугах задана функция, d : N ^ R+:

d(j) = у (xbeg j - Xend j )2 + (ybeg j - У end j )2,

определяющая длину дуги как евклидово расстояние между соответствующими вершинами.

В множестве M выделена вершина b, называемая началом, и множество вершин E, называемых конечными или терминалами.

Любое ориентированное дерево в графе G, с корнем в b и содержащее пути от b до любого терминала из E, называется деревом Штейнера.

Ейбоженко Дмитрий Анатольевич — аспирант кафедры исследования операций математико-меха-нического факультета Санкт-Петербургского государственного университета. Научный руководитель: доктор физико-математических наук, проф. И. В. Романовский. Количество опубликованных работ: 5. Научное направление: дискретная оптимизация. E-mail: dmitry@eibozhenko.ru. © Д. А. Ейбоженко, 2012

Длиной графа называется сумма длин всех его дуг: d(G) neN d(n).

Задача Штейнера на графах состоит в поиске минимального дерева Штейнера, т. е. дерева Штейнера наименьшей длины.

3. Предварительные сведения.

3.1. Метод динамического программирования. В качестве базового алгоритма для рассматриваемого в статье приближенного метода будет применяться точный алгоритм решения, основанный на принципе динамического программирования и уравнении Беллмана. Он также использовался в алгоритме ^-кластерной оптимизации для задачи Штейнера на произвольных ориентированных графах [5]. Напомним его структуру.

Будем обозначать через (i,Ep) состояние процесса, при котором решается задача Штейнера для начальной точки i и множества терминалов Ер, а через v(i, Ep) - длину минимального дерева Штейнера в этой задаче. Начальное состояние процесса - (b, Е).

Пусть процесс находится в состоянии (i,Ep). Считаем, что i у/ Ер.

Тогда можно выбрать такие решения: перейти по какой-либо дуге, начинающейся в i, в другую вершину; разветвить путь, разбивая терминальное множество Ер = |Jk Epk и решая для каждого состояния (i,Epk) такую же задачу.

Получаем уравнение Беллмана

v(i,Ep ) = min{Vcont (i,Ep {i}),Vpart(i, Ep {i})},

где vcont - наименьшие затраты при наилучшем переходе по какой-либо дуге

Vcont (i, Ep) = min{/j + v(end j, Ep) | beg j = i},

а vpart - наименьшие затраты при наилучшем разбиении терминального множества Ep на два подмножества A и Ep \ A:

vpart (i, Ep) = min{v(i, A) + v(i, Ep \ A) | A с Ep}.

При этом, если Ep состоит из одной вершины, то дерево Штейнера для состояния (i, Ep) - это кратчайший путь, который можно вычислить по алгоритму Дейкстры [6].

Технически алгоритм реализуется следующим образом.

Имеется таблица размером IM| х 2е', где в ячейке [i,j] хранится текущая длина графа, соединяющего вершину j у M с вершинами i-го подмножества E, т. е. v

Выполняется цикл по подмножествам E, причем на i-й итерации рассчитываются по методу Дейкстры все длины деревьев для i-го подмножества. Метод Дейкстры несколько изменен: вершины из M, для которых уже вычислены промежуточные значения длины, помещаются во множество просматриваемых с имеющейся текущей длиной (см. алгоритм Дейкстры).

Далее, для всех уже посчитанных подмножеств (io < i), таких что Ei0 П Ei = 0, рассматривается подмножество Eil = Ei U Ei0, и для каждой вершины j значение соответствующей ячейки [ii, j], т. е. v(j,Eil), пересчитывается по формуле

v(j, Eil) = min{v(j, Eil), v(j, Ei0) + v(j, Ei)}.

В результате работы алгоритма в ячейке с номером [b, 2'е'] будет содержаться длина искомого минимального дерева Штейнера. Для того чтобы найти само дерево, достаточно иметь еще одну таблицу такого же размера, в которой будут храниться входящие в каждую вершину дуги, вычисленные алгоритмом Дейкстры.

3.2. Алгоритм Л* поиска кратчайшего пути. К примерам использования данных о координатах вершин в евклидовом графе относится решение задачи о маршрутизации с помощью алгоритма Л* [7].

Алгоритм Л* является развитием алгоритма Дейкстры для решения задачи о кратчайшем пути [6] и имеет большую в сравнении с ним производительность. Данный алгоритм точный и использует дополнительные эвристические знания о графе. Основная его идея базируется на том, что существует некоторая допустимая эвристическая функция Н : М ^ М+. Напомним, что эвристическая функция называется допустимой, если ее значение априори не превышает значение кратчайшего пути к цели.

Алгоритм использует эвристическую функцию ] : М ^ М+, определяющую порядок, в котором алгоритм обходит вершины. Функция ] представляет собой сумму двух функций f = д + Н:

д - функция стоимости пути от начальной вершины до рассматриваемой вершины,

Н - введенная выше допустимая эвристическая функция.

Используя ее, алгоритм рассматривает в первую очередь пути, которые, скорее всего (согласно эвристической функции Н), могут привести к цели, однако при этом принимает во внимание и уже пройденное расстояние (рисунок).

Формально алгоритм Л* приведен ниже.

Алгоритм Л*

Инициализация: Q - приоритетная очередь частичных путей,

К - список рассмотренных вершин

для Ь вычислим ](Ь) и добавим путь Ь ^ Ь в Q

пока Q = 0 делать

выбрать в Q путь р с минимальным значением /

то - конечная вершина р

если то € К, вернуться к началу цикла

если т0 = е, вернуть р

К ^ то

для всех т : (то, т) € N делать посчитать ](т) добавить путь Ь ^ т в Q конец для всех конец пока Вывести Ть

Авторами [7] было доказано, что данный алгоритм является полным и оптимальным, т. е. всегда находит наилучшее решение, если оно существует. Кроме того, показано, что если функция Н(х) монотонная, т. е. удовлетворяет условию

Н(beg и) ^ ¿(и) + Н(е^ и) У и € N,

то алгоритм Л* можно реализовать еще эффективнее - рассматривать каждую вершину только один раз. В этом случае Л* по сути есть алгоритм Дейкстры на графе с уменьшенной функцией стоимости ¿'(и) = ¿(и) — Н(beg п) + Н(е^ п).

Стоит также отметить, что во многом приближенный алгоритм, который будет приведен ниже, основывается на решении специфической задачи из работы [8].

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

4.1. Построение приближенного решения. Допустим, уже найдено множество терминальных подмножеств Я. Алгоритм построения дерева Штейнера основывается на алгоритме динамического программирования, приведенном в п. 2.

Построение приближенного решения происходит аналогично оригинальному методу динамического программирования: выполняется цикл по всем элементам из Я. На каждом шаге итерации по методу Дейкстры рассчитываются длины деревьев для данного подмножества.

Решение задачи Дейкстры записывается в строку таблицы, соответствующую рассматриваемому элементу из Я. Далее, эта строка используется - имеющиеся в ней подмножества объединяются с уже обработанными. Однако, поскольку Я состоит не из всех подмножеств Е, такое объединение выполняется не для всех пар подмножеств. Именно, после завершения работы алгоритма Дейкстры на подмножестве Е^ оно объединяется с ранее обсчитанным подмножеством Е^0, го < г, только в том случае, если Я содержит подмножество Е^ и Е^0.

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

4.2. Построение множества терминальных подмножеств. Наивный метод. Считаем, что все терминалы в Е достижимы из начальной вершины Ь, иначе задача не имеет решения.

Будем называть множество 1 С Е Ь-допустимым, если

$т' € Е \ .1: Зш1, Ш2 € . : /(ш1Ьш2) = А(т^т') + А(т2Ьт').

Тогда определим множество терминальных подмножеств П, получаемое наивным методом построения, как совокупность всевозможных Ь-допустимых подмножеств Е.

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

Наивный метод

Инициализация: П - искомое множество подмножеств, П = 0

подпрограмма Я * N

для всех I € Ь найти рт

Отсортировать Ь в порядке возрастания рт

Построить Я - все Ь-допустимые подмножества элементов из Ь

Вывести Я

конец подпрограммы

П = пи Я*N(Ь, Е) Вывести

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

4.3. Построение множества терминальных подмножеств. Метод «концентрических окружностей». Данный способ генерации представляет собой развитие предыдущего.

На первом шаге алгоритм повторяет действия, описанные в п. 4.2, и добавляет все полученные подмножества в результирующее множество.

На следующем шаге разобьем терминалы на два подмножества таким образом.

Обозначим через ¿ь(т) расстояние от Ь до т. Пусть С(Я) = ^ 3 ¿ь(т)/\Я\ - среднее расстояние от начальной вершины до вершин множества Я. Разобьем множество терминалов Е на два подмножества - Ь : У в € Ь : ¿ь(в) ^ О(Е), и дополнительное множество Е \ Ь. Найдем все Ь-допустимые подмножества из множеств Ь и Е \ Ь и добавим их к результирующему множеству.

Далее, можно подобным образом поступить с Ь и Е \ Ь, разделив каждое из них, в свою очередь, на два подмножества. Число итераций задается параметром к.

Метод «концентрических окружностей»

Инициализация: Як - искомое множество подмножеств,

Як = 0

к € N - параметр

подпрограмма 5* О(ш € М,Ь С Е,к € М) если к = 0 вернуть 5*М(Ь, Ь) иначе

Ь1 = {I € Ь\ ¿т(I) < С(Ь)}, Ь = Ь \ Ь Вернуть 5*К(Ь, Ь) и 5*О(ш, Ь1,к - 1) и 5*О(ш, Ь2, к - 1) конец если конец подпрограммы

Як = 5*О(Ь, Е, к) Вывести Як

Несложно заметить, что при к = 0 данный метод является наивным, представленным в п. 4.2. Кроме того, необходимо отметить, что если к1 ^ к2, то Якг С Як2, и вследствие этого дерево Штейнера, полученное в результате применения метода динамического программирования к Як2, будет заведомо не хуже, чем для множества Якг.

Метод «концентрических окружностей» дает более точное решение, чем предыдущий, однако отметим, что терминалы разбиваются на «удачные» множества только с «точки зрения» начальной вершины Ь, хотя в ходе построения дерева Штейнера нам неизвестны заранее вершины, в которых будет происходить разветвление дерева.

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

Необходимо учесть, что если для начальной вершины Ь все терминальные вершины заведомо достижимы (иначе поставленная задача не имеет смысла), то про произвольную вершину ш € М этого сказать нельзя. Таким образом, для каждой вершины ш необходимо искать допустимые подмножества на множестве только достижимых терминалов. В множество Я добавляются допустимые множества для всех вершин из М. Обозначим через ТN) множество дуг в транзитивном замыкании графа 0(М, N).

Обобщенный метод

Инициализация: Я - искомое множество подмножеств,

Я = 0

подпрограмма S* E

для всех m G M делать

Em = {e G E\(m, e) G F(N)} - достижимые из m терминалы Я = RUS *N (m,Em) конец для всех конец подпрограммы Вывести Я

5. Результаты.

5.1. Теоретические результаты. Покажем, что, несмотря на то, что алгоритм

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

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

Теорема 1. Если в графе G существуют пути от b до каждого из терминалов, то алгоритм S*E на евклидовых графах в результате работы выдаст некоторое дерево Штейнера.

Доказательство. Отметим, что для любого не одноэлементного подмножества S G R существуют множества Si, S2, такие, что Si, S2 = 0, S = Si U S2, Si П S2 = 0 и Si,S2 gR (существует разбиение последовательного подмножества на два последовательных подмножества).

Пусть условие теоремы не выполняется, и на некотором графе алгоритм не выдает никакого решения. Это означает, что в результате работы алгоритма в ячейке, соответствующей [b, E], будет содержаться ж - v[b, E] = ж.

Это, в свою очередь, значит, что для любого разбиения E = Si U S2, такого, что Si,S2 G R либо v[b, Si] = ж, либо v[b, S2] = ж. Выберем то подмножество, расстояние до которого от начальной равно бесконечности. Обозначим его S: S= argmax{v[b, S]\S G {Si,S2}}. Отметим, что \ < \E|. Если такое множество одноэлементное (|STO\ = 1), то приходим к противоречию с условием, что в графе существуют пути от b до каждого из терминалов. В ином случае условие v[b, STO] = ж вновь означает, что для любого разбиения S= Si U S2, Si,S2 G R либо v[b, Si] = ж, либо v[b, S2] = ж. Вновь выберем то из них, расстояние до которого от b бесконечно - S^, при этом \S^ \ < \STO\. Продолжая таким образом, обязательно придем к некоторому множеству Sk, состоящему только из одного элемента, что противоречит условию.

Таким образом, предположение о том, что существует евклидов граф, в котором алгоритм S* не выдаст никакого решения, неверно. Теорема доказана.

Покажем далее, что такой алгоритм является полиномиальным при использовании любого из способов построения подмножеств терминальных вершин. Для этого найдем максимально возможное число подмножеств, строимых каждым из методов. Напомним, что метод динамического программирования для каждого множества из R решает методом Дейкстры задачу о кратчайшем пути, а затем рассматривает всевозможные объединения данного множества с другими, дизъюнктными с ним, чтобы улучшить промежуточные решения.

Трудоемкость алгоритма Дейкстры O(n log m), а сложность дальнейшего использования O(\R\m), следовательно, сложность алгоритма динамического программирования O(\R\nlogm + \R\2m). Таким образом, показав, что максимально возможный размер множества подмножеств полиномиально зависит от размера входа, мы тем самым докажем полиномиальную сложность метода S*.

1. Для простейшего метода число подмножеств в R всегда строго определено. В нем содержится e одноэлементных подмножеств, e двухэлементных и т. д. e e — 1-элемент-ных, а также одно e-элементное, а значит, всего e(e — 1) + 1 < e2 подмножеств. Таким образом, размер R зависит от размера входа полиномиально.

2. Для метода концентрических окружностей это число, очевидно, меньше, чем (1 + 2 + ... + 2k)e2 < 2ke2, и поскольку параметр к фиксирован, то оно также полиномиально зависит от входа.

3. В общем методе терминалы сортируются по углу для каждой из вершин графа. Это значит, что даже если из каждой вершины графа достижим каждый терминал, то общее число подмножеств в Я не превышает ше2.

Таким образом, было показано, что:

Теорема 2. Для любого метода построения Я алгоритм 5* имеет полиномиальную сложность.

5.2. Практические результаты. Поскольку в открытых библиотеках нет наборов задач Штейнера на евклидовых графах, то для вычислительных экспериментов был разработан алгоритм генерации евклидовых графов, работающий следующим образом.

Исходными параметрами алгоритма генерации являются габаритные значения области, в которой располагается граф (ширина (W) и высота (Н)), число вершин (V), число терминалов (Е), а также наибольшая возможная длина дуги в графе (О). Алгоритм случайным образом располагает вершины на области координатной плоскости, ограниченной точками (0, 0) и (^,Н), рассматривает все пары вершин и соединяет дугами те из них, евклидово расстояние между которыми меньше О. Затем случайно выбираются начальная вершина и Е терминальных вершин.

Набор из 50 задач для сравнений был построен так: число вершин для всех задач установлено равным 160, ширина поля - 1200 мм, высота - 800 мм; в наборе присутствуют по десять задач с 10, 20, 30, 40 и 50 терминалами; в каждом десятке с одинаковым числом терминалов постепенно увеличивается максимальная длина дуги, а значит, и число дуг; минимальное число дуг в наборе - 1100, максимальное - 7700 (полный граф на наборе из 160 вершин имеет 50 880 дуг).

Сравним методы построения множества терминальных подмножеств на данном наборе задач. Вначале рассмотрим результаты, полученные с помощью трех разных способов без последующих локальных улучшений. В табл. 1 представлены средняя относительная точность решения наивного метода построения (1), метода концентрических окружностей (2) и обобщенного метода построения (3) на задачах с данным числом терминалов.

Таблица 1. Сравнение методов генерации множества терминальных подмножеств

\Е\

10 1.066 1.041

20 1.217 1.088

30 1.241 1.082

40 1.326 1.118

50 1.403 1.129

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

Сравним результаты, полученные с помощью тех же способов с примененными к решениям локальными улучшениями. Как видно из табл. 2, обобщенный метод также выигрывает по точности, хотя и меньше (до 6%). Кроме того, лишь в пяти задачах из 50 удалось улучшить решения, полученные обобщенным методом, что косвенно говорит о его высокой (по крайней мере, локальной) точности.

Таблица 2. Сравнение методов генерации множества терминальных подмножеств с учетом локальных улучшений

\E\

10 1.019 1.022

20 1.050 1.022

30 1.051 1.039

40 1.054 1.044

50 1.060 1.059

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

В табл. 3 (1) - алгоритм Такахаши [9], (2) - жадный 11/6-аппроксимационный алгоритм Зеликовского [10], (3) - к-кластерный алгоритм [5], (4) - алгоритм 5* с обобщенным методом построения множества терминальных подмножеств. Из таблицы видно, что алгоритм 5* превосходит по точности на данном тестовом множестве три других представленных алгоритма, хотя при этом алгоритм жадной аппроксимации проигрывает в точности незначительно.

Также проведем сравнение времени решения задач этими алгоритмами (табл. 4).

Таблица 3. Сравнение точности Таблица 4. Сравнение времени

алгоритма Я * с другими выполнения алгоритма Я* с другими

известными методами известными методами

\E\ (l)/(4) (2)/(4) . :.. |.

10 1.1752 1.0230 1

20 1.1946 1.0112 1.0753

30 1.2337 1.0063 1.0787

40 1.2378 1.0007 1.0784

50 1.2376 1.0011 1.0630

\E\

10 399.1 2.3 0.5

20 4510.6 18.2 83.8

30 18416.5 23.3 208.9

40 49288.2 19.2 279.6

50 92187.9 17.3 595.9

В столбцах табл. 4 задано отношение времени решения алгоритма S* ко времени решения другими известными методами. Видно, что за улучшение качества решения приходится платить увеличением времени расчета. Также отметим, что в задачах с большим числом терминалов время решения задач с одинаковым числом терминалов, но разной плотностью дуг практически не отличается. Это объясняется структурой оценки быстродействия, так как с ростом \E\ вклад члена O(\R\2m) = O(e4m3) увеличивается быстрее, чем второго, и он не зависит от п.

6. Заключение. В статье представлен приближенный метод решения задачи Штей-нера на евклидовых ориентированных графах, основанный на методе динамического программирования. Доказаны теоремы о разрешимости задачи данным методом, а также о его полиномиальности. Проведено сравнение различных методов построения, а также решения задачи Штейнера.

Литература

1. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи /пер. с англ. Е. В. Левнера, М. А. Фрумкина; под ред. А. А. Фридмана. М.: Мир, 1982. 416 с.

2. Alexander M. J., Robins G. New perfomance-driven FPGA routing algorithms // Proc. of the 32nd annual ACM/IEEE Design Automation Conference. 1996. P. 562-567.

3. Chin L. L., Chuan Y. T., Lee R. The full Steiner tree problem in phylogeny // Computing and Combinatorics. 2002. P. 107-116.

4. Chen C. Selective multicast communication in distributed systems: tech. report. Maryland: University of Maryland, 1992. 20 p.

5. Ейбоженко Д. А. Алгоритм fc-кластерной оптимизации для задачи Штейнера на ориентированных графах // Вестн. С.-Петерб. ун-та. Сер. 10: Прикладная математика, информатика, процессы управления. 2011. Вып. 2. С. 29-39.

6. Dijkstra E. W. A note on two problems in connexion with graphs // Numerische Mathematik. 1959. Vol. 1. P. 269-271.

7. Hart P. E., Nilsson N. J., Raphael B. A formal basis for the heuristic determination of minimum cost paths // IEEE transactions on Systems Science and Cybernetics. 1968. Vol. 4. P. 100-107.

8. Романовский И. В., Ейбоженко Д. А. Модификации метода динамического программирования в задачах Штейнера на ориентированных графах // Компьютерные инструменты в образовании. 2010. Вып. 5. C. 22-28.

9. Takahashi H., Matsuyama A. An approximate solution for the Steiner problem in graphs // Math. Japonica. 1980. Vol. 24, N 6. P. 573-577.

10. Zelikovsky A. 11/6-approximation algorithm for the Steiner problem on graphs // Proc. Fourth Czechoslovakian Symposium on Combinatorics, Graphs, and Complexity. 1992. P. 351-354.

Статья рекомендована к печати проф. А. Н. Тереховым. Статья принята к печати 26 апреля 2012 г.