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

логистика / 0807155_B5569_tihomirova_a_n_sidorenko_e_v_matematicheskie_modeli_i_metody

.pdf
Скачиваний:
82
Добавлен:
12.03.2015
Размер:
2.02 Mб
Скачать

3. Удаление перевозки для возврата к ациклическому набору. Допустим на минутку, что для только что выбранной клетки c[i,j]=u[i]+v[j]. Дадим новой клетке номер 1 и, двигаясь по циклу, перенумеруем остальные клетки числами – например 2,3,...,8 (табл.2.49.). Рассмотрим два класса клеток: нечет, куда входит новая клетка, и чет; вместе с суммами с[i,j]– на классы C-

чет и C-нечет.

Таблица 2.49. Поиск удаляемой перевозки

 

b[1]

 

 

b[2]

 

b[j]

 

 

b[N]

 

u[j]

a[1]

c[1,1]

 

 

c[1,2]

 

c[1,j]

2

 

c[1,N]

3

u[1]

 

 

 

 

 

 

x[1,j]

 

x[1,N]

 

a[2]

c[2,1]

 

6

c[2,2]

7

c[2,j]

 

 

c[2,N]

 

u[2]

 

x[2,1]

 

x[2,2]

 

 

 

 

 

 

a[i]

c[i,1]

 

 

c[i,2]

 

 

 

 

c[i,N]

 

u[i]

 

 

8

c[i,j]

 

 

 

 

 

 

 

x[i,2]

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

a[M]

c[M,1]

 

5

c[M,2]

c[M,j]

 

 

c[M,N]

4

u[M]

 

x[M,1]

 

 

 

 

 

 

x[M,N]

 

 

 

 

 

 

 

 

 

V[i]

v[1]

 

 

v[2]

 

v[j]

 

 

v[N]

 

 

.

С-нечет= c[i,j]+c[1,N]+c[M,1]+c[2,2]= (u[i]+v[j]) + (u[1]+v[N]) + (u[M]+v[1]) + (u[2]+v[2]).

С-чет = c[1,j]+c[M,N]+c[2,1]+c[i,2]=(u[1]+v[j]) + (u[M]+v[N]) + (u[2]+v[1]) + (u[i]+v[2]).

Каждый элемент из класса С-чет окаймлен по циклу элементами из класса С-нечет: один в той же строке, другой – в том же столбце, значит, как C-чет, так и C-нечет являются суммами тех же u и v , т.е. C-чет=C-нечет. Поскольку на самом деле в новой клетке c[i,j]<u[i]+v[j], то C-чет>C-нечет.

Теперь найдем минимальную перевозку r на более дорогом полуцикле чет:

min (x[1,j]+x[M,N]+x[2,1]+x[i,2])=x*.

Вычтем x* из всех перевозок полуцикла С-чет (при этом может получиться более одного нуля, но удалим только один – остальные останутся фиктивными перевозками) и прибавим ко всем перевозкам полуцикла С-нечет (значит, новая клетка станет загруженной), как показано на табл.2.50. (допустим что x*= x[M,N])

301

и с лучшим функционалом вернемся к начальному положению – ациклическому набору из M+N-1 клеток.

Таблица 2.50. Возврат к ациклическому набору

 

b[1]

b[2]

b[j]

 

 

 

b[N]

u[j]

a[1]

 

 

 

 

x[1,j]-x*

2

3

 

 

 

 

 

 

 

x[i,N]+x*

 

a[2]

6

7

 

 

 

 

 

 

 

 

x[2,1]-x*

 

x[2,2]+

x*

 

 

 

 

 

 

 

a[i]

 

 

 

8

x*

1

 

 

 

 

 

 

 

x[i,2]-

x*

 

 

 

 

 

 

a[M]

5

 

 

 

 

 

 

 

4

 

 

 

x[M,1]+x

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v[i]

 

 

 

 

 

 

 

 

 

 

 

4. Критерий остановки алгоритма.

Итерации повторяются до тех пор, пока может быть найдена клетка с положительным потенциалом:

u[i] - v[j] - c[i,j] = p[i,j] > 0.

Если все потенциалы незагруженных клеток неположительны, то получена оптимальная система перевозок.

Формальное описание алгоритма

(формальное описание не приводится

ввиду его

плохой наглядности)

 

 

Ввод:

 

массив,

содержащий

мощности

a[1..M]

производителей;

b[1..N] – массив, содержащий количество продукции, необходимой потребителям;

с[i,j] - массив, элементы которого равны стоимости доставки одной единицы продукции от i—ого поставщика j-ому покупателю.

Общий шаг:

