Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

мат_модели_logistics

.pdf
Скачиваний:
36
Добавлен:
14.04.2015
Размер:
3.5 Mб
Скачать

Заметим, что числа xij образуют квадратичную матрицу n -того

порядка, на главной диагонали которой стоят нули, а элементы, рас- положенные симметрично главной диагонали, равны по величине и противоположны по знаку.

Отсюда следует, что задать поток X = {xij } на сети означает

задать n2 , чисел удовлетворяющих условиям (6.1) – (6.3). Рассмотрим, как организовать какой-нибудь поток на сети

(см. рис. 6.3).

С этой целью рассмотрим, например путь 1 - 2 - 5 – 6 (см. рис. 6.3) – это полный путь от источника к стоку. Ребро (2,5), лежа- щее на этом пути, не позволяет пропустить больше 1 единицы веще- ства. Следовательно, поток по указанному пути мощностью в 1 ед.

будет допустимым: x21 + x25 = (x12 ) + x25 = (−1) +1 = 0 .

На пути 1 - 4 - 5 - 6 можно пропустить 2 ед. вещества (лимити- рующим является ребро 1 - 4).

На пути 1 - 3 - 6 можно пропустить 4 ед. вещества.

В результате потоки по ребрам равны: x12 =1, x13 = 4 , x14 = 2 , x25 =1, x36 = 4 , x56 =1+ 2 = 3 , а по остальным ребрам сети потоки равны нулю.

В соответствии с формулой (6.4) мощность сформированного

потока

f = x12 + x13 + x14 = x36 + x56 = 7 ед.

Чтобы ответить на вопрос, будет ли этот поток максимальным, необходимо его исследовать, а пока запишем сформированный поток в виде матрицы (табл. 6.3).

Т а б л и ц а 6.3

i, j

1

2

3

4

5

6

1

0

1

4

2

0

0

2

-1

0

0

0

1

0

3

-4

0

0

0

0

4

4

-2

0

0

0

2

0

5

0

-1

0

-2

0

3

6

0

0

-4

0

-3

0

100

ЛЕКЦИЯ 12

6.5. Разрез на сети. Теорема Форда-Фалкерсона

Пусть дана некоторая сеть. Разобьем множество вершин сети на два не пересекающихся подмножества А и В так, чтобы исток I попал в подмножество А, а сток S в подмножество В. В этом случае гово- рят, что на сети произведен разрез, отделяющий источник I от стока S. В результате произведенного разбиения вершин появятся ребра

(i, j) , конечные точки которых окажутся в разных подмножествах. Совокупность ребер (i, j) , начальные точки которых принадлежат подмножеству А, а конечные подмножеству В, называют разрезом сети и обозначают A B .

На схеме (рис. 6.4) в скобках указана пропускная способность в обоих направления, число потоков по ребру. Стрелкой указано на- правление положительного потока. На сети произведены два разреза

I и II.

 

 

 

I

II

 

 

 

 

 

 

2

(1,4)

4

 

 

 

(3,3)

(2,8)

 

(7,9)

2 (5,5)

1

 

 

5

 

 

 

4

 

 

(4,2)

4

(6,7)

 

 

3

 

 

 

 

 

Р и с. 6.4. Разрезы на сетях

При разрезе I вершины сети оказались разбитыми на подмноже- ства А (1,2) и В (3,4,5), а ребрами, образующими разрез, стали (1,3), (1,4) и (2,4). При разрезе II – А(1,2,3,4), В(5), а образующие ребра (3,5) и (4,5).

Введем важные для дальнейшего изложения определения.

Величина

R = ( A | B) = åårij ,

(6.5)

i A j B

 

представляющая собой сумму пропускных способностей rij , называ-

101

ется пропускной способностью разреза.

Пусть на сети задан поток X = {xij } и произведен разрез (A B).

Величина

 

X ( A | B) = åå xij ,

(6.6)

i A j B

 

представляющая собой сумму потоков xij по всем ребрам разреза,

называется потоком через разрез.

Для разреза I:

R(I ) = r13 + r14 + r24 = 6 + 2 +1 = 9,

X (I ) = x13 + x14 + x24 = 4 + 2 +1 = 7.

Для разреза II:

R(II ) = r45 + r35 = 4 + 5 = 9,

X (II ) = x45 + x35 = 3 + 4 = 7.

Если на сети задан поток X = {xij } и произведен разрез A B , то

хотя бы одно ребро любого полного пути, ведущего из источника I в сток S, будет обязательно принадлежать разрезу A B .

При этом величина потока по любому пути не превышает про- пускную способность каждого его ребра, поэтому величина X сум- марного потока, устремленного из источника I в сток S, не может превысить пропускную способность любого разреза сети, то есть

åå xij åårij .

(6.7)

i A j B

i A j B

X = {xij } ,

