
логистика / 0807155_B5569_tihomirova_a_n_sidorenko_e_v_matematicheskie_modeli_i_metody
.pdf
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[i]и v[j].
302

3.В цикле по i от 1 до N
Вцикле по j от 1 до M
Схема работы алгоритма показана на рис. 2.61.
Ввод массивов a[1…M], b[1…N], c[i,j]
|
|
|
Задать начальную перевозку x[i,j] |
Использовать |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
жадный алгоритм |
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
Рассчитать потенциалы u[i]и v[j] |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выбрать перевозку [i,j] |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
u[i]-v[j]>c[i,j] |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
||||
|
Найти клетку с |
|
|
|
|
|
|
|
|||||
|
максимальным потенциалом |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
Пересчитать перевозки и |
|
|
|
|
|
|
|
|||||
|
удалить одну нулевую |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
Пересчитать потенциалы |
|
|
|
|
|
|
|
|||||
|
u[i]и v[j] |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
Наилучшая перевозка x[i,j] |
|
|
|
|
||||
|
|
|
|
|
и соответствующее ей |
|
|
|
|
||||
|
|
|
|
|
значение функционала |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.2.61. Схема работы алгоритма решения транспортной задачи
303

До тех пор пока существуют клетки [i,j]
такие что |
u[i]-v[j]>c[i,j] выполнять: |
3.1.поиск |
клетки с наибольшим положительным |
потенциалом (получаем цикл); 3.2.пересчет перевозок и удаление одной нулевой
перевозки (снова получаем ациклический набор); 3.3.пересчет потенциалов u[i]и v[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