
- •4.3. Методы решения транспортной задачи
- •Постановка транспортной задачи линейного программирования
- •Алгоритм метода северо-западного угла
- •Алгоритм метода наименьшей стоимости
- •Алгоритм метода Фогеля
- •Данный метод последовательно улучшает план перевозок и состоит в том, что
- •Понятие модели назначения. Разновидности моделей назначения.
- •Постановка задачи о назначениях
- •Разновидности моделей назначения [8]
- •Алгоритм венгерского метода решения задач о назначениях [8]
Данный метод последовательно улучшает план перевозок и состоит в том, что
в транспортной таблице отыскиваются циклы с отрицательной ценой;
по ним перемещаются перевозки с целью улучшения плана;
план улучшается до тех пор, пока циклов с отрицательной ценой не останется.
Циклом в транспортной задаче называется несколько клеток, соединенных ломаной линией, которая в каждой клетке совершает поворот на 90. Цикл начинается и заканчивается в клетке с базисной переменной (в заполненной клетке). Он обязательно содержит одну свободную клетку. Цена цикла определяется как сумма стоимостей каждой клетки со своим знаком «+» или «–». Знаком «+» помечаются те клетки, стоимость которых меньше стоимости предыдущей клетки цикла, а знаком «–», те клетки, стоимость которых больше стоимости предыдущей клетки цикла.
Перенести какое-то количество единиц товара по циклу – значит увеличить перевозки, стоящие в положительных вершинах цикла, на это количество единиц, а перевозки, стоящие в отрицательных вершинах цикла уменьшить на то же количество. Таким образом, при любом циклическом переносе план остается допустимым.
При улучшении плана циклическими переносами, как правило, пользуются приемом, заимствованным из симплекс-метода: при каждом шаге (цикле) заменяют одну свободную переменную на базисную, т. е. заполняют одну свободную клетку и взамен освобождают одну из базисных клеток. При этом общее число базисных клеток остается неизменным и равно m + n – 1.
Для любой свободной клетки транспортной таблицы всегда существует цикл (и при том единственный), одна из вершин которого лежит в этой свободной клетке, а все остальные в базисных клетках. Если цена такого цикла (с плюсом в свободной клетке) отрицательна, то план можно улучшить перемещением перевозок по данному циклу. Количество единиц, которое можно переместить по циклу, определяется минимальным значением перевозок, стоящих в отрицательных вершинах цикла (если переместить большее число единиц, возникнут отрицательные перевозки).
Правило: По циклу следует переносить число, меньшее из чисел в клетках со знаком минус.
Пример 6. Решим транспортную задачу из примера 1 распределительным методом.
Начальная стоимость перевозок С=180+216+15+240+72+72+30+160=985.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
– 10 1 |
8 27 |
+ 5 3 |
6
|
9
|
48 |
A2 |
+ 6 |
7
|
– 8 30 |
6
|
5
|
30 |
A3 |
8
|
7
|
8 9 |
6 12 |
5 6 |
27 |
A4 |
7
|
5
|
4
|
6
|
8 20 |
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 18 единиц, улучшая при этом план на 18(10+8–5–6)=126.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
– 8 2 |
+ 5 2 |
6
|
9
|
48 |
A2 |
6 18 |
+ 7 |
– 8 12 |
6
|
5
|
30 |
A3 |
8
|
7
|
8 9 |
6 12 |
5 6 |
27 |
A4 |
7
|
5
|
4
|
6
|
8 20 |
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 12 единиц, улучшая при этом план на 12(8+8–7–5)=48.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
– 8 1 |
+ 5 3 |
6
|
9
|
48 |
A2 |
6 18 |
7 12 |
8
|
6
|
5
|
30 |
A3 |
8
|
+ 7 |
– 8 9 |
6 12 |
5 6 |
27 |
A4 |
7
|
5
|
4
|
6
|
8 20 |
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 9 единиц, улучшая при этом план на 9(8+8–7–5)=36.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
8 6 |
5 42 |
6
|
9
|
48 |
A2 |
6 18 |
7 12 |
8
|
6
|
5
|
30 |
A3 |
8
|
– 7 9 |
8
|
6 12 |
+ 5 6 |
27 |
A4 |
7
|
+ 5 |
4
|
6
|
– 8 20 |
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 9 единиц, улучшая при этом план на 9(8+7–5–5)=45.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
8 6 |
5 42 |
6
|
9
|
48 |
A2 |
6 18 |
7 12 |
8
|
6
|
5
|
30 |
A3 |
8
|
7
|
8
|
– 6 1 |
+ 5 1 |
27 |
A4 |
7
|
5 9 |
4
|
+ 6 |
– 8 11 |
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 11 единиц, улучшая при этом план на 11(8+6–6–5)=33.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
8 6 |
5 42 |
6
|
9
|
48 |
A2 |
6 18 |
– 7 1 |
8
|
+ 6 |
5
|
30 |
A3 |
8
|
7
|
8
|
6 1 |
5 26 |
27 |
A4 |
7
|
+ 5 9 |
4
|
– 6 11 |
8
|
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
Переносим по циклу 11 единиц, улучшая при этом план на 11(7+6–6–5)=22.
П ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запасы ai |
A1 |
10
|
8 6 |
5 42 |
6
|
9
|
48 |
A2 |
6 18 |
7 1 |
8
|
6 11 |
5
|
30 |
A3 |
8
|
7
|
8
|
6 1 |
5 26 |
27 |
A4 |
7
|
5 20 |
4
|
6
|
8
|
20 |
Заявки bj |
18 |
27 |
42 |
12 |
26 |
125 |
За шесть итераций план был улучшен на 126 + 48 + 36 + 45 + 33 + 22 = 310.
После решения стоимость перевозок:
С = 108 + 48 + 7 + 100 + 210 + 66 + 6 + 130 = 675.
Пример 7. Решим распределительным методом еще одну задачу.
ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
A1 |
– 10 2 |
+ 7 9 |
6
|
8
|
31 |
A2 |
+ 5 |
– 6 25 |
5 23 |
4
|
48 |
A3 |
8
|
7
|
6 18 |
7 20 |
38 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
Цена цикла: –10 + 7 – 6 + 5 = – 4. Переместим 22 единицы. Улучшение плана на 88.
П ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
A1 |
10
|
7 31 |
6
|
8
|
31 |
A2 |
5 22 |
6 3 |
– 5 2 |
+ 4 |
48 |
A3 |
8
|
7
|
+ 6 1 |
– 7 20 |
38 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
Цена цикла: –5 + 4 – 7 + 6 = – 2. Переместим 20 единицы. Улучшение плана на 40.
П ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
A1 |
10
|
7 31 |
6
|
8
|
31 |
A2 |
5 22 |
6 3 |
5 3 |
4 20 |
48 |
A3 |
8
|
7
|
6 38 |
7
|
38 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
За две итерации найден оптимальный план, который дает меньшую суммарную стоимость перевозок по сравнению с начальным планом на 128.
Недостатком распределительного метода является необходимость отыскания циклов для всех свободных клеток и определения их цен, что весьма затруднительно даже при таблице размерностью 45.
Метод потенциалов для решения транспортной задачи
линейного программирования
Метод потенциалов лишен этого недостатка. Он позволяет автоматически выделять циклы с отрицательной ценой и находить их цены.
Основная идея метода потенциалов заключается во введении понятии псевдо стоимости.
Псевдо стоимость
есть сумма потенциальных платежей i-м
пунктом отправки (ПО) и j-м
пунктом назначения (ПН) за перевозку
единицы товара:
.
не обязательно положительны.
Для каждой базисной
клетки псевдо стоимость
равна стоимости перевозки единицы
товара
.
Алгоритм решения транспортной задачи
линейного программирования методом потенциалов [8, 19]
Взять любой опорный план, в котором m + n – 1 базисных клеток содержат числа, соответствующие перевозкам. План может быть построен методами северо-западного угла, наименьшей стоимости, Фогеля. Если план вырожденный, то следует привести его к опорному плану с использованием малой фиктивной величины .
Определить для этого плана платежи i и j исходя из условия, чтобы в любой базисной клетке псевдо стоимости были равны стоимостям i + j = cij. Один платежей (слагаемое i или j) можно произвольно положить равным нулю.
Подсчитать псевдо стоимости
для всех свободных клеток. Если окажется, что ни одна из них не превышает стоимости, то план оптимален. В этом случае закончить процедуру оптимизации плана.
Если хотя бы в одной свободной клетке псевдо стоимость превышает стоимость, то следует приступить к улучшению плана путем переброски перевозок по циклу, соответствующему любой свободной клетке с отрицательной ценой (для которой псевдо стоимость больше стоимости). Получить в результате новый план. Перейти к пункту 2 алгоритма.
Пример 8. Решим методом потенциалов задачу из примера 7.
ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
Платежи i |
A1 |
10 10 2 |
7 7 9 |
6 6
|
7 8
|
31 |
0 |
A2 |
9 5 |
6 6 25 |
5 5 23 |
6 4
|
48 |
–1 |
A3 |
10 8
|
7 7
|
6 6 18 |
7 7 20 |
38 |
0 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
|
Платежи j |
10 |
7 |
6 |
7 |
|
|
1. Воспользуемся опорным планом, построенным по методу северо-западного угла в примере 7.
2. В верхнем левом углу каждой базисной клетки проставим ее псевдо стоимость, равную стоимости. Вычислим платежи i и j для каждого ПО и ПН. Положим, что платеж первого пункта отправки 1 = 0. Тогда платеж 1 = 10, т. к. c11=10= 1 +1, а платеж 2 = 7 по аналогичной причине. Но тогда платеж 2 = –1, т. к. c22 = 6 = 2 + 2. Аналогично вычисляем остальные платежи и записываем их в таблицу.
3.
Затем вычисляем псевдо стоимости для
свободных клеток и записываем их в левом
верхнем углу клетки. Так, например,
=2
+ 1
= –1 + 10 = 9.
4. Просмотрев все свободные клетки таблицы можно увидеть, что псевдо стоимость превышает стоимость в трех клетках (2,1), (3,1), (2,4). Следовательно, следует приступить к улучшению плана путем переброски перевозок по циклу, соответствующему любой свободной клетке с отрицательной ценой. Пусть это будет клетка (2,1). Тогда цикл: (1,1)(1,2) (2,2) (2,1). По нему следует перебросить 22 единицы товара, чтобы сделать клетку (2,1) базисной, а клетку (1,1) – свободной. Затем снова перейдем к пункту 2, но уже с новым планом.
ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
Платежи i |
A1 |
6 10
|
7 7 31 |
6 6
|
7 8
|
31 |
0 |
A2 |
5 5 22 |
6 6 3 |
5 5 2 |
6 4 |
48 |
–1 |
A3 |
6 8
|
7 7
|
6 6 1 |
7 7 20 |
38 |
0 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
|
Платежи j |
6 |
7 |
6 |
7 |
|
|
5.
Пересчитаем платежи. Оставим в силе
предположение, что 1
= 0. Клетка (1,2) по-прежнему базисная,
поэтому 2
= c12
– 7 = 7 по-прежнему. Но клетка (2,2) тоже
базисная. Поэтому по-прежнему 2
= 6 – 7 = –1 . Теперь клетка (2,1) базисная,
поэтому ее псевдо стоимость теперь не
9, а 5, так как ее стоимость равна 5 (=c21
= 5). Но тогда новый
платеж 1
= c21
– 2
= 5 – (–1) = 6. Остальные платежи не изменятся.
6.
Вычислим новые псевдо стоимости для
свободных клеток. Теперь
=1
+ 1
= 0 + 6 =6,
=3
+ 1
= 0 + 6 = 6. Остальные псевдо стоимости не
изменятся.
7. Просмотрев все свободные клетки таблицы можно увидеть, что псевдо стоимость превышает стоимость в одной клетке (2,4). Следовательно, следует приступить к улучшению плана путем переброски перевозок по циклу, соответствующему этой клетке с отрицательной ценой. Тогда цикл: (3,4)(3,3) (2,3) (2,4). По нему следует перебросить 20 единиц товара, чтобы сделать клетку (2,4) базисной, а клетку (3,4) – свободной. Получим новый план.
ПО |
B1 |
B2 |
B3 |
B4 |
Запасы ai |
Платежи i |
A1 |
6 10
|
7 7 31 |
6 6
|
5 8
|
31 |
0 |
A2 |
5 5 22 |
6 6 3 |
5 5 3 |
4 4 20 |
48 |
–1 |
A3 |
6 8
|
7 7
|
6 6 38 |
5 7
|
38 |
0 |
Заявки bj |
22 |
34 |
41 |
20 |
117 |
|
Платежи j |
6 |
7 |
6 |
5 |
|
|
8. Пересчитаем платежи. Новый платеж 4 = c24 – 2 = 4 – (–1) = 5. Остальные платежи не изменятся.
9.
Вычислим новые псевдо стоимости для
свободных клеток. Теперь
=1
+ 4
= 0 + 5 =5,
=3
+ 4
= 0 + 5 = 5,
=c24
= 4. Остальные псевдо стоимости не
изменятся.
10. Поскольку псевдо стоимости всех клеток не превышают их стоимостей, то оптимальный план перевозок найден. Задача решена.