Оказывается, если удаётся построить на сети поток

величина которого равна пропускной способности некоторого разре-

за A

B , то этот поток будет максимальным,

а разрез

A

B обладает

минимальной пропускной способностью.

 

 

 

 

 

В самом деле,

пусть для потока X = {xij }

и разреза A

 

B выпол-

 

няется равенство

 

 

 

åå xij*

=åårij ,

 

 

 

 

 

 

 

 

 

 

 

(6.8)

 

 

 

 

 

i A j B

i A j B

 

 

 

 

 

но максимальным является не X * , а поток X = {xij } ;

в таком случае

 

 

*

 

*

 

%

 

 

 

 

 

поток через разрез

B

потока

X будет больше потока через этот

A

 

102

же разрез X * , то есть

 

 

%

*

(6.9)

åå xij åå xij

i A j B

i A j B

 

или

 

 

åå xij* åårij* ,

(6.10)

i A j B

i A j B

 

что противоречит неравенству (6.5).

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

Теорема Форда-Фалкерсона.

На любой сети максимальная величина потока из источника I в сток S равна минимальной пропускной способности разреза, отде- ляющего I от S.

Эта теорема имеет важное прикладное значение.

6.6. Алгоритм решения задачи о максимальном потоке

Пусть на сети задан некоторый поток X = {xij } . Разобьем все

вершины сети на два подмножества А и В следующим образом: к подмножеству А отнесем исток I и все вершины i, достижимые из I хотя бы по одному пути, состоящему из ненасыщенных ребер; к подмножеству В отнесем все остальные вершины, то есть такие, ко- торые нельзя достичь по ненасыщенным ребрам.

При этом возможны следующие случай:

1)сток S A ;

2)сток S A .

Рассмотрим оба этих случая.

Случай 1. Если S A , то S B , поэтому построенное разбиение является разрезом A B . По условию разбиения для любой вершины

i A существует путь из I в i, состоящий из ненасыщенных ребер, а для любой вершины j B такого пути нет. Отсюда следует, что лю-

бое ребро (i, j) разреза A B ( i A , j B ) будет насыщенным (иначе

j принадлежало бы А), то есть xij

= rij . Просуммировав эти равенства

по всем i A , j B , получим

 

 

åå xij

=åårij .

(6.11)

i A j B

i A j B

 

В равенстве (6.11) слева X величина потока через разрез, спра-

103

ва пропускная способность разреза A B . По теореме Форда- Фалкерсона следует, что поток X = {xij } является максимальным.

Случай 2. Если S A , то существует путь из ненасыщенных ре- бер, ведущий из I в S. По ребрам этого пути можно пропустить до-

полнительный поток величиной = min{rij xij } . Потоки xij по всем

остальным ребрам сети остаются прежними. В результате мощность суммарного потока возрастает на величину . Это будет новый по-

ток X 1 = {xij1 } .

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

1.Построить некоторый начальный поток X = {xij } .

2.Организовать процедуру составления подмножества А вер- шин, достижимых из источника I по насыщенным ребрам. Если в этом процессе сток S не попадает в подмножество А, то построенный поток максимальный и задача решена. Если же S попал в А, по пе- рейти к пункту 3 алгоритма.

3.Выделить путь из I в S, состоящий из ненасыщенных ребер и

увеличить поток xij по каждому ребру этого пути на величину

= min{rij xij } , где минимум берется по ребрам (i, j) упомянутого пути. Тем самым будет построен новый поток X 1 = {xij1 } . После этого

надо возвратиться к пункту 2 алгоритма.

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

Пример. Рассмотрим сеть,

 

 

 

3

 

 

(2,2)

 

 

представленную на рис. 6.5.

 

 

 

2

 

 

 

(4,6)

 

 

 

 

Матрица R пропускных способ-

 

 

2

 

5

 

 

 

 

 

(1,5)

 

 

 

(7,3) 2

 

ностей данной сети задана табл. 6.4.

I

1

1

3

 

В соответствии с пунктом 1 ал-

1

(4,9)

 

 

(8,3)

(5,7)

 

 

 

горитма на сети необходимо сфор-

 

 

 

 

 

 

 

 

 

(2,5)

2

 

 

 

6

S

мировать какой-либо начальный по-

 

 

 

 

 

(4,6)

ток. Примем в качестве такого пото-

 

 

 

 

4

2

 

 

ка X 0 , в котором по пути 1–3–5–6

 

 

 

Р и с. 6.5

 

 

104

перемещают 2 единицы (по ребру (3,5) больше пропустить нельзя).

Т а б л и ц а 6.4

i, j

1

2

3

4

5

6

1

0

7

4

2

0

0

2

3

0

8

4

1

0

3

6

8

0

0

2

0

4

5

9

0

0

8

4

5

0

5

2

3

0

5

6

0

0

0

6

7

0

