2к4с Исследование операций / Конспект лекций
.pdf
Ориентированным графом (орграфом) называется пара конечных множеств (V, A), где V
– множество вершин, и A {(i, j)|i, j V } – множество упорядоченных пар вершин, где (i, j) A называется дугой.
Мультиграфом (ориентированным мультиграфом) называется граф с кратными ребрами
(кратными дугами).
Примеры: рисунки графов с 3 вершинами.
Определения. Вершина i является начальной, а вершина j – конечной вершиной дуги (i, j). При этом i и j – смежные вершины, а дуга (i, j) инцидентна вершинам i и j. Такая же терминология используется для неориентированных графов – смежные вершины и инцидентные ребра. Дуга (i, j) выходит из i и входит в j. Если (i, j) – дуга, то i назы-
вается непосредственным предшественником j, а j – непосредственным последователем i. Количество дуг, входящих в вершину i называется степенью захода этой вершины, а количество дуг, выходящих из вершины i называется степенью исхода этой вершины. В неориентированном графе вершины i и j называются концами ребра {i, j}. Количество ребер, инцидентных вершине i, называется степенью вершины i.
Маршрутом в неориентированном графе G = (V, E) называется такая последовательность вершин W = (v0, v1, . . . , vk), k ≥ 0, что {vi−1, vi} E, i = 1, . . . , k. Граф называется
связным, если существует маршрут, связывающий любые его две вершины. Говорят, что маршрут W связывает вершины v0 и vk, а вершины v1, . . . , vk−1 являются внутренними вершинами этого маршрута. Количество вершин маршрута называется его длиной. Маршрут W называется замкнутым, если k > 0 и vk = v0. Маршрут называется цепью, если в нем нет повторяющихся вершин. Замкнутый маршрут, в котором никакие вершины, кроме первой и последней, не повторяются, называется циклом.
Аналогами приведенных выше определений для орграфов являются следующие.
Граф |
Маршрут |
Цепь |
Цикл |
Орграф |
Путь |
Простой путь |
Цикл |
Цикл, который включает все вершины графа, называется гамильтоновым. Граф, который содержит гамильтонов цикл, называется гамильтоновым.
Замкнутый маршрут, который включает каждое ребро графа ровно один раз, называется эйлеровым маршрутом, а граф, который содержит такой маршрут, называется эйлеровым графом. Задачу, является ли граф эйлеровым, впервые поставил и решил Эйлер. В 1736 г. он писал: ”В городе Кенигсберге есть два острова, которые соединяются между собой и с берегами реки семью мостами (см. Pис. 3).
|
b |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d |
Рис. 3: Граф "Кенигсбергские мосты". a и c - острова, b и d - берега.
21
Можно ли спланировать прогулку так, чтобы, начиная с одного из 4 участков суши a, b, c, d, пройти по каждому из этих мостов один раз и вернуться в начальный пункт?
Теорема 3 (Эйлер, 1736 г) Связный мультиграф является эйлеровым тогда и только тогда, когда все его вершины имеют четную степень.
4.2Алгоритм построения эйлерова цикла для неориентированного графа
Шаг 0. Проверяем, является ли граф G = (V, E) связным и четны ли степени его вершин. Если это не так, эйлерова цикла не существует.
Шаг 1. Выбираем произвольную вершину v1 и полагаем частичный эйлеров цикл C = {v1}. В графе G будем двигаться от некоторой вершины частичного цикла и помечать пройденные ребра. Помеченное ребро будем включать в эйлеров цикл. Полагаем i = 1.
Шаг 2. Двигаемся от вершины vi по непомеченным ребрам и помечаем их до тех пор, пока не вернемся в vi. Пусть при этом построен цикл C.
Цикл C включаем в C так, что вначале идут ребра C до вершины vi, затем ребра цикла C и затем оставшиеся ребра C .
Если все ребра исходного графа помечены, то эйлеров цикл построен. Если есть непомеченные ребра, то существует вершина vj C , которая является концом непомеченного
ребра. Пусть vj – последняя из таких вершин, входящая в C .
Шаг 3. Удаляем из графа ребра цикла C. Полагаем i = j и переходим к Шагу 2, т.е. строим новый цикл на непомеченных ребрах, начиная с вершины vj . 
Примеры. Два треугольника, имеющие общую вершину. Два четырехугольника, имеющие общую сторону, вершины которой дополнительно соединены цепью.
4.3Задание графов
Матрицей смежности графа G = (V, E) называется матрица A = ||aij ||n×n с элементами
aij = 1, если {i, j} E, и aij = 0, если {i, j} / E. Для мультиграфов aij равно кратности ребра {i, j}.
Аналогично вводится матрица смежности для орграфов. Для неориентированных графов матрица смежности полностью определяется своей правой верхней либо левой нижней треугольной подматрицей, поскольку aij = aji для всех i и j.
Орграфы могут быть также представлены одним или несколькими списками непосредственных последователей A0(i) и непосредственных предшественников B0(i) каждой вершины i.
4.4Топологическая сортировка
Предположим, что фирме необходимо выполнить n проектов, на множестве V = {1, . . . , n}
которых задано отношение предшествования → такое, что из i → j следует, что проект j не может начаться раньше, чем закончится проект i (проект j использует информацию или
22
продукцию, получаемую в результате выполнения проекта i). Нужно найти допустимый порядок выполнения проектов во времени.
Рассмотрим орграф G = (V, A) отношения предшествования. Дуга (i, j) A тогда и только тогда, когда i → j.
Решение задачи существует, если орграф отношения порядка не содержит циклов. Если есть цикл, то ни один из проектов, принадлежащих циклу, нельзя начинать.
Пусть перестановка (i1, . . . , in) определяет порядок выполнения проектов. Этот порядок является допустимым, если из ij → ik следует, что ij предшествует ik в указанной пере-
становке.
Введем понятие номера вершины – label(i) {1, . . . , n}. Задача сводится к отысканию нумерации вершин графа G такой, что из (i, j) A следует label(i) < label(j). Тогда последовательность проектов в порядке возрастания их номеров label(i) будет являться решением задачи. Указанная нумерация называется топологической сортировкой вершин графа.
Алгоритм топологической сортировки. |
|
Предположим, что граф задан списками непосредственных последователей A0(i), |
i = |
1, . . . , n, и, кроме того, задано количество непосредственных предшественников bi |
каж- |
дой вершины i : b = |B0(i)|. |
|
i |
|
Шаг 1. Просматриваем список (b1, . . . , bn) и создаем список J = {j|bj = 0} вершин, у которых нет предшественников. Если J = φ, то в графе есть цикл.
Шаг 2. Присваиваем текущий номер j (вначале j = 1) любой вершине из J. Далее рассматриваем всех ее непосредственных последователей i A0(j) и преобразуем bi = bi − 1.
Если bi = 0, то вершину i включаем в J. После того, как все множество A0(j) просмотрено, удаляем j из J. Если текущий номер не равен n, увеличиваем его на единицу. Повторяем Шаг 2. 
4.5 Остовное дерево (остов) минимального веса
Граф, не имеющий циклов, называется лесом. Связный граф, не имеющий циклов, назы-
вается деревом.
Пусть n и m – количества вершин и ребер графа соответственно.
Теорема 4 (Свойства деревьев) Пусть G – неориентированный граф. Тогда следующие условия эквивалентны:
1)G – дерево,
2)G – связный граф и m = n − 1,
3)G – граф без циклов и m = n − 1,
4)между любой парой вершин существует единственная цепь,
5)G не имеет циклов, но при добавлении произвольного ребра в G в нем возникает единственный цикл.
В ориентированном графе вводятся понятия входящего и выходящего дерева. Это орграф, неориентированный аналог которого является деревом, и, в случае выходящего дерева, в каждую вершину входит не более одной дуги, а
23
в случае входящего дерева, из каждой вершины выходит не более одной дуги. Единственная вершина выходящего дерева, в которую не входит ни одна дуга, называется
корнем.
Подграф неориентированного графа G = (V, E) называется остовным деревом (остовом) и обозначается T , если T – дерево и множество его вершин совпадает с V.
Граф называется (реберно) взвешенным, если каждому его ребру {i, j} приписан некоторый вес wij .
Весом остовного дерева называется сумма весов всех его ребер.
Задача поиска в графе остовного дерева минимального |
веса имеет много приложений. |
Она возникает при проектировании дорог, электрических |
сетей, трубопроводов и т.п., т.е. |
в ситуациях, когда необходимо связать заданное множество объектов коммуникационными линиями и суммарная стоимость этих линий должна быть минимальна.
Ниже приводятся два алгоритма, которые строят остовное дерево минимального веса Tn−1. не содержит циклов и имеет n − 1 ребер.
Алгоритм Краскала
Шаг 1. Полагаем T0 = (V, φ), |V | = n.
Шаг 2. Для i = 0, . . . , n − 1 полагаем Ti+1 = Ti e, где e – ребро G с минимальным весом такое, что оно не является ребром Ti и не образует цикла с ребрами Ti. 
Алгоритм Прима
Шаг 1. Полагаем T1 = (V1, E1), где V1 = {a, b}, E1 = {a, b}, и wab = min{we|e E}.
Шаг 2. Для i = 1, . . . , n − 1 полагаем Ti+1 = Ti e, где e – ребро G с минимальным весом такое, что оно не является ребром Ti и связывает Ti с вершиной G, не принадлежащей Ti.
Пример. Любой неориентированный реберно взвешенный граф.
4.6Кратчайшие пути
Рассмотрим орграф со взвешенными дугами и путь из вершины i в вершину j в этом графе. Сумма весов дуг этого пути называется его длиной. Путь минимальной длины из i в j называется кратчайшим путем из i в j.
Дейкстра предложил следующий алгоритм построения кратчайших путей из данной вершины во все остальные вершины орграфа в случае неотрицательных весов дуг. Рассмотрим орграф G = (V, A) с выделенной вершиной s и весами wij , (i, j) A. Алгоритм присваивает вершинам временные и постоянные метки. Постоянная метка вершины равна длине кратчайшего пути из s в эту вершину. Кроме того, формируется массив P red, в котором P red(v) содержит номер непосредственного предшественника вершины v в кратчайшем пути из s в v. Таким образом s, . . . , P red(P red(v)), P red(v), v является кратчайшим путем из s в v.
Алгоритм Дейкстры (построения кратчайших путей из вершины s во все остальные вершины орграфа в случае неотрицательных весов дуг)
Шаг 1. (Начало). Помечаем вершину s постоянной меткой Length(s) = 0. Все остальные вершины v /= s помечаются временными метками Length(v) = ∞. Полагаем номер
итерации i = 1 и номер текущей вершины, помеченной постоянной меткой, u = s.
24
Шаг 2. (Рекурсия). Полагаем i = i+1. Рассмотрим вершину u. Для всех ее непосредственных последователей v с временной меткой вычисляем M = min{Length(v), Length(u) +
wuv }. Если M меньше временной метки Length(v), то вычисляем новую метку Length(v) = M и полагаем P red(v) = u.
Далее среди всех вершин с временными метками выбираем вершину k с наименьшей меткой и делаем ее постоянной. Если i < n −1, то полагаем u = k и повторяем Шаг 2. Иначе
стоп: все кратчайшие пути из s в остальные вершины могут быть восстановлены по мас-
сиву Pred.
Алгоритм построения кратчайших путей между всеми парами вершин и проверки наличия цикла отрицательного веса (дополнительный материал). Приводимый ниже алгоритм предложен Флойдом.
Рассмотрим орграф G = (V, A). Пусть W 0 = ||wij || – n ×n матрица весов дуг этого графа. Полагаем wij = ∞, если дуга (i, j) отсутствует, и wii = 0 для всех i V. Алгоритм Флойда строит последовательность
матриц W 1, W 2, . . . , W n такую, что элемент wn матрицы W n равен длине кратчайшего пути из i в j в |
||||
|
ij |
|
|
|
графе G. Матрица W k определяется по матрице W k−1: |
|
|
|
|
wk |
= min{w k−1, wk−1 |
+ w k−1}. |
(1) |
|
ij |
ij |
ik |
kj |
|
Пусть Pijk – кратчайший путь из i в j с внутренними вершинами из множества {1, 2, . . . , k}. Справедлива
Теорема 5 Для 0 ≤ k ≤ n, величина wkij является длиной пути Pijk .
В алгоритме Флойда одновременно с длинами кратчайших путей отыскиваются сами пути с помощью
матриц Z0, Z1, . . . , Zn, где элемент zk |
матрицы Zk указывает на вершину, непосредственно следующую |
||||||||||||
|
ij |
|
|
|
|
|
|
|
|
|
|
|
|
за i в P k |
. Тогда ясно, что |
|
|
|
|
|
|
|
|
|
|
|
|
ij |
|
|
|
( j, |
|
|
/= ∞, |
|
|
|
|
||
|
|
z0 |
= |
|
если w0 |
|
|
|
|
||||
|
|
|
|
|
ij |
= ∞. |
|
|
|
|
|||
|
|
ij |
|
|
0, |
|
если w0 |
|
|
|
|
||
|
|
|
|
|
|
|
ij |
|
|
|
|
|
|
Матрица Zk получается из Zk−1 следующим образом. Пусть M = min{wk−1 |
, wk−1 |
+ wk−1 |
}. Тогда |
||||||||||
|
|
|
|
|
|
|
|
|
|
ij |
ik |
kj |
|
|
k |
|
( zk−1, |
если M = wk−1 |
, |
|
|
|
|||||
|
|
|
|
ij |
|
|
|
ij |
|
|
|
|
|
|
zij = |
z |
k−1 |
, |
если M < w |
k−1 |
. |
|
|
|
|||
|
|
|
ik |
ij |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
Если M = wkij−1, то длина пути P kij равна длине пути P kij−1. Иначе P kij получается в результате склеивания
путей Pikk−1 и Pkjk−1 и zkij = zikk−1.
Очевидно, что кратчайший путь из i в j определяется последовательностью вершин i, i1, i2, . . . , ip, j, где
|
i1 |
= zn |
, i2 |
= zn |
, i3 = zn |
, . . . , j = zn |
. |
|
|
|
ij |
|
i1 j |
|
i2 j |
ip j |
|
Отметим, что в (1) если wk−1 |
или wk−1 |
равно ∞, то wk |
= wk−1. |
|
||||
ik |
|
kj |
|
|
ij |
|
ij |
|
Алгоритм Флойда (построения кратчайших путей между всеми парами вершин и проверки наличия цикла отрицательного веса)
(В процессе вычислений матрицу W k записываем на место W k−1, а матрицу Zk – на место Zk−1, k = 1, . . . , n. Таким образом, используем одно и то же обозначение W для всех W k и Z для всех Zk .)
Шаг 1. (Начало). Полагаем k = 0. Строим матрицы W = W 0 и Z = Z0.
Шаг 2. (Рекурсия). Полагаем k = k + 1. Для всех таких вершин i /= k, что wik /= ∞ и всех таких вершин
j /= k, что wkj /= ∞, вычисляем M = min{wij , wik + wkj }. Если M < wij , то полагаем zij = zik и wij = M. Если появляется wii < 0, то стоп: вершина i принадлежит некоторому циклу отрицательного веса.
Если все wii ≥ 0 и k = n, то стоп: wij – длины всех кратчайших путей, а zij – первая после i вершина в кратчайшем пути из i в j.
Если все wii ≥ 0 и k < n, то повторяем Шаг 2.
25
5 Сетевое планирование и управление проектами
На практике довольно часто встречаются задачи планирования и управления сложными работами или проектами.
Примерами таких проектов могут быть
–строительство большого объекта,
–разработка комплекса компьютерных программ,
–производство самолета, ракеты или другого большого изделия,
–выпуск нового продукта,
–передислокация фирмы или производства.
Каждый сложный проект включает ряд более или менее элементарных работ, которые взаимосвязаны по времени и/или по использованию общих ресурсов. При оптимальном планировании и управлении проектом необходимо составить расписание выполнения всех элементарных работ. Под расписанием понимается указание о том, как распределены имеющиеся ресурсы между работами во времени. При этом расписание допустимо, если выполнены ограничения на ресурсы и временные соотношения между работами.
Наиболее распространенными методами планирования и управления проектами являются
сетевые методы.
Сетевая модель проекта включает следующее:
а) Элементарные работы (иногда называемые требованиями или операциями), которые должны быть проведены для выполнения проекта.
б) Связи между элементарными работами в виде сети, в которой вершины и дуги представляют собой связи между элементарными работами. При этом будет присутствовать начальная, возможно фиктивная, работа, соответствующая началу проекта, и конечная работа, соответствующая его завершению.
Сетевые методы включают следующее:
а) Определение или оценивание длительности pj выполнения каждой элементарной работы j.
б) Определение критического, т.е. наиболее длинного пути между начальной и конечной вершиной сети. Длина пути равна сумме длительностей выполнения входящих в него элементарных работ и представляет собой наименьшую возможную длительность выполнения проекта.
в) Использование знания критического пути для получения более экономичного и эффективного расписания.
Полученная сеть и расписание могут использоваться для контроля выполнения проекта путем внесения изменений, соответствующих реальным данным.
Некоторые работы не могут выполняться до тех пор, пора не завершится выполнение некоторых других работ. Это может быть обусловлено технологией процесса, физическими ограничениями или использованием информации, порождаемой другими работами. Как отмечалось в разделе ”Топологическая сортировка”, такие ограничения называются ограничениями предшествования. Работы, не связанные ограничениями предшествования, могут выполняться независимо друг от друга, параллельно во времени.
Отношения предшествования отражаются в сетевой модели проекта.
26
Наиболее распространены два типа сетевых моделей, называемые 1) действие-на-вершине
и 2) действие-на-дуге.
Вмодели 1) вершины представляют собой элементарные работы проекта, а дуги указывают последовательность их выполнения. Вершинам приписаны длительности выполнения соответствующих работ.
Вмодели 2) дуги представляют собой элементарные работы проекта, а вершины соответствуют событиям ”начало работы” и ”конец работы”. Дугам сопоставлены длительности выполнения соответствующих работ. Для отражения отношений предшествования между работами могут вводиться фиктивные дуги нулевой длины.
Рассмотрим модель 2) ”действие-на-дуге”. Как уже отмечалось, длительность выполнения проекта определяется длиной критического пути. Проект не может быть выполнен быстрее, чем длина критического (самого длинного) пути.
Алгоритм отыскания критического пути (применяется для отыскания критического
пути между выделенными вершинами s и t ацикличного орграфа G = (V, A) с неотрицательными весами дуг pij , (i, j) A.)
Метка вершины Length(v) соответствует длине самого длинного пути из s в v.
Шаг 1. (Начало). Помечаем вершину s меткой Length(s) = 0. Полагаем множество помеченных вершин S = {s}.
Шаг 2. (Рекурсия). Находим непомеченную вершину v, в которую входят дуги только из помеченных вершин (все вершины множества B0v помечены). Помечаем v меткой Length(v) = max{Length(u) + puv |u B0v} и включаем v в S. Если максимум достигается на вершине u0 Bv0, то самый длинный путь в вершину v пришел из вершины u 0.
Если помечена вершина t, то стоп: длина критического пути (длительность выполнения проекта) равна Length(t) и сам путь может быть восстановлен с помощью поиска с возвратом. Иначе повторяем Шаг 2. 
После того, как критический путь построен, для каждой работы j могут быть вычислены наиболее ранний ESj и наиболее поздний LSj моменты ее начала такие, что начало работы в промежутке [ESj , LSj ] не приводит к увеличению длительности всего проекта. Начало работы ранее ESj невозможно из-за ограничений предшествования, а ее начало после LSj приведет к увеличению длительности проекта.
Знание указанных моментов позволяет реализовать расписание более гибко, поскольку есть возможность задержки начала выполнения некоторых работ без ущерба для длительности выполнения всего проекта.
Наиболее ранние моменты начала работ ESj равны меткам соответствующих вершин в приведенном выше алгоритме.
Наиболее поздние моменты начала работ подсчитываются при помощи процедуры прохождения сети от конечной вершины к начальной. При этом вершина t помечается значением T длины критического пути, и далее
LSi = min{LSj − p(ij)|j Ai0, все вершины Ai0 помечены}.
Значение LSi равно T минус длина наиболее длинного пути из вершины i в вершину t.
27
6 Задача коммивояжера и метод ветвей и границ
Предположим, что фирма должна провести рекламную кампанию во всех областных городах Беларуси, в каждом городе ровно по одному разу. Известно, сколько стоит переезд между двумя любыми городами. Фирма желает снизить свои дорожные расходы.
Математическая модель такой ситуации называется задачей коммивояжера, которая состоит в следующем. Задан полный орграф. Орграф называется полным, если каждая пара вершин i и j соединена дугами (i, j) и (j, i). Известна стоимость cij каждой дуги (i, j). Требуется построить гамильтонов цикл (т.е. цикл, проходящий через каждую вершину ровно по одному разу) такой, что суммарная стоимость всех его дуг была минимальной.
Отметим, что есть взаимно однозначное соответствие между гамильтоновыми циклами (т.е. маршрутами коммивояжера) в полном графе с n вершинами и перестановками n элементов. Перестановка σ = (i1, . . . , in) соответствует маршруту коммивояжера, прохо-
дящему через вершины i1, . . . , in и включающему дуги (i1, i2), (i2, i3), . . . , (in−1, in), (in, i1). Основным методом решения задачи коммивояжера является метод ветвей и границ
(МВиГ). Этот метод является универсальным и может применяться для решения практически всех задач оптимизации.
Основные принципы МВиГ для решения задачи минимизации состоят в следующем.
1)Ветвление. Исходная задача разбивается (ветвится) на две или более подзадачи таким образом, что решение исходной задачи является решением хотя бы одной из подзадач. Каждая из подзадач, в свою очередь, ветвится на более мелкие подзадачи. Процесс может повторяться до тех пор, пока получаемая подзадача не становится тривиальной и ее решение легко отыскивается.
Этот процесс можно представить в виде так называемого дерева ветвлений. Вершины дерева ветвлений соответствуют подзадачам и разбиты на уровни. Исходная задача является вершиной нулевого уровня. Подзадачи, полученные из исходной задачи, являются вершинами первого уровня. Подзадачи, полученные из вершин первого уровня, являются вершинами второго уровня, и т.д. Дуги направлены из вершин уровня i в вершины уровня i + 1. В каждую вершину входит ровно одна дуга.
2)Построение нижних и верхних оценок минимального значения целевой функции. Для исходной задачи, а также для любой ее подзадачи могут быть найдены
числа LB и UB такие, что
LB ≤ F ≤ U B,
где F – минимальное значение целевой функции в задаче или подзадаче, LB и U B – его нижняя и верхняя оценки соответственно.
Нижняя оценка может быть получена в результате решения релаксированной или ослабленной задачи, например, задачи коммивояжера, в которой стоимости всех дуг, входящих в данную вершину, уменьшены на величину минимальной из них, и аналогично изменены (уменьшены) стоимости всех дуг, выходящих из данной вершины.
Верхняя оценка может быть получена в результате отыскания любого допустимого решения рассматриваемой задачи и вычисления соответствующего значения целевой функции. Для задачи коммивояжера достаточно найти суммарную стоимость дуг какого-нибудь до-
28
пустимого маршрута. Наилучшая, т.е. наименьшая из всех имеющихся в наличии верхних оценок, называется (текущим) рекордом.
3)Отсеивание вариантов. Если для некоторой подзадачи ее нижняя оценка превосходит либо равна рекорду, такую подзадачу можно далее не ветвить, так как ее решение будет заведомо хуже либо не лучше решения, соответствующего рекорду.
4)Оптимальное решение. Процесс вычислений прекращается, когда нет ни одной подзадачи, которая может продолжать ветвиться. В этом случае оптимальное решение соот-
ветствует текущему рекорду.
В приведенном методе остается неопределенным способ выбора подзадачи для ветвления. Наиболее употребимым является способ, при котором ветвят ту подзадачу, которой соответствует наименьшее значение нижней оценки либо ту, которая быстрее приведет к тривиальной подзадаче.
Различают методы ветвления в глубину и в ширину.
При ветвлении в глубину всегда ветвят одну из подзадач наибольшего уровня. Это быстрее приводит к построению полного допустимого решения.
При ветвлении в ширину ветвят подзадачи одного уровня до тех пор, пока все они не будут рассмотрены. Такое ветвление позволяет получать больше нижних и верхних оценок и может привести к большему количеству отсеянных вариантов. Однако требуется больше памяти для хранения промежуточных результатов.
Пример. Пусть матрица (таблица) |
стоимостей переезда между городами выглядит сле- |
||||||||
дующим образом: |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
город(i, j) |
Минск(1) |
Брест(2) |
|
Витебск(3) |
Гомель(4) |
Гродно(5) |
Могилев(6) |
|
|
|
|
|
|
|
|
|
|
|
|
1 |
∞ |
350 |
|
250 |
350 |
320 |
200 |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
400 |
∞ |
|
650 |
500 |
100 |
700 |
|
|
|
|
|
|
|
|
|
|
|
|
3 |
300 |
600 |
|
∞ |
320 |
400 |
150 |
|
|
|
|
|
|
|
|
|
|
|
|
4 |
370 |
580 |
|
280 |
∞ |
710 |
180 |
|
|
|
|
|
|
|
|
|
|
|
|
5 |
400 |
100 |
|
550 |
800 |
∞ |
670 |
|
|
|
|
|
|
|
|
|
|
|
|
6 |
220 |
650 |
|
170 |
210 |
590 |
∞ |
|
|
|
|
|
|
|
|
|
|
|
Будем решать задачу методом ветвления вглубь. Вначале построим ”приведенную задачу”, эквивалентную исходной. Используем процедуру ”приведение таблицы”, состоящую в вычитании наименьшего числа в каждом столбце (строке), затем наименьшего числа в каждой строке (столбце). Суммируя эти числа (из каждого города нужно выехать и в каждый город нужно въехать), получаем ∆0 = (220 + 100 + 170 + 210 + 100 + 150) + (30 + 50) = 1030.
Далее можно работать с приведенной матрицей. Для получения реальной стоимости любого маршрута необходимо добавить к получаемой из приведенной таблицы стоимости величину ∆0.
Приведенная таблица:
29
(i, j) |
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
1 |
∞ |
200(250) |
30(80) |
90(140) |
170(220) |
0(50) |
|
|
|
|
|
|
|
2 |
180 |
∞ |
480 |
290 |
0 |
550 |
|
|
|
|
|
|
|
3 |
80 |
500 |
∞ |
110 |
300 |
0 |
|
|
|
|
|
|
|
4 |
120(150) |
450(480) |
80(110) |
∞ |
580(610) |
0(30) |
|
|
|
|
|
|
|
5 |
180 |
0 |
380 |
590 |
∞ |
520 |
|
|
|
|
|
|
|
6 |
0 |
550 |
0 |
0 |
490 |
∞ |
|
|
|
|
|
|
|
Для элементов приведенной таблицы оставим обозначения cij .
Очевидно, что нижняя оценка для приведенной задачи равна LB(0) = 0. Для отыскания верхней оценки построим какой-нибудь маршрут коммивояжера. Например, разумным будет включить в этот маршрут дугу минимальной стоимости, скажем, (2,5). Далее выбрать дугу минимальной стоимости вида (5, j), j /= 2. Это (5,1). Далее, выбрать дугу минималь-
ной стоимости вида (1, j), j /= 2, 5. Поступая аналогично, (1,6), (6,3), (3,4), и, без вариантов,
(4,2). Получаем верхнюю оценку UB(0) = 740. Она является рекордом R.
Далее разветвим исходную задачу. Ветвление будем осуществлять по вхождению или невхождению некоторой дуги в маршрут. Будем выбирать дугу нулевой стоимости, которая дает наибольшее значение нижней оценки для подзадачи при ее невхождении в маршрут. Дуги нулевой стоимости: (1,6), (2,5), (3,6), (4,6), (5,2), (6,1), (6,3), (6,4).
В подзадаче P (1, 6) (P (1, 6)) дуга (1,6) не входит (входит) в маршрут.
Рассмотрим подзадачу P (1, 6). Полагаем стоимость дуги (1,6) равной ∞. Какая-то дуга из 1 должна выйти и какая-то дуга должна войти в 6. Можно добавить к нижней оценке сумму наименьших чисел в указанных строке и столбце, обозначаемую ∆16 = 30. Аналогично
вычисляем ∆2,5, ∆3,6, ∆4,6, ∆5,2, ∆6,1, ∆6,3, ∆6,4. Наибольшее значение равно ∆5,2 = 380. Выбираем дугу (5,2) для дальнейших ветвлений. Вычисляем LB(5, 2) = LB(0)+∆5,2 = 380.
Нарисуем начальное дерево ветвлений, состоящее из 3 вершин - начальной 0 и вершин, обозначенных (5, 2) (соответствующая дуга не входит в маршрут коммивояжера) и (5,2) (входит), см. рис.
Припишем вершинам соответствующие значения LB.
Рассмотрим подзадачу P (5, 2). Поскольку дуга (5,2) входит в маршрут, другие дуги не могут выйти из 5 и войти в 2. Вычеркиваем строку 5 и столбец 2. Кроме того, дуга (2,5) войти в маршрут не может. Полагаем стоимость этой дуги равной ∞. Вычисляем ∆5,2 = 350. После приведения таблица имеет вид:
(i, j) |
1 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
1 |
∞ |
30 |
90 |
0 |
0 |
|
|
|
|
|
|
2 |
0 |
300 |
110 |
∞ |
370 |
|
|
|
|
|
|
3 |
80 |
∞ |
110 |
130 |
0 |
|
|
|
|
|
|
4 |
120 |
80 |
∞ |
410 |
0 |
|
|
|
|
|
|
6 |
0 |
0 |
0 |
320 |
∞ |
|
|
|
|
|
|
Вычисляем LB(5, 2) = LB(0) + c5,2 + ∆5,2 = 350.
Будем ветвить подзадачу P (5, 2), так как размерность соответствующей матрицы меньше и быстрее можно получить тривиальную подзадачу. В приведенной таблице для этой
30
