Смекни!
smekni.com

Математические методы исследования операций в экономике (стр. 24 из 37)

3.2.3. Задача о кратчайшем пути. Классическим приме­ром сетевых задач является определение кратчайшего пути между вершинами сети. Пусть задан граф (I, D, G), каждой дуге которого поставлено в соответствие число cd, называемое дли­ной. Также пусть выделены две вершины графаs иt, и требует­ся найти путь наименьшей длины, ведущий из вершины s в вер­шину t.

Если в графе имеются «кратные» дуги, соединяющие одина­ковые начало и конец, то достаточно оставить одну — с наи­меньшей длиной, а остальные отбросить. Таким образом, доста­точно рассматривать задачу о кратчайшем пути для простогографа (I,D), в котором дуги определяются упорядоченными па­рами вершинd = (i,j). Тогда естественно путьL, идущий из вер­шины s в вершину t, задавать в виде упорядоченного набора вер­шин, через которые проходит данный путь:

а длины дуг обозначать как cd = ci,j.

Длина описанного выше произвольного пути L определяет­ся по формуле

Легко заметить, что задача о кратчайшем пути является част­ным случаем транспортной задачи в сетевой постановке (или, что то же самое, задачи об оптимальном потоке). Для этого до­статочно присвоить вершине s единичный запас, вершине t еди­ничную потребность, все остальные вершины положить нейт­ральными, а дугам присвоить неограниченные пропускные способности. Однако, как правило, более рациональным оказывается использование конкретных свойств данной задачи и ре­шение ее специальными (частными) методами. К их числу отно­сится, например, метод Минти, основные идеи которого мы изложим ниже.

Метод Минти решения задачи о кратчайшем пути в сети представляет собой итеративный процесс, в ходе которого строится путьL=(s=i0,i1, ..., ip-1, ip=t).

На предварительном (нулевом) этапе алгоритма:

- формируется массив значений так называемых модифициро­ванных длин

i,j, которые перед началом первой итерации полагаются равными сi,j ≥0;

- осуществляется отметка вершиныi0 = s числом mi0 =0.

Стандартная итерация включает этапы:

1°. Отметка вершин сети. Обозначим множество вершин cети, отмеченных на предыдущих итерациях, как

(на первой итерации
={i0}). Для каждой вершиныi
ищутся дуги, со­единяющие ее с еще не помеченными вершинами-потомками j, модифицированная длина которых
i,j = 0. Найденные таким способом вершины j помечаются числом mj =i, указывающим на «родителя». В том случае, когда сразу несколько дуг, имею­щих
i,j = 0, заканчиваются в одной и той же вершине j, значе­ние для ее пометки выбирается произвольно.

Если среди вновь помеченных вершин окажется вершинаt, то, значит, найден искомый путь (i0, i1,..., i(p-1), ip), где

на чем алгоритм завершается.

В случае, если вершины t нет среди отмеченных, и одновре­менно нельзя отметить ни одной новой вершины, то переходим к этапу 2.

2°. Преобразование значений модифицированных длин дуг. Для каждой вершиныi

ищутся дуги, соединяющие ее с еще не помеченными вершинами j, и находятся

Далее модифицированные длины всех дуг, которые соединя­ют отмеченные вершины с неотмеченными (i

,j
), умень­шаются на величину

в результате чего кратчайшие неиспользованные дуги получа­ют нулевую модифицированную длину.

Затем происходит переход к следующей итерации.

Путь, построенный по методу Минти, будет кратчайшим. Это можно доказать с помощью индукции по номеру итерации, на которой была помечена вершина t, или, что то же самое, по ко­личеству дуг, составляющих кратчайший путь. Если это про­изошло на первом шаге (что возможно только в случае, если начальная и конечная вершины соединены дугой нулевой дли­ны), то доказываемое утверждение очевидно. Предположим,

что оно верно для всех пунктов, помеченных за первые r итера­ций, т. е. тех, которые достигаются переходом по r дугам. Тогда, если конечная вершина t помечена на (r + 1)-ой итерации, то полученный путь также будет кратчайшим, так как данная вер­шина помечается в результате минимально возможного продол­жения одного из путей, полученного за предыдущие r итераций и являющегося по предположению кратчайшим.

Отметим, что описанный алгоритм пригоден для построе­ния кратчайших путей на неориентированных графах.

Рассмотрим изложенный метод на конкретном примере, а именно: определим кратчайший путь из вершины 1 в вершину 6 для неориентированной сети, показанной на рис. 3.5.

На предварительном этапе вершина 1 отмечается числом m1 = 0, а модифицированные длины совпадают с заданными дли­нами дуг.

Итерация 1. Так как из вершины 1 не выходят дуги нулевой длины, дальнейшая отметка вершин невозможна. Переходим к этапу 2. Смежными с вершиной 1 являются вершины 2 и 3. Для них определяем ∆ = min{

1,2,
1,3}=2 и вычитаем ее из
1,2,
1,3. После преобразования имеем
1,2 = 0,
1,3 = 1.

Итерация 2. Помечаем вершину 2 m2 = 1 (см. рис. 3.6). Дальнейшая пометка невозможна, поэтому переходим к этапу 2. Смежными с помеченными вершинами 1 и 2 являются верши­ны 3,4,5. Из чего определяем ∆ = min{

1,3,
2,3,
2,4,
2,5}=1 ипосле соответствующего преобразования имеем

Итерация 3. В вершину 3 ведут дуги нулевой длины как из вершины 1, так и из вершины 2. Поскольку выбор здесь может быть произвольным, пометим вершину 3 числом m3 = 1 (рис. 3.7). Дальнейшая пометка невозможна, поэтому переходим к этапу 2. Смежными с ранее отмеченными вершинами являются вершины 4,5. Из чего определяем ∆ = min{

2,4,
2,5,
3,4,
3,5}=1 и после пре­образования имеем
2,4 =8,
2,5 =0,
3,4 =3,
3,5 =5.

Итерация 4. Помечаем вершину 4 m4 =2 (см. рис. 3.8). Даль­нейшая пометка невозможна, поэтому переходим к этапу 2. Смежными с ранее помеченными вершинами являются верши­ны 5,6. Из чего определяем ∆ = min{

2,5,
3,5,
4,5,
4,6}=3 и после преобразования имеем
2,5 =5,
3,5 =0,
4,5 =0,
4,6 =5.