По пути 1–2–5–6 имеем 1 единицу: здесь лимитирующим явля- ется ребро (2,5); по пути 1–4–6 имеем 2 единицы. При этом ребро

(1,4) становится насыщенным.

Матрица

потока X 0 приведена

в табл. 6.5:

 

 

 

 

 

 

 

 

 

 

Т а б л и ц а 6.5

 

 

 

 

 

 

 

 

 

 

i, j

1

2

3

4

5

6

 

 

1

0

1

2

2

0

0

 

 

2

-1

0

0

0

1

0

 

 

3

-2

0

0

0

2

0

 

 

4

-2

0

0

0

0

2

 

 

5

0

-1

-2

0

0

3

 

 

6

0

0

0

-2

-2

0

 

Определим мощность потока:

f = x12 + x13 + x14 = 5 ,

f = x46 + x56 = 2 + 3 = 5.

Приступим к пункту 2 алгоритма. Составим матрицу ( R X 0 ), элементы которой (rij xij0 ) позволяют судить о насыщенности ребер

сети. Насыщенным ребрам будут соответствовать нулевые элементы, а ненасыщенным ненулевые (табл. 6.6).

Зная матрицу R X 0 , можно сформулировать подмножество А вершин, в которые можно попасть из истока I, двигаясь по ненасы- щенным путям (пункт 2 алгоритма), а также выделить (если поток

X 0 не оптимален) эти пути и с их помощью увеличить мощность

105

потока.

Т а б л и ц а 6.6

i, j

1

2

3

4

5

6

1

0

6

2

0

0

0

2

4

0

8

4

0

0

3

8

8

0

0

0

0

4

7

9

0

0

8

2

5

0

6

4

3

0

2

6

0

0

0

8

10

0

Вершины подмножества А выделяют из всего подмножества вершин постепенно, начиная с I. С этой целью просматривают пер-

вую строку матрицы R X 0 и выписывают номера i1,i2 ,...,ik вершин,

соответствующих ненулевым элементам строки. Это и будут верши- ны, в которые можно попасть из источника I, перемещаясь по нена- сыщенным ребрам. Будем записывать полученные таким образом вершины в виде I || i1,i2 ,...,ik и называть подобную запись списком

вершины I. Далее рассматривают каждую из вершин ik полученного

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

Если в этом процессе сток S не встретится, то поток максимален и задача решена, если же при составлении очередного списка в нем появится сток S, поток не максимален и мощность его можно увели- чить.

В рассмотренном примере I = 1, S = 6. В первой строке матрицы

R X 0 в список вершины 1 войдут вершины 2, 3– 1 || 2, 3; для вер- шины 2 – 2 || 4; для вершины 3 – 3 || •; для вершины 4 – 4 || 5, 6.

Получили набор списков. Сток S = 6 попал в список одной из

вершин. Значит , поток X 0 не максимален и существует путь из ис- точника I в сток S (из 1 в 6), состоящий из ненасыщенных ребер.

Построение ненасыщенного потока большей мощности начина- ем с последнего ребра этого пути (i n−1 ,S ) , где i n−1 вершина, в спи-

сок которой попал сток S. Ребром (i n−2 ,i n−1 ) является ребро (2,4), ребром (I,i1 ) ребро (1,2). Таким образом, путь из истока в сток по

106

ненасыщенным ребрам пройдет через вершины 1, 2, 4, 6.

После выделения ненасыщенного пути из истока I в сток S оста- ется c помощью матрицы R X 0 определить величину = min{rij xij } , на которую нужно увеличить поток по каждому

ребру (i, j) выделенного пути, чтобы получить новый поток X 1

мощности, большей на единиц.

В нашем примере по ребру (1,2) можно дополнительно пропус- тить 6 единиц; по ребру (2,4) – 4 единицы; по ребру (4,6) – 2 едини- цы. Значит, поток по всему пути 1–2–4–6, составленному из указан-

ных ребер, можно увеличить на величину

 

 

= min{6,4,2} = 2 (едини-

цы).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для построения матрицы нового потока X 1

к соответствующим

элементам матрицы

X 0

прибавляют найденное значение = 2 и

возвращаются к пункту 2 алгоритма (табл. 6.7, 6.8).

 

 

 

 

 

 

 

 

 

 

 

Т а б л и ц а 6.7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X 1

 

 

 

 

 

 

 

 

 

 

i, j

1

 

 

 

2

3

 

4

 

 

5

6

 

 

1

 

0

 

 

 

3

2

 

2

 

 

0

0

 

 

2

 

–3

 

 

0

0

 

2

 

 

1

0

 

 

3

 

–2

 

 

0

0

 

0

 

 

2

0

 

 

4

 

–2

 

 

–2

0

 

0

 

 

0

4

 

 

5

 

0

 

 

 

–1

 

–2

 

0

 

 

0

3

 

 

6

 

0

 

 

 

0

0

 

–4

 

 

–3

0

 

 

 

 

 

 

 

 

 

 

Т а б л и ц а 6.8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R X 1

 

 

 

 

 

 

 

 

 

i, j

 

1

2

 

3

4

 

5

 

6

 

 

 

 

 

1

 

0

4

 

2

0

 

0

 

0

 

 

 

 

 

2

 

6

0

 

8

2

 

0

 

0

 

 

 

 

 

3

 

8

8

 

0

0

 

0

 

0

 

 

 

 

 

4

 

7

11

 

0

0

 

8

 

0

 

 

 

 

 

5

 

0

6

 

4

3

 

0

 

2

 

 

 

 

 

6

 

0

0

 

0

10

 

10

 

0

 

 

При этом величина f

:

 

 

 

 

 

 

 

 

 

 

 

 

107

f = 2 + 3 + 2 = 7 .

Приведем списки вершин по ненасыщенным путям:

 

 

 

 

 

 

 

 

 

1 || 2, 3,

 

 

 

 

 

 

 

 

 

 

 

 

 

2 || 4,

 

 

 

 

 

 

 

 

 

 

 

 

 

3 || • ,

 

 

 

 

 

 

 

 

 

 

 

 

4 || 5,

 

 

 

 

 

 

 

 

 

 

 

 

 

5 || 6.

 

 

 

 

Сток S оказался в подмножестве А, а путь,

ведущий к нему, содер-

жит ребра (1,2), (2,4),

(4,5), (5,6) ; тогда

 

 

 

 

 

 

 

 

 

 

= min (4,2,8,2) .

Новый поток

X 2 получается путем увеличения соответствую-

щим элементом потока X 1 . Соотвествующие вычисления приведены

в табл. 6.9 и 6.10.

 

 

 

 

 

 

 

 

Т а б л и ц а 6.9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X 2

 

 

 

 

 

 

 

 

i, j

 

1

 

2

3

 

4

 

5

6

 

 

 

1

 

0

 

5

2

 

2

 

0

0

 

 

 

2

 

-5

 

0

0

 

4

 

1

0

 

 

 

3

 

-2

 

0

0

 

0

 

2

0

 

 

 

4

 

-2

 

-4

0

 

0

 

2

4

 

 

 

5

 

0

 

-1

-2

 

-2

 

0

5

 

 

 

6

 

0

 

0

0

 

-4

 

-5

0

 

Списки вершин по ненасыщенным путям:

 

 

 

 

 

 

 

 

1||2, 3,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2||3,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 || • .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т а б л и ц а 6. 10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R X 2

 

 

 

 

 

 

i, j

 

1

 

2

3

 

4

 

5

6

 

 

 

1

 

0

 

2

2

 

0

 

0

0

 

 

 

2

 

8

 

0

8

 

0

 

0

0

 

 

 

3

 

8

 

8

0

 

0

 

0

0

 

 

 

4

 

7

 

13

0

 

0

 

6

0

 

 

 

5

 

0

 

6

4

 

5

 

0

0

 

Здесь имеем f

 

6

 

0

 

0

0

 

10

 

12

0

 

=

9 .

 

 

 

 

 

 

 

 

 

 

 

 

108

Далее, списки вершин по ненасыщенным путям: 1 || 2, 3,

2||•,

3|| • .

Сток 6 не попал в подмножество А вершин, достижимых из ис-

точника 1 по ненасыщенным путям. Значит, поток X 2 максимален.

Остается нанести его на сеть с указанием направления потоков по отдельным ребрам (рис. 6.6).

 

 

3

2

 

 

 

 

 

 

 

 

2

 

1

 

5

 

5

2

 

 

1

 

 

2

 

4

 

 

 

2

 

 

5

 

 

 

 

 

 

 

 

 

4

6

 

 

4

 

 

 

 

 

 

 

Р и с. 6.6

Используя список, выделим подмножества А и В, на которые оказалось разбитым множество всех вершин: А={1, 2, 3}, В={4, 5, 6}. Отсюда можно выписать ребра, образующие разрез А | В минималь- ной пропускной способности: (1, 4); (2, 4); (2, 5); (3, 5). В итоге полу- чим:

f= 2 +1+ 4 + 2 = 9 .

6.7.Приложение алгоритма о максимальном потоке

к решению транспортной задачи по критерию времени

Приложением задачи о максимальном потоке является транс- портная задача по критерию времени.

Пусть известны запасы груза

ai (i =

 

) у поставщиков

Ai ,

1,m

спрос bj ( j =

 

) потребителей Bj

и tij время поставки груза

(не-

1,n

зависимо от объема поставки) по маршруту Ai Bj . Требуется со-

ставить план перевозок, при котором спрос, реализуемый за мини- мальное время, удовлетворяется полностью.

109