1.Жадным алгоритмом задать начальную перевозку x[i,j].

2.Рассчитать значения потенциалов u[iv[j].

302

3.В цикле по i от 1 до N

Вцикле по j от 1 до M

Схема работы алгоритма показана на рис. 2.61.

Ввод массивов a[1…M], b[1…N], c[i,j]

 

 

 

Задать начальную перевозку x[i,j]

Использовать

 

 

 

 

 

 

 

 

 

 

 

жадный алгоритм

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рассчитать потенциалы u[iv[j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбрать перевозку [i,j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u[i]-v[j]>c[i,j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Найти клетку с

 

 

 

 

 

 

 

 

максимальным потенциалом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пересчитать перевозки и

 

 

 

 

 

 

 

 

удалить одну нулевую

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пересчитать потенциалы

 

 

 

 

 

 

 

 

u[iv[j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наилучшая перевозка x[i,j]

 

 

 

 

 

 

 

 

 

и соответствующее ей

 

 

 

 

 

 

 

 

 

значение функционала

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.2.61. Схема работы алгоритма решения транспортной задачи

303

До тех пор пока существуют клетки [i,j]

такие что

u[i]-v[j]>c[i,j] выполнять:

3.1.поиск

клетки с наибольшим положительным

потенциалом (получаем цикл); 3.2.пересчет перевозок и удаление одной нулевой

перевозки (снова получаем ациклический набор); 3.3.пересчет потенциалов u[iv[j].

Вывод:

F- значение функционала, соответствующее минимальной стоимости доставки;

x[i,j] – количество продукции, доставляемой от i- го поставщика j-му покупателю.

ПРИМЕР

Три хлебобулочных комбината, принадлежащие одному владельцу, снабжают шесть небольших городов своей продукцией. Потребности городов: 8, 10, 7, 10, 15 и 5 автомашин в неделю, а мощности комбинатов – 10, 15 и 30 машин соответственно. Стоимость проезда одной а/м от i-го комбината к j-му городу задана матрицей С. Найти оптимальное количество поставляемой из комбинатов в города продукции так, чтобы стоимость доставки была минимальной.

Таблица 2.51. Матрица стоимости проезда

Комби-

 

 

 

Город

 

 

нат

 

 

 

 

 

 

 

№1

№2

№3

 

№4

№5

№6

№1

3

2

 

5

3

4

№2

4

7

2

 

4

6

5

№3

2

5

8

 

6

7

РЕШЕНИЕ ПРИМЕРА

Запишем исходные данные в таблицу, причем веса ребер [i,j] (стоимость доставки из пункта i в пункт j) будем указывать в верхней левой части клетки (c[i,j]= ∞ означает, что из i в j нет дороги).

1. Проставим начальную перевозку жадным алгоритмом.

304

Таблица 2.52. Поиск начальной перевозки

 

b[1]=8

b[2]=10

b[3]=7

b[4]=10

b[5]=15

b[6]=5

u[i]

a[1]=10

3

2

5

3

4

0

 

3

 

7

 

 

 

 

a[2]=15

4

7

2

4

6

5

1

 

5

 

 

10

 

0

 

a[3]=30

2

5

8

6

7

0

 

 

10

 

 

15

5

 

v[j]

3

5

2

3

6

7

 

 

 

 

 

 

 

 

 

2.Подсчет потенциалов: u[1]=0. Найдем в этой строке загруженные клетки (это клетки (1,1) и (1,3)) и подпишем под столбцом для каждой из этих клеток числа v, такие, что для загруженной клетки (i,j) u[i] + v[j] = c[i,j] это будут под столбцом 1 число 3, а под столбцом 3 число 2. Теперь, зная v[1], найдем в столбце 1 еще одну загруженную клетку (2,1) с c[i,j]=4 и посчитаем u[2]=1, так что c[2,1] = 4 = u[2] + v[1] = 1 + 3. Далее, через загруженные клетки c[2,4]=4 и c[2,6]=5 посчитаем v[4]=3 и v[6]=7. Потом через клетку c[3,6]=7 посчитаем u[3]=0 откуда, через строку 3 посчитаем недостающие v[2]=5 и v[5]=6.

3.В цикле по i от 1 до N

Вцикле по j от 1 до M

До тех пор пока существуют клетки [i,j] такие что u[i]+v[j]>c[i,j]:

1-я итерация

3.1. Потенциал p максимален в клетке (1,5): p[1,5]=0+6-3=3.

Цикл образуют клетки (1,5) – (3,5) – (3,6) – (2,6) – (2,1) – (1,1) – (1,5).

3.2. C-чет: x[3,5]=15, x[2,6]=0, x[1,1]=3. Min=0.

С-нечет: x[1,5], x[3,6]=5, x[2,1]=5. В полуцикле чет есть фиктивная перевозка x[2,6]=0, поэтому прибавление или вычитание r=0 ничего не изменит, кроме того, что нулевая перевозка передвинется в клетку (1,5).

3.3.Пересчет потенциалов и нового значения функционала:

F=3*0+2*7+3*3+4*5+4*10+7*5+6*15+5*10=258.

305

Таблица 2.53. 1-я итерация

 

b[1]=8

b[2]=10

b[3]=7

b[4]=10

 

b[5]=15

b[6]=5

u[i]

a[1]=10

3

 

6

 

2

5

 

3

1

0

 

4

 

 

 

0

 

4

 

3

 

7

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a[2]=15

 

5 5

7

2

4

 

 

 

 

 

5

 

 

 

1

 

2

 

 

 

10

6

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a[3]=30

 

 

 

5

8

2

 

 

7

 

35

3

 

 

 

 

 

10

 

 

 

 

15

 

 

 

v[j]

 

3

2

2

3

 

 

3

 

 

4

 

2-я итерация

3.1. Теперь потенциал p максимален в клетке (3,1): p[3,1]=3+3-2=4 и получается цикл

(3,1) – (3,5) – (1,5) – (1,3) – (3,1).

3.2.C-чет: x[3,5]=15, x[1,1]=3. Min=3. С-нечет: x[3,1]=2, x[1,5]=0.

Вычитаем из элементов С-чет Min, прибавляем к элементам C- нечет Min.Удаляем перевозку [1,1].

3.3.Пересчет потенциалов и нового значения функционала:

F=2*7+3*3+4*5+4*10+2*3+5*10+6*12+7*5=246.

Таблица 2.54. 2-я итерация

 

b[1]=8

b[2]=10

b[3]=7

b[4]=10

b[5]=15

b[6]=5

u[i]

a[1]=10

3

4

 

2

5

3

3 3

4

0

 

4

 

 

7

 

6

 

 

a[2]=15

 

 

7

2

4

 

5

5

 

2

 

5

 

 

10

6

 

 

 

a[3]=30

1

 

5

8

2 12

7

3

 

 

3

10

 

 

 

5

 

v[j]

 

 

-1

2

2

-1

 

3

4

 

3-я итерация

3.1.Потенциал p максимален в клетке (2,3): p[2,3]= 3.

Цикл (2,3) – (1,3) – (1,5) – (3,5) – (3,1) – (2,1) – (2,3).

3.2.C-чет: x[1,3]=7, x[3,5]=12, x[2,1]=5. Min=5.

С-нечет: x[2,3], x[1,5]=3, x[3,1]=3. Вычитаем из элементов С-чет Min, прибавляем к элементам C-нечет Min. Удаляем перевозку

[2,1].

306

3.3.Пересчет потенциалов и нового значения функционала:

F=2*2+3*8+2*5+4*10+2*8+5*10+6*7+7*5=221.

Таблица 2.55. 3-я итерация

 

b[1]=8

b[2]=10

b[3]=7

b[4]=10

b[5]=15

b[6]=5

u[i]

а[1]=10

3

 

 

2

2 2

5

3

3 8

4

0

 

4

 

 

 

 

 

 

 

 

a[2]=15

6

 

7

2 1

5

4

6

 

5

0

 

2

5

 

 

 

 

10

 

 

 

 

а[3]=30

 

5

8

 

 

6

4

7

3

 

-1

8

10

 

 

 

 

 

7

5

 

v[j]

 

 

2

2

 

 

4

3

 

4

 

Теперь клеток с положительным потенциалом нет. Таким образом, наилучший полученный результат f = 221 описанным способом улучшен быть не может.

Вывод:

F=221; x[i,j] – количество доставляемой продукции: x[1,3]=2, x[1,5]=8, x[2,3]=5, x[2,4]=10, x[3,1]=8, x[3,2]=10, x[3,5]=7, x[3,6]=5.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

Организация располагает набором однородных технических средств в количестве 30 единиц, из них на базах №1 и №2 находится по 11 агрегатов, а на базе №3 – 8. Эту технику планируется на четырех объектах, причем объект №1 нуждается в 5 единицах этой техники, объекты №2 и 3 – в 9-ти, а объект №4 – в 7 машинах. Эффективность использования определяется временем на ее доставку с базы на объект, засчитываемым как простой. Найти оптимальное количество и назначение отправляемой с каждой базы техники с тем, чтобы эффективность ее использования была максимальной.

Таблица 2.56.Время доставки техники на объекты

База

 

 

Объект

 

 

№1

№2

 

№3

№4

№1

7

8

 

5

3

№2

2

4

 

5

9

№3

6

3

 

1

2

307

ПРИЛОЖЕНИЯ

Приложение 1. Базовые понятия теории графов

Граф G задается множеством точек или вершин v1, v2, . . ., vп (которое обозначается через V) и множеством линий u1, u2. . . ., uт (которое обозначается символом U), соединяющих между собой все или часть этих точек. Сокращенная запись: G=<V, U>.

Ориентированные графы (рис. П.1.1., а): линии имеют направление и называются дугами u=(vi,vj), где vi – исток, vj – сток.

Неориентированные графы (рис. П.1.1., б): линии не имеют направления и называются ребрами u=(vi,vj) =(vj,vi), где vi, vj

– концевые вершины.

Смешанные графы (рис. П.1.1, в): часть линий имеет направление, часть – нет.

2

3

2

3

2

3

1

1

1

 

 

 

4

5

4

5

4

5

 

 

 

а)

 

б)

 

 

в)

Рис.П.1.1. Ориентированные и неориентированные графы

Мультиграфы: имеются несколько парных ребер (рис. П.1.2, а) или однонаправленных дуг (рис. П.1.3, а) u1=(vi,vj),

u2=(vi,vj).

Псевдографы: имеются ребра (рис. П.1.2, б) или дуги (рис.П.1.3., б) вида u=(vi,vi), которые называются петли.

Мульти-псевдографы: имеются парные ребра (рис. П.1.2, в) или дуги (рис. П.1.3, в), а также петли.

308

2

3

2

 

 

1

3

2

3

1

 

1

 

 

5

 

 

5

 

 

4

4

4

5

 

 

 

а)

 

б)

 

в)

 

Рис.П.1.2. Неориентированные мульти- и псевдографы

 

2

3

2

3

2

3

1

1

1

 

 

 

4

5

4

5

4

5

а)

 

б)

 

