УДК 658.52.011.56
С.А.КАНЦЕДАЛ, М.В.КОСТИКОВА
ОДИН АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ О ПОКРЫТИИ
Для решения задач о покрытии среднего размера предлагается простой алгоритм, реализующий ограниченный перебор сочетаний покрывающих объектов. Приводится способ вычислений предельного количества основных операций, выполняемых алгоритмом.
1. Постановка задачи
Рассмотрим самую общую постановку задачи о покрытии. Для конечного множества М = {ш1,ш2, ..., шш} и некоторого конечного семейства его подмножеств Sj, j = 1, 2, ..., п требуется найти подсемейство Sj с Sj с минимальным набором подмножеств Sj такое, что каждый элемент исходного множества М принадлежит, по крайней мере, одному из этих подмножеств. Найденные подмножества Sj обычно называют покрывающими, а семейство Sj - наименьшим покрытием М .
В том случае, когда покрывающим элементам приписаны некоторые веса, рассматривают взвешенную задачу о покрытии, предполагающую поиск наименьшего взвешенного покрытия М . Когда же покрывающие подмножества попарно не пересекаются, задача о наименьшем покрытии трактуется как задача о разбиении множества М на наименьшее количество классов.
Цель исследования - разработка нового алгоритма задачи о покрытии.
Задача для достижения цели - обзор существующих методов решения такой задачи.
Приведем простейший пример взвешенной задачи о покрытии. Некоторой организации требуется нанять переводчиков с ряда языков на английский. Имеется пять кандидатур таких переводчиков А, В, С, Б, Е, делающих переводы только с части языков и требующих свою оплату труда.
Необходимо определить, каких переводчиков следует взять на работу, чтобы обеспечить возможность перевода со всех языков на английский и при этом гарантировать наименьшие расходы организации.
Исходные данные задачи представлены двумя таблицами (табл. 1, 2), в первой из которых в соответствующих ее клетках возможности переводчиков, т. е. перевода ими с приведенного перечня языков на английский, отмечены единицами, невозможности - нулями. Очевидно, что множество М, для которого требуется найти наименьшее взвешенное покрытие, образует перечень языков. Кандидатуры переводчиков представляют собой семейство подмножеств Sj ={А, В, С, Б, Е}, подсемейство Sj с Sj - перечень переводчи-
ков, обеспечивающих возможность перевода, т.е. покрытия M с минимальными затратами.
По существу первая таблица без верхней строки и крайнего левого столбца представляет собой нуль-единичную матрицу. Строки матрицы интерпретируются как языки, столбцы - как переводчики. Поэтому задачу можно толковать как поиск такого множества столбцов матрицы, что в целом они обеспечивают наличие единиц во всех ее строках, образно говоря, покрывают строки этой матрицы и приводят к наименьшим расходам.
Таблица 1. Возможность переводчика переводить на английский язык с указанного языка
Язык А в С Б Е
Французский 1 0 1 1 0
Немецкий 0 1 0 0 1
Греческий 0 1 0 0 0
Итальянский 1 0 0 1 0
Испанский 0 0 1 0 0
Русский 0 1 1 0 1
Китайский 1 0 0 1 1
Таблица 2. Оплата труда переводчиков
Переводчики А в С Б Е
Оплата труда 35000 40000 38000 45000 47000
Другим примером является задача о развозке грузов. Она моделируется так, что в целом граф О представляет сеть дорог. Одна из вершин графа представляет склад, а остальные его вершины - торговые точки (магазины, кафе и т.п.). Транспортное средство (автомобиль), покидающее склад, снабжает товарами некоторые из этих точек, получающие весь необходимый ассортимент. После этого автомобиль возвращается на склад.
Заранее с учетом практических ограничений проезда выбрано некоторое число маршрутов 1, 2, ..., _), ..., п со стоимостями Сь С2,..., Ср, ..., Сп .
Требуется определить, сколько машин следует использовать на маршрутах, чтобы в течение дня доставить все грузы со склада потребителям и обеспечить наименьшую суммарную стоимость всех замкнутых маршрутов.
В этой задаче исходное множество М - это перечень торговых точек, семейство подмножеств - перечень маршрутов, с - подсемейство маршрутов, обеспечивающих минимальное покрытие М.
Как и выше, получаем нуль-единичную матрицу, строки которой 1, 2, ..., 1, ..., т интерпретируются как торговые точки, а столбцы - как маршруты. Наличие единицы на пересечении некоторой строки и столбца в этой матрице означает, что данная торговая точка включена в соответствующий маршрут. Наличие нуля отображает тот факт, что она не входит в рассматриваемый маршрут.
Таким образом, задача сводится к тому, чтобы в указанной матрице найти то количество столбцов, которые покрывают строки матрицы и минимизируют расходы на перевозки.
Чисто формально задача о наименьшем покрытии легко представима в терминах целочисленного линейного программирования. Исходим из того, что задана нуль-единичная матрица Р = | |Ру||, строки которой 1 = 1, 2, ..., т - это индексы элементов исходного множества М, столбцы р = 1, 2, ..., п - индексы элементов семейства а элементы Ру равны единице или нулю в зависимости от того, покрывает р - й столбец 1 - ю строку или нет. Введем булевы переменные = 1, 2, ..., п такие, что Хр = 1, если _)- й столбец в искомом покрытии входит в него и хр = 0 в противном случае. С переменными хр свяжем веса
^ (в рассматриваемом примере оплаты переводчиков). В результате получаем задачу: минимизировать функцию
2 = £"=
lcjxj
при условиях
Р: =
[1, если j - й столбец покрывает 1 - ю строку, I 0 в противном случае,
[ 1, если j - й столбец входит в покрытие,
X: =<
[0 в противном случае,
ЕиРцХ: > 1, 1 = 1, 2, ..., т. При этом последнее неравенство гарантирует покрытие строк матрицы Р элементами Х:.
2. Метод решения задачи
В связи с тем, что задача целочисленного линейного программирования КР-полная, задача о наименьшем покрытии также обладает этим свойством, т.е. точно может быть решена только алгоритмами экспоненциального характера.
Первыми методами решения задачи были методы отсечения Гомори, среди которых наилучшим оказался усовершенствованный его алгоритм - алгоритм Мартина [1]. Позже для решения задачи были предложены несколько модификаций метода ветвей и границ [2,
3].
Для задач относительно небольшого размера (т < 30, п < 20) мы предлагаем простейший алгоритм ее решения - последовательной генерации и проверки сочетаний. Его действия продемонстрируем на задаче набора переводчиков.
На первом шаге сформируем все варианты пар переводчиков (А, В), (А, С), (А, Б), (А, Е), (В, С), (В, Б), (В, Е), (С, Б), (С, Е), (Б, Е) и для каждой пары установим возможность покрытия строк исходной матрицы. Если такая возможность существует больше, чем для одной пары, выбираем ту из них, которая определит наименьшие затраты и завершим поиск. В противном случае, т.е. когда покрытия парами нет, сформируем последовательность троек переводчиков (А, В, С), (А, В, Б), (А, В, Е), (А, С, Б), (А, С, Е), (А, Б, Е), (В, С, Б), (В, С, Е), (В, Б, Е), (С, Б, Е), определим возможность покрытия, в зависимости от чего завершим решение задачи или продолжим формирование состава переводчиков. Описанные действия продолжим до обнаружения первого покрывающего их сочетания. Если такого сочетания нет, задача не имеет решения. Заметим, что проверка возможности покрытия выполняется достаточно просто. В каждой строке матрицы суммируются элементы столбцов, образующих сочетание, и при обнаружении первой нулевой суммы в некоторой ее строке делается вывод о том, что данное сочетание не обеспечивает покрытие. В противном случае покрытие существует.
Применительно к данной задаче убеждаемся, что покрытие обеспечивает две тройки переводчиков: (А, В, С) и (В, С, Б) . Для первой тройки расходы равны 35000 + 40000 + 38000 = 113000 денежных единиц, для второй -40000 + 38000 + 45000 = 123000 таких единиц. Следовательно, искомым решением является прием на работу переводчиков А , В , С .
3. Оценка трудоемкости метода
Оценим сверху трудоемкость алгоритма, который легко может быть построен путем реализации описанных действий. Для этого подсчитаем количество основных операций -сложений и сравнений, - которые он будет выполнять для установления того факта, имеет ли задача решение или нет.
В связи с тем, что число вариантов двоек, троек, (п -1) - к столбцов матрицы Р равно числу сочетаний СП, СП, СП-1, всего для выбора получим С2 + СП +... + СП-1 вариантов
набора ее столбцов. В свою очередь для проверки любого варианта на покрытие в худшем случае требуется выполнить т сравнений и некоторое количество сложений, зависящее от числа элементов в сочетании. Так, для вариантов, образуемых парами столбцов матрицы р, для каждой ее строки необходимо выполнить одно сложение и одно сравнение для выявления нуля, т.е. в целом для матрицы 2т операций. Варианты, образуемые тройками столбцов, для каждой строки матрицы р требуют выполнить два сложения и одно сравнение, т.е. всего 3т операций. Варианты с (п -1) столбцами требуют выполнить п - 2 сложения и одно сравнение, т.е. (п -1) - у операцию, в каждой строке Р , а в целом для матрицы р -(п - 1)т операцию. Наконец, последний вариант с п столбцами в каждой строке Р требует выполнить п -1 сложение и одно сравнение, т.е. в целом для матрицы п • т операцию.
Таким образом, предельное количество основных операций, выраженное через чис-
ло сочетаний, следующее
2Сп + 3Сп +... + (п - 1)Сп-1 + п
т . Окончательно для полу-
чения верхней оценки числа операций, выполняемых алгоритмом, необходимо элементы приведенного выражения умножить на число операций, которое требуется выполнить для генерации одного сочетания. Согласно [4], где приводится два алгоритма построения множеств сочетаний, генерация одного сочетания потребует то число операций, которое не больше, чем значение верхнего индекса символа сочетания операций. В результате окончательно для верхней оценки получим
=
4Сп + 9Сп +... + (п - 1)2Сп-1 + п
т .
Безусловно, полученная оценка очень завышена, так как определяет то число операций, которое нужно выполнить для установления факта, существует ли решение или нет. В действительности число операций должно быть существенно меньше, поскольку предполагается, что часть задач будут иметь решения. К сожалению, найти аналитическое выражение для вычисления такого числа операций не представляется возможным, так как нельзя предсказать, сколько столбцов матрицы р определит решение. Единственная возможность установить среднее и максимальное число этих операций, а также их рост в зависимости от размера задачи - набор компьютерной статистики, ее обработка и аппроксимация полученных данных подходящей эмпирической кривой. Прикидочный расчет числа операций по приведенной формуле для задачи т = 20, п = 10 даст
(л 10! п 10! 10! 10! 101 „ 10! ^ 10! „, 10! ^
W = 1 4--+ 9--+16--+ 25--+ 36--+ 49--+ 64--+ 81--+10 |х
^ 2!-8! 3!-7! 4!-6! 5!-5! 6И! 7!-3! 8Ь2! 9! )
х 20 = (180 +1080 + 3360 + 6300 + 7560 + 5880 + 2880 + 810 +10) 20 = 28060 • 20 = 561200 операций, что вполне приемлемо для решения задач среднего размера на современных компьютерах.
В заключение решим предложенным алгоритмом задачу о наименьшем взвешенном покрытии, исходные данные (Р , С) которой приведены ниже.
Составим сочетания для всех пар столбцов матрицы р и, если пара покрывает ее строки, отметим ее знаком плюс (+), в противном случае - знаком минус (-). Имеем (1, 2)-, (1, 3)-, (1, 4)-, (1, 5)-, (1, 6)% (2, 3)-, (2, 4)-, (2, 5)-, (2, 6)-, (3, 4)-, (3, 5)-, (3, 6)% (4, 5)-, (4, 6)", (5, 6)-. В связи с тем, что пары индексов столбцов матрицы р не образуют покрытия, переходим к формированию сочетаний из трех индексов р. В результате получаем (1, 2, 3)-, (1, 2, 4)-, (1, 2, 5)-, (1, 2, 6)% (1, 3, 4)-, (1, 3, 5)", (1, 3, 6)% (1, 4, 5)+, (1, 4, 6)% (1, 5, 6)% (2, 3, 4)-, (2, 3, 5)-, (2, 3, 6)", (2, 4, 5)", (2, 4, 6) + , (2, 5, 6)% (3, 4, 5)-, (3, 4, 6)", (3, 5, 6)", (4, 5, 6)-.
1 2 3 4 5 6
1 1110 0 1
2 10 10 0 1
р = 3 0 0 0 1 0 0
4 0 10 0 1 0
5 0 0 0 0 1 1
6 110 0 0 0
С = 4 7 5 8 3 2
Таким образом, покрытие дают сочетания столбцов 1, 4, 5 со стоимостью Cj + C4 + C5 = 4 + 8 + 3 = 15 и 2, 4, 6 со стоимостью C2 + C4 + C6 = 7 + 8 + 2 = 17 , откуда оптимальное решение задачи - столбцы 1, 4, 5 матрицы P и стоимость 15. Как видим, это решение достигается при его выборе из C2 + C6 сочетаний, на что затрачивается
W = (4 • C2 + 9 • C36 + б)- 6 , т.е. не более, чем 1476 основных операций. Выводы
Научная новизна работы - получен новый алгоритм решения задачи о покрытии для задач среднего размера.
Практическая значимость - алгоритм легко программируем, в связи с чем он может быть без затруднений использован в производственных целях.
Список литературы: 1. Корбут А.А., Финкельштейн Ю.Ю. Дискретное программирование. М.: Наука, 1969. 368 с. 2. Кристофидес Н. Теория графов. Алгоритмический подход. М.: Мир, 1978. 432 с. 3. Lemke C.E., Salkin H.M., Spielberg K. Set covering by single branch enumeration with linear programming Subproblems // Oper. Res. 1971. V. 19. P. 998 - 1015. 4. Липский В. Комбинаторика для программистов. М.: Мир, 1988. 213 с.
Поступила в редколлегию 04.06.2011
Канцедал Сергей Андреевич, д-р техн. наук, профессор, зав. кафедрой финансы и кредит Западнодонбасского института экономики и управления. Научные интересы: математическое моделирование, теория расписаний и её применение. Адрес: Украина, Павлоград, ул. Днепровская, 400.
Костикова Марина Владимировна, канд. техн. наук, доцент кафедры информатики Харьковского национального автомобильно-дорожного университета. Научные интересы: математическое моделирование, теория расписаний и её применение. Адрес: Украина, 61002, Харьков, ул. Петровского, 25, тел. 707-37-74.