УДК 519.6 Дата подачи статьи: 05.12.18
DOI: 10.15827/0236-235X.125.055-062 2019. Т. 32. № 1. С. 055-062
О применении жаднъх алгоритмов в некоторъх задачах дискретной математики
В.А. Бойков к.ф.-м.н., старший научный сотрудник, vboykov@iribox.ru 1 Одинцовский филиал МГИМО МИД России, г. Одинцово, 143007, Россия
Алгоритмы, основанные на идее локальной оптимальности, кажутся естественными и являются соблазном при решении задач оптимизации. Однако задачи оптимизации, которые будут рассмотрены в данной статье, многошаговые, а получение жадными алгоритмами оптимального решения в многошаговых задачах, вообще говоря, не гарантировано. Это будет показано на примерах решения транспортной задачи, задачи о кратчайшем расстоянии между городами на заданной сети дорог и задачи коммивояжера. Объектами проведенного исследования являются жадные алгоритмы, примененные к решениям таких задач.
В работе приводится пример парадоксального решения одной транспортной задачи малой размерности. При ее решении одним из жадных алгоритмов строится план перевозок продукции. Однако этот план не является оптимальным и обладает парадоксальным свойством. А именно: по маршруту, который оказывается самым дешевым в оптимальном плане, перевозка не осуществляется. Оптимальное решение рассмотренной задачи достигается с помощью пакета Mathcad.
На примере задачи о кратчайшем расстоянии показано, что жадный алгоритм тоже не приводит к оптимальному пути. А три контрпримера на евклидовых графах показывают, что, вообще говоря, невозможно получить оптимальный маршрут даже при расчете вариантов на несколько шагов вперед.
В качестве третьего примера применения жадного алгоритма для решения задачи коммивояжера рассматривается метод ближайших городов. С его помощью описывается последовательное построение гамильтонова цикла. Приведенная версия алгоритма застрахована от получения несвязных графов в процессе решения. Далее длина полученного гамильтонова цикла используется как верхняя оценка при реализации простейшей версии метода ветвей и границ. Оптимальность полученного решения проверяется с помощью программы, выполненной в пакете Mathcad.
В рассмотренных примерах решения, полученные с помощью жадных алгоритмов, используются в качестве начального приближения для дальнейшей оптимизации целевой функции.
Ключевые слова: жадный алгоритм, транспортная задача, парадоксальное решение транспортной задачи, задача о кратчайшем расстоянии, задача коммивояжера, задача коммивояжера как задача математического программирования, метод ветвей и границ.
Впервые жадный алгоритм (greedy algorithm) - алгоритм, заключающийся в принятии локально оптимальных решений на каждом этапе, был описан в работе по комбинаторной оптимизации [1]. Поток исследований, последовавших за этой публикацией, обобщен в работах [2, 3]. Основным направлением исследования являлось выявление задач, в которых оптимальное решение получалось жадными алгоритмами. Приводилось обоснование оптимальности жадных алгоритмов для их решения. В одной из последних фундаментальных книг рассматриваются приложения жадных алгоритмов для получения оптимальных решений [4]. В частности, рассматриваются такие задачи, как планирование заданий и построение кодов Хаффмана в теории кодирования.
Пример парадоксального решения транспортной задачи
Поводом для данного исследования послужил пример парадокса, возникающего при решении одной транспортной задачи малой размерности [5].
Постановка транспортной задачи заключается в следующем. Имеются два пункта (Ai, A2) производства продукции и два пункта (Bi, B2) потребления этой продукции. Объемы производства (предложения) продукции в пунктах Ai равны ai (i = i, 2). Объемы потребле-
ния (спроса) продукции в пунктах Bj равны bj (j = 1, 2). Заданы удельные затраты на перевозку единицы продукции cij (i = 1, 2, j = 1, 2) по маршруту из пункта Ai в пункт Bj.
Обозначим xij (i = 1, 2, j = 1, 2) объем продукции, перевозимой из пункта Ai в пункт Bj.
Требуется спланировать объемы перевозок по заданным маршрутам из пунктов A 1 и A 2 в пункты B1 и B2 так, чтобы суммарные затраты на все перевозки были минимальными, то есть требуется найти такие объемы перевозок, которые обеспечивают минимум
2 2
функции: min f(X), f(X) = ££ сг]хг]. (1)
i=i j=i
Здесь Х - таблица (матрица), составленная из величин объемов перевозок по заданным маршрутам,
X =
fx X ^ X11 x12
V
x
21
При этом требуется, чтобы объемы перевозок удовлетворяли условиям
I Х11 + Х12 = а 1 ' Х 21 + Х 22 = а 2 , 1 _ 1 (2) [ Х11 + Х21 = Ь1 , Х12 + Х22 = Ь 2 >
(хг] > 0, I,} = 1, 2).
Первые два равенства означают, что вся продукция из пунктов A1 и A2 вывезена. Два равенства, записан-
ные во второй строке, означают, что в пункты В\ и В2 завезена продукция в требуемом объеме. Интерпретация условий неотрицательности на объемы перевозок очевидна.
Чтобы удовлетворить весь спрос, необходимо и достаточно, чтобы суммарный спрос был равен суммарному предложению, то есть должны выполняться условия баланса:
а\ + а2 = Ь\ + ¿2. (3)
Обсудим решение транспортной задачи жадным алгоритмом - методом минимальной стоимости (ММС), которое многим покажется естественным или интуитивно очевидным. Опишем это решение по шагам для исходных данных из [5]:
'12 16^ (5^ ( 4 Ь =
C =
8 10
a =
7
8
Шаг 1. Найдем маршрут минимальной стоимости, то есть соответствующий минимальному элементу матрицы С, а именно: шшсу = с2\ = 8; г = 2,] = \.
Тогда из пункта А2 в пункт В\ планируем перевозку: Х2\ : = ш1и(а2, Ь\} = шш{7, 4} = 4.
Пересчитываем величины спроса на продукцию и остатков продукции:
Ь\ : = Ь\ - 4 = 4- 4 = 0, а2 : = а2- 4 = 7- 4 = 3. Поскольку в пункт В\ продукция завезена полностью, из пунктаА\ в пункт В\ уже ничего везти не надо. Поэтому полагаем Х\\: = 0.
Итак, в матрице перевозок Х остаются незаполнен-
( 0
ными элементы второго столбца Х\2, х22; X =
Шаг 2. Как и на первом шаге, в матрице С найдем минимальный элемент, соответствующий этим перевозкам, то есть шш{с\2, С22} = шт{16, 10} = 10 = С22; г = 2, ] = 2.
Это означает, что из пункта А2 в пункт В2 планируем перевозку по тому же правилу: Х22 : = ш1и{а2, ¿2} = шш{3, 7} = 3. Пересчитываем величины спроса на продукцию и остатков продукции:
¿2 : = ¿2 - 3 = 8 - 3 = 5, а2 : = а2 - 4 = 3 - 3 = 0. В матрицу перевозок Х записываем найденную перевозку х22 = 3. Остается незаполненным элемент х\2; '0 4
X =
V
Шаг 3. Минимальный элемент матрицы С, соответствующий незаполненному элементу матрицы Х, есть элемент с\2. Элемент х\2 заполняем по тому же правилу: х\2: = шш{а\, ¿2} = шт{5, 5} = 5.
Пересчитываем величины спроса на продукцию и остатков продукции:
¿2 : = ¿2 - 5 = 5- 5 = 0, а\ : = а\ - 5 = 5 - 5 = 0.
Как видим, вся продукция из пунктов А\ и А 2 вывезена в тех объемах, в которых она там произведена. В пункты В\ и В2 завезено столько продукции, сколько требовалось. Это свойство следует из равенства суммарного спроса и суммарного предложения (3).
Получили план перевозок, который обозначим как
J0 5
xммс = 43
Вычислим суммарные затраты на запланированные объемы перевозок: fXMMc) = сц-хц + с12-Х12 + + с21-Х21 + с22-Х22 = 12-0 + 16-5 + 8-4 + 10-3 = 142.
Описанный метод получения плана перевозок называется ММС.
Проверим оптимальность решения задачи. Продемонстрируем, как легко и наглядно получается наилучший план перевозок с использованием математического пакета Mathcad. Приведем решение рассмотренной транспортной задачи в Mathcad (табл. 1).
Таблица 1
Программа Mathcad. Решение транспортной задачи
Table 1
Mathcad. The solution of a transportation problem
Оператор Mathcad Комментарий
ORIGIN := 1 Встроенная функция Mathcad, задающая минимальные значения индексов матрицы
C : = a : = ' 12 16) V 8 10 J 5 ) 4 4 ) Исходные данные транспортной задачи
f (X): =1 i ( Cj - Xj ) i=i j=i Формула вычисления суммарных транспортных затрат
X:= ( 11 12 1 ^21 22) Начальное приближение для значений элементов матрицы перевозок (могут быть любыми числами)
Given Начало блока решения задач
X 1,1 + X 1,2 = a1 X2,1 + X2,2 = a 2 X > 0 X 1,1 + X 2,1 = b1 X 1,2 + X 2,2 = b 2 Ограничения для транспортной задачи. Неравенство означает, что все элементы матрицы Х больше или равны нулю
X t: = Minimize(f, X) Xopt =[ 0 7 ] Вызов функции Minimize, которая находит такую матрицу Х, которая минимизирует функцию f Xopt := присвоение оптимальной матрицы
f(Xopt) = 134 Вычисление значений суммарных затрат для матрицы перевозок Xopt
Обратим внимание, что значение суммарных затрат на перевозку грузов по плану, построенному пакетом МаШса^ получилось меньше, чем при решении ММС, а именно:.ДАТммс) = М2 > Ш = ^хс?)
Кроме того, в оптимальном плане перевозок перевозка по маршруту минимальной стоимости не осуществляется (с2\ = 8, но х О? = 0).
V
V
V
Проверим, действительно ли решение, полученное компьютером, оптимальное. Для вычислителей, использующих компьютер для решения каких-либо задач, возникает вопрос о достоверности ответа.
Для этого часто используются необходимые и достаточные условия оптимальности. Условия оптимальности для транспортной задачи с т пунктами производства продукции и п пунктами потребления продукции приведены ниже.
Теорема [6]. Для оптимальности плана перевозок
х =
в транспортной задаче необхо-
димо и достаточно, чтобы существовали числа и и Vу (г = 1, т , ] = 1, п ), называемые потенциалами, такие, чтобы выполнялись условия:
а) для х *. > 0 выполняются равенства щ + vу = су
б) для остальных х*■ выполняются неравенства
и + Vу < Су.
Проверим, является ли найденный план ХммС оптимальным. В данном случае т = 2, п = 2.
Заметим, что неизвестных четыре (и1, и2, v1, v2), а положительных перевозок в плане три (х11 = 4, Х12 = 1, Х22 = 7). То есть условия а) задают систему трех линейных уравнений (по количеству положительных перевозок) с четырьмя неизвестными. Общее решение такой системы линейных уравнений зависит от одной переменной, значения которой можно назначать произвольно.
Составим систему линейных уравнений а) для полученного плана Хор1, выданного компьютером:
для х11 = 4 > 0 запишем уравнение и1 + у1 = с11 = 12, для х12 = 1 > 0 запишем уравнение щ + у2 = с12 = 16, для х22 = 7 > 0 запишем уравнение и2 + у2 = с22 = 10.
Положив в 1-м и 2-м уравнениях и1 = 0, получаем потенциалы v1 = 12, v2 = 16. Из третьего уравнения следует и2 = 10 - v2 = 10 - 16 = - 6.
Проверим условие б) для нулевой перевозки х21 = 0. Оказывается, что и2 + VI = - 6 + 12 = 6 < с21 = 8. Это означает, что данный план перевозок Хор! является оптимальным в рассматриваемой транспортной задаче, то есть минимизирует суммарную стоимость перевозок.
Итак, выяснили, что ММС не дает оптимального решения транспортной задачи сразу. Этот метод используется лишь для получения начального плана перевозок, который затем по шагам преобразуется в оптимальный план специальными вычислительными методами, например, методом потенциалов [7].
В чем же парадокс решения транспортной задачи? План перевозок строился по принципу - на каждом шаге выбирается перевозка по маршруту, соответствующему минимальной стоимости, однако ММС (жадный алгоритм) не дал оптимального решения.
Таким образом, очевидно, что имеются такие транспортной задачи, оптимальное решение которых не дает маршрут минимальной стоимости. В рассмотренном примере такой маршрут один - х21.
Применение жадных алгоритмов в задаче о кратчайшем пути
Рассмотрим пример (рис. 1). Пусть имеются 10 городов. Номера городов на схеме указаны в кружках. Стрелки означают дороги (пути возможных переходов из города в город), а числа над/под стрелками - длины соответствующих дорог (расстояния между городами). Требуется найти кратчайший путь из города 1 в город 10.
Рис. 1. Сеть дорог Fig. 1. Road network
Попытаемся решить эту задачу жадным алгоритмом - методом ближайшего города (МБГ) (рис. 2). Маршрут № 1, полученный этим методом, на рисунке обозначен жирными стрелками.
10
Рис. 2. Маршрут № 1 Fig. 2. Route no. 1
Длина пройденного пути
^МБ1 = 2 + 4 + 3 + 4 = 13.
Эту же задачу можно решить, например, методом динамического программирования Р. Беллмана [8].
Оптимальные последовательности прохождения городов (маршруты 2, 3, 4 соответственно) представлены на рисунке 3.
8 f" =п ^ к = 11
1<Л f:= 11
Рис. 3. Маршруты 2, 3, 4 Fig. 3. Routes no. 2, 3, 4
Справа от оптимальных траекторий выписаны оптимальные значения Р*2, Р*ъ, суммарных пройденных расстояний по соответствующим маршрутам.
Итак, с помощью жадного алгоритма МБГ не удалось сразу получить оптимальный маршрут для перехода из города 1 в город 10 (13 = ^1МБГ > ^ = 11).
Для выяснения природы этого явления продемонстрируем несколько геометрических контрпримеров, показывающих, что расчет вариантов даже на несколько шагов вперед (но не до конца), вообще говоря, не приводит к оптимальному решению.
Рассмотрим задачу о поиске кратчайшего пути из точки А в точку В по сети дорог, соединяющих конечное множество заданных точек.
Контрпример 1. Даны точки А, В, С, М, соединенные дорогами, которые обозначены сплошными линиями (рис. 4). Пунктирный отрезок АВ не входит в заданную сеть дорог. Требуется найти кратчайший путь из точки А в точку В. Действуя жадным алгоритмом, из точки А переходим в ближайшую точку С и проигрываем, так как, несмотря на то, что АС < АМ, выполняется неравенство АС + СМ + МВ > АМ + МВ.
Рис. 4. Сеть дорог контрпримера 1 Fig. 4. The road network of the counterexample 1
Жадных решателей не спасает и алгоритм расчета на два хода вперед.
Контрпример 2. Заданы точки А, В, С, A, D2, М, соединенные дорогами, которые обозначены сплошными линиями (рис. 5). Пунктирный отрезок АВ не входит в заданную сеть дорог. Требуется найти кратчайший путь из точки А в точку В по существующей сети дорог. Рассмотрим сеть дорог, такую, что
ADi + D1D2 < AC + CM, (4)
но ADi + D1D2 + D2M + MB > AC + CM + MB. (5)
Рис. 5. Сеть дорог контрпримера 2 Fig. 5. The road network of the counterexample 2
Жадный решатель, находящийся в точке А , вычисляет сумму расстояний на два хода вперед. Убеждается, что выполняется неравенство (4), осуществляет переход из точки А в точку D2 и, очевидно, проигрывает по сумме пройденного расстояния из точки А в точку В (см. неравенство (5)).
Жадных решателей не спасает и алгоритм расчета на п (п > 2) ходов вперед.
Контрпример 3. Заданы точки А, А, Б2, ..., Бп-1,
Dn, М, В, Ci, C2,
Cn-1, соединенные дорогами
(рис. 6). Дороги обозначены сплошными линиями, пунктирами - дороги из точки D2 в Dn-1 и из точки C2 в Cn-1. Пунктирный отрезок АВ не входит в заданную сеть дорог. Требуется найти кратчайший путь из точки А в точку В по существующей сети дорог. По аналогии с предыдущими примерами построим такую сеть дорог, что выполняются два неравенства: AD1 + D1D2 + ... + Dn-1 Dn < < AC1 + C1C2 + ... + C—M, (6)
но AD1 + D1D2 + ... + Dn-1Dn + DnM + MB > > AC1 + C1C2 + ... + Cn-1M + MB. (7)
D D-1 J^.................. Dn
D1 (
'Ci G " 1 m A *------------------------\ в
Рис. 6. Cеть дорог контрпримера 3 Fig. 6. The road network of the counterexample 3
И в этом случае жадный решатель, находящийся в точке А, вычисляет сумму расстояний на п ходов вперед, убеждается, что выполняется неравенство (6), и осуществляет переход из точки А в точку Dп и, очевидно, проигрывает по сумме пройденного расстояния из точки А в точку В (см. неравенство (7)).
Рассмотренная задача поиска кратчайшего пути имеет переборный характер. Математики-вычислители постоянно работают над специальными алгоритмами решения таких задач для большого количества точек. Практика решения этих задач показывает, что идеи так называемых жадных алгоритмов, вообще говоря, не проходят.
Использование жадного алгоритма в задаче коммивояжера
Постановка задачи коммивояжера. Имеются n городов (точек). Задана матрица расстояний между городами C[nxn] = (cij), где Cj- расстояние между городами i и j (i, j = 1, n ). Выехав из одного города, коммивояжер должен побывать во всех остальных городах по одному разу и вернуться в исходный город, то есть маршрут должен быть замкнутым. Такие маршруты называются гамильтоновыми циклами.
Требуется найти такой гамильтонов цикл, который минимизирует пройденный путь.
Суммарное пройденное расстояние по гамильто-нову циклу и требование его минимизации можно записать в виде
(8)
Ci i + Сi i
+ ... + C, ,
2'3 'n-l'n
+ c,- , ^ mm
l nh
Минимум ищется по всем перестановкам (/1, /2, ..., /п) номеров городов (1, 2, ..., п). Количество таких перестановок равно п!. Количество различных гамильто-новых циклов в п раз меньше, то есть (п - 1)!.
При достаточно больших значениях п решение задачи коммивояжера, основанное на методе полного перебора, становится проблематичным. Поэтому представляют интерес методы решения задачи коммивояжера, не связанные с полным перебором вариантов.
Формализация задачи коммивояжера как задачи математического программирования
Введем переменные, отражающие факт перехода из точки / в точку j:
¿г/ Г 1, если коммивояжер из точки (
х^ = < переезжает в точку у, (9)
[ 0 в противном случае,
где I, у = .
Тогда задача ставится следующим образом [9].
Найти значения булевых переменных Ху, которые удовлетворяют условиям
ш1п/(X), /(X) = ± ±0^, (10)
i = 1 j = 1 с ограничениями вида
n _
^ Xj- = 1 для всех i = 1, n ;
j = 1
n _
^ x^ = 1 для всех j = 1, n ; i = 1
(11) (12) (13)
Cij > 0 и,
u, - и ,+ n • x,.,. < n -1; i, j = 2, n ; i ф j
i j ¡j J J ■
Будем считать, что все вц = -+», i = 1, п ,
вообще говоря, c,j ф j
Ограничения (11) и (12) означают, что из каждой точки можно выйти и войти в каждую точку ровно один раз. Ограничения (13) гарантируют невозможность распадения гамильтонова цикла на несвязные циклы.
Задача (9)—(13) представляет собой задачу булева линейного программирования.
Используя эту формализацию, решим задачу коммивояжера с помощью математического пакета Mathcad (табл. 2). Пусть задана матрица расстояний между четырьмя городами (n = 4).
Замечание. Поскольку оптимальные значения элементов матрицы X = Xopt получились булевыми, ограничения (9) выполнились автоматически.
Рассмотрим решение задачи методом ветвей и границ [10]. Для решения задачи коммивояжера этот метод был предложен в 1963 году американскими математиками Литтл, Мурти и др. (Little, Murty, Sweeney, Karel).
Идея метода ветвей и границ применительно к задаче коммивояжера проста.
Табица2
Программа Mathcad. Решение задачи коммивояжера
Table 2
Mathcad. The solution of the traveling salesman problem
Оператор Mathcad
ORIGIN := 1
w : = 1013 C : -
X :
3 w 3 7
1 16
4 3
w 9 6w
f 0 0 0 0 1 f 01
0 0 0 0 и : = 0
0 0 0 0 0
0 0 0 7 8
Исходные данные: С - матрица расстояний между городами; ж - большое число; X - начальное значение матрицы исходных маршрутов; и -вспомогательные переменные
f ( *. « ) : =Z Z ( Cij-Xj )
i - 1 j - 1
Формула вычисления суммарной длины га-мильтонова цикла для матрицы маршрутов Х - формула (9)
Given
il
и г — и 2 + 4 X 2 , 2 <3
из — и 2 + 4 • X 3 , 2 <3
и а — и 2 + 4 X 4 , 2 <3
4 Z( Xт Г i-1 > -1
X > 0
v : = Minimize( f, X , и ) ■
f ( X opt, v 2 ) = 14
{ 4,4 } { 4, 1 }
f 0 1 0 0 1
0 0 0 1
1 0 0 0
„ 0 0 1 0,
M : = Ct,3 + C3,2 + C2,4 + C4,1 = 15
Комментарий
Встроенная функция Mathcad, задающая минимальные значения индексов матрицы
Начало блока решения задач
Ограничения (10)-(12) для задачи коммивояжера без условий булевости элементов матрицы X (п = 4, п - 1 = 3)
Вызов функции Minimize, находящей такую матрицу Х, которая минимизирует функцию f Xopt := присвоение оптимальной матрицы маршрутов. Вычисление значений суммарной длины оптимального гамильто-нова цикла (Xopt)_
Вычисление значений суммарной длины оптимального гамильто-нова цикла, полученного МБГ
Ветвление основано на следующем соображении: проезд из любого города / в любой другой город j может либо принадлежать оптимальному циклу, либо не
2 - « з + 4 X X 2,3 < 3
и
и3 -и3 + 4• X3 3 < 3
и3 +4• X.з < 3
и
2 - и 4 + 4 • X 2 4 < 3
и
и3 — и4 + 4• X3 . < 3
и 4 + 4 • X 4 4 < 3
и
принадлежать. В процессе решения необходимо сделать вывод - принадлежит ли путь из города i в другой город j оптимальному циклу. Для этого используется понятие границы, которая позволяет сделать отсев неперспективных гамильтоновых циклов. Этот прием часто позволяет избежать полного перебора вариантов, то есть уменьшить количество вычислений. Однако метод ветвей и границ не гарантирует, что процесс решения задачи коммивояжера не сведется к полному перебору всех возможных гамильтоновых циклов.
Изложим идею метода ветвей и границ с использованием аналога метода минимальной стоимости для решения транспортной задачи. Для задачи коммивояжера аналог этого метода - МБГ.
Первый этап. Построение гамильтонова цикла с помощью МГБ.
Шаг 1. В матрице С найдем минимальный элемент. В данном случае mincj = en = 1 (i = 1, j = 3). Это означает, что для первого города ближайшим к нему является третий город. Составим список городов, в которых уже побывали, A ={1, 3}, и список городов, в которых еще не были, B ={2, 4}.
Очевидно, A u B = {1, 2, 3, 4} - множество всех городов. Контролировать состояние двух списков необходимо для предотвращения преждевременного возвращения в исходный город.
Шаг 2. Из третьего города переходим в ближайший город среди тех городов, в которых еще не были. Находим mm c^. = c32 =3 (j = 2), то есть из третьего
города переходим во второй.
Обновляем списки городов А и В: A ={1, 3, 2}, B = {4}.
Шаг 3. Из второго города переходим в ближайший город среди тех городов, в которых еще не были. Находим min c2j = c24 = 8 (j = 4), то есть из второго города переходим в четвертый.
Обновляем списки городов А и В: A ={1, 3, 2, 4}, B = {0}.
Шаг 4. Из четвертого города переходим в первый, так как все города пройдены (множество В не содержит элементов), то есть наступил момент возвращения в исходный город.
Шаг 5. Подсчитываем длину l пройденного пути по построенному маршруту (1, 3, 2, 4): 1(1, 3, 2, 4) = = С13 + С32 + С24 + С41 = 1 + 3 + 3 + 8 = 15. M: = 15.
Число М объявим верхней границей для искомой минимальной длины гамильтонова цикла.
Очевидно, что минимум среди всех длин гамильто-новых циклов удовлетворяет неравенству
minI Сии
+ С i i
ii
+ С i i + С i i
i 3 i 4 i 4 i
1)
< M.
Итак, с помощью МБГ найдена оценка сверху для оптимального значения целевой функции.
Второй этап. На втором этапе решения задачи коммивояжера продемонстрируем алгоритм метода вет-
вей и границ, использующий найденную границу как критерий отсева неперспективных гамильтоновых циклов. Изобразим перебор вариантов ветвления схематично (рис. 7).
M: = 15
Рис. 7. Алгоритм ветвления Fig. 7. Branching algorithm
На рисунке 7 представлено дерево ветвления вариантов построения гамильтоновых циклов.
Левая ветка дерева построена с помощью МБГ. Начав движение из города 1, последовательно переходим через города 3, 2, 4 и, пройдя все города, возвращаемся в начальный город 1. При этом вычисляем длину пройденного пути (гамильтонова цикла). Она равна 15.
Эту величину принимаем за оценку сверху (границу) для дальнейшего перебора вариантов (M = 15).
Рассмотрим ветку построенного дерева (1 ^ 3 ^ ^ 4 ^ 2). При этом на каждом переходе от города к городу вычисляем накопленную сумму пройденного пути (l = 1 + 9 + 7 = 17 > M ^ stop). Поскольку получена величина, большая оценки сверху, дальнейшее продолжение этого маршрута нецелесообразно.
Следующая ветка для рассмотрения (1 ^ 4). Для этой ветки имеем (l = 16 > M ^ stop), потому и ее отбрасываем как неперспективную.
Рассмотрим ветку дерева (1 ^ 2 ^ 3 ^ 4). Для нее получаем (l = 3 + 4 + 9 = 16 > M ^ stop). Снова отбрасываем ветку как неперспективную.
Осталась последняя ветка дерева (1 ^ 2 ^ 4 ^ ^ 3 ^ 1). Обратим внимание, что накопленная сумма пройденных расстояний равна (l = 3 + 3 + 6 + 2 = 14 < < M ^ opt). В этом случае оказалось, что установлен рекорд - сумма пройденного пути меньше предыдущего рекорда.
Обновляем величину рекорда (верхняя граница) (M: = l = 14). Если бы дерево вариантов имело больше веток, для отсева неперспективных вариантов использовалось бы уже обновленное значение верхней границы. Поскольку рассмотрены все варианты, последний гамильтонов цикл оптимальный.
Заметим, что при последовательном переборе вариантов циклов в данном примере не пришлось строить все циклы до конца и вычислять их длину. В этом достоинство метода ветвей и границ. Существенным является получение хорошей оценки (границы) для оптимального значения длины гамильтонова цикла. Это позволяет как можно раньше отсекать неперспективные ветки дерева вариантов (гамильтоновы циклы) и тем самым уменьшать объем вычислительной работы.
В данном примере жадный алгоритм (МБГ) дал неплохую верхнюю границу длины гамильтонова цикла.
Оценим выигрыш от применения данного метода для решения рассмотренной задачи коммивояжера. Будем считать, что трудоемкость решения задачи определяется количеством сложений для вычисления длины цикла. Количество сложений при полном переборе вариантов равно количеству дуг графа 4! = 24. В рассматриваемом случае затрачено 16 сложений, что составляет примерно 66,7 % от общего числа вариантов. Однако метод ветвей и границ не дает гарантии, что не придется осуществлять полный перебор вариантов.
Рассмотренные примеры показывают, что решение оптимизационных многошаговых задач не является тривиальной задачей и интуитивно очевидные жадные алгоритмы редко приводят к оптимальным решениям
без дополнительных вычислительных процедур. Для решения рассмотренных задач используются специальные математические алгоритмы и программы, широко применяемые в прикладных задачах. При этом жадные алгоритмы часто используют для получения начального приближения к оптимальному решению.
Литература
1. Edmonds J. Matroids and the greedy algorithm. Math. Programming, 1971, vol. 1, no. 2, pp. 127-136.
2. Пападимитриу Х., Стайглиц К. Комбинаторная оптимизация: Алгоритмы и сложность; [пер. с англ.]. М.: Мир, 1984. 510 с.
3. Дасгупта С., Пападимитриу Х., Вазирани У. Алгоритмы; [пер. с англ.; под ред. А. Шеня]. М.: МЦНМО, 2014. 320 с.
4. Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ; [пер. с англ.]. М.: Вильямс, 2013. 1328 с.
5. Очков В.Ф., Богомолова Е.П., Иванов Д.А. Физико-математические этюды с Mathcad и Интернет. СПб: Лань, 2016. 388 с.
6. Юдин Д.Б., Гольштейн Е.Г. Задачи и методы линейного программирования. Задачи транспортного типа. М.: Либроком, 2010. 184 с.
7. Грешилов А.А. Прикладные задачи математического программирования. М.: Логос, 2006. 288 с.
8. Беллман Р. Динамическое программирование; [пер. с англ.; под ред. Н.Н. Воробьева]. М.: Иностран. лит-ра, 1960. 400 с.
9. Костевич Л.С., Лапко А.А. Исследование операций. Теория игр. Минск: Выш. шк., 2008. 368 с.
10. Таха Х.А. Введение в исследование операций; [пер. с англ.]. М.: Вильямс, 2005. 912 с.
Software & Systems Received 05.12.18
DOI: 10.15827/0236-235X.125.055-062 2019, vol. 32, no. 1, pp. 055-062
On the application of greedy algorithms in some problems of discrete mathematics V.A. Boykov l, Ph.D. (Physics and Mathematics), Senior Researcher, vboykov@inbox.ru 1 Odintsovo branch of MGIMO University, Odintsovo, 143007, Russian Federation
Abstract. The algorithms that are based on the idea of local optimality seem natural and tempting when solving optimization problems. However, the optimization problems discussed in the paper are multistage. In this case, the obtaining an optimal solution in a multistage problem by greedy algorithms is not guaranteed generally. This fact is demonstrated by the examples of solving a transport problem, the problem of the shortest distance between cities on a given road network, and the traveling salesman problem.
The research objects are greedy algorithms applied to solving the same problems described in this paper.
The paper gives an example of a paradoxical solution of a small dimension transportation problem. When solving the problem, one of greedy algorithms constructs a product transportation plan. However, this plan is not optimal and has a paradoxical property. Namely, no transportation by the route that is the cheapest in the optimal plan. The optimal solution of the considered problem is given by mathematical package Mathcad.
The fact that the greedy algorithm does not show the optimal path is shown on the example of the shortest distance problem. Three counterexamples on Euclidean graphs show that it is impossible to obtain an optimal route even when calculating options several steps ahead.
The third example of applying the greedy algorithm to solve the traveling salesman problem is the nearest city method. The method describes the sequential construction of the Hamiltonian cycle. The above version of the algorithm is secured from obtaining non-connected graphs during a solution process. Further, the length of the Hamiltonian cycle is used as an upper bound when implementing the simplest version of the branch and bound method. The program made in Mathcad checks the optimality of the obtained solution.
In the considered examples, the solutions obtained by greedy algorithms are used as an initial approximation for further optimization of the target function.
Keywords: greedy algorithms, transport problem, paradoxical solution of the transport problem, shortest distance problem, traveling salesman problem, traveling salesman problem as a mathematical programming problem, branch and bound method.
References
1. Edmonds J. Matroids and the greedy algorithm. Math. Programming. North-Holland Publ. Co. 1971, vol. 1, no. 2, pp. 127-136.
2. Papadimitriou Ch.H., Steiglitz K. Combinatorial optimization: Algorithms and Complexity. Dover Publ., 1998, 528 p. (Russ. ed.: Moscow, Mir Publ., 1984, 510 p.).
3. Dasgupta S., Papadimitriou Ch.H., Vazirani U. Algorithms. Science Engineering & Math Publ., 2011, 336 p. (Russ. ed.: Shen A. Moscow, MCCME Publ., 2014, 320 p.).
4. Cormen Th.H., Leiserson Ch.I., Rivest R.L., Stein Cl. Introduction to Algorithms. 3rd ed., The MIT Press, 2009, 1312 p. (Russ. ed.: Moscow, Vilyams Publ., 2013, 1328 p.).
5. Ochkov V.F., Bogomolova E.P., Ivanov D.A. Physics and Mathematics with Mathcad and the Internet. St. Petersburg, Lan Publ., 2016, 388 p.
6. Yudin D.B., Golstein E.G. Problems and Methods of Linear Programming. Transport Problems. Moscow, Librokom Publ., 2010, 184 p.
7. Greshilov A.A. Applied Problems of Mathematical Programming. 2nd ed., Moscow, Logos Publ., 2006, 288 p.
8. Bellman R.E. Dynamic Programming. Princeton Univ. Press, 1957 (Russ. ed.: Moscow, 1960, 400 p.).
9. Kostevich L.S., Lapko A.A. Operations Research. Game Theory. 2nd ed., Minsk, Vysh. shk. Publ., 2008, 368 p.
10. Taha H.A. Operations Research: An Introduction. 7th ed. Prentice Hall, 2002 (Russ. ed.: Moscow, Villiams Publ., 2005, 912 p.).
Примеры библиографического описания статьи
1. Бойков В.А. О применении жадных алгоритмов в некоторых задачах дискретной математики / / Программные продукты и системы. 2019. Т. 32. № 1. С. 55-62. DOI: 10.15827/0236-235X.125.055-062.
2. Boykov V.A. On the application of greedy algorithms in some problems of discrete mathematics. Software & Systems. 2019, vol. 32, no. 1, pp. 55-62 (in Russ.). DOI: 10.15827/0236-235X.125.055-062.