в)

 

Рис.П.1.3. Ориентированные мульти- и псевдографы

Способы задания графов:

1. Графически

Связи между вершинами отображаются в виде линий (для неориентированных графов) или линий со стрелками (для ориентированных графов).

2.При помощи матрицы смежности S (V×V):

1если существует ребро или дуга (vi, vj);

s(i,j)=

0в противном случае.

Матрицы смежности однозначно задают как неориентированные (в этом случае матрица симметрична относительно главной диагонали), так и ориентированные графы и смешанные графы.

309

Для смешанных графов эквивалентно выглядит задание ребра и пары разнонаправленных дуг. Никаких проблем не возникает с псевдографами (петле соответствует единица на главной диагонали), тогда мультиграфы заданы быть не могут. В качестве примера зададим несколько графов при помощи матриц смежности.

Таблица П.1.1.Матрицы смежности

для графа на рис. П.1.1.,а

для графа на рис. П.1.3,б

для графа на рис.П.1.2,б

 

v

v

v

v

v

 

 

v

v

v

v

v

 

 

v

v

v

v

v

 

1

2

3

4

5

 

 

1

2

3

4

5

 

 

1

2

3

4

5

v1

0

0

1

1

0

 

v1

0

0

1

1

0

 

v1

0

0

1

1

0

v2

0

0

1

0

0

 

v2

0

0

1

0

0

 

v2

0

0

1

0

0

v3

0

0

0

1

0

 

v3

0

0

1

1

0

 

v3

1

1

1

1

0

v4

1

0

0

0

0

 

v4

0

0

0

0

0

 

v4

1

0

1

0

0

v5

0

0

0

0

0

 

v5

0

0

0

0

0

 

v5

0

0

0

0

0

3. При помощи матрицы инциденций А (U×V):

для ориентированных графов:

1 если vj исток дуги ui; a(i,j)= -1 если vj сток дуги ui;

0если vj не инцидентна дуге ui. для неориентированных графов:

1если vj инцидентна ребру ui;

a(i,j)=

0если vj не инцидентна ребру ui.

Матрицы инциденций однозначно задают как неориентированные, так и ориентированные графы. В принципе нет никаких препятствий для задания смешанных графов – в отличие от матрицы смежности в этом случае задание ребра и пары разнонаправленных дуг будет отличаться. Никаких проблем не возникает с мультиграфами (и в ориентированном и в неориентированном случаях), а также неориентированными псевдографами. Неоднозначность возникает при задании ориентированных псевдографов: на пересечении строки, помеченной петлей, и столбца, помеченного вершиной, на которой эта петли присутствует, по правилу должны одновременно

310