
Управленческие решения / mat_Gelrud / ТЕМА12
.docТема 12
Задачи выбора маршрута
Большое значение имеет обобщение классической транспортной модели, рассмотренной в Теме 4, путем включения в нее промежуточных (перевалочных) пунктов. Так, например, промежуточные пункты часто встречаются в распределительных системах снабжения компаний, имеющих универсальные магазины во многих городах. Такие компании имеют зональные оптовые базы, которые снабжают товарами более мелкие региональные склады, откуда товары в свою очередь поступают в розничную торговую сеть. Модель с промежуточными пунктами является эффективным средством выбора оптимального числа и географического расположения складов, поскольку анализ сетевой модели позволяет отыскивать план перевозок товаров, минимизирующий транспортные затраты при любой заданной схеме размещения складов. Кроме того, рассматри-ваемые в этой теме модели заслуживают изучения еще и потому, что существуют другие задачи, эквивалентные в математическом смысле транспортным задачам с промежуточными пунктами.
Метод нахождения оптимального решения в подобных задачах основан на определении наиболее дешевых (или кратчайших) маршрутов перевозки каждого изделия со складов, имеющих избыток запасов, на склады, где их не хватает.
Рассмотрим общую модель выбора кратчайшего пути в транспортной сети. Эта задача на самом деле охватывает широкий круг важных приложений, включая задачу о назначениях (см. ниже), задачи календарного планирования (Тема 13), задачи износа и замены оборудования (Тема 16). Модели и методы Темы 7 также можно считать частными случаями рассматриваемой в данной теме модели.
Рассмотрим сеть, состоящую из множества узлов, некоторые пары которых соединены ориентированными дугами (т.е. отрезками, на которых задано направление). Как правило, в сети выделяется узел, называемый выходом (стоком, пунктом назначения, конечным), и один (или несколько), называемый входом (источником, исходным пунктом, начальным). Величина сij определяет длину дуги, исходящей из узла i и входящей в узел j. Задача заключается в отыскании кратчайшего пути между любыми двумя узлами сети.
В приложениях этой модели величина сij может измеряться в единицах, отличных от единиц длины. Так, например, сij может представлять собой стоимость переезда из узла i в узел j. В этом случае задача заключается в отыскании пути минимальной стоимости. Кроме того, сij может также определять время переезда из одного узла в другой. Тогда требуется отыскать путь минимальной продолжительности.
Могут встречаться ситуации, когда сij не равно сji (например, в одну сторону фирма использует свой транспорт, а в противоположную арендует, или маршрут пролегает по реке – вверх и вниз по течению). Сеть может содержать замкнутые пути или циклы. Это означает, что из некоторого узла выходит путь, проходит через другие узлы и возвращается в него же. Наша задача будет иметь решение, если общая длина любого цикла неотрицательна. Это условие вполне приемлемо для обычных экономических задач, в которых, как правило, сij ≥0.
Задачу нахождения кратчайшего расстояния достаточно легко свести к задаче линейного программирования (что мы сделаем в конце лекции) и решить симплекс-методом. Однако, в силу специфичности условий задачи, можно указать более эффективные методы ее решения, например, рассматриваемый ниже алгоритм Форда.
Пример 12.1. Рассмотрим транспортную сеть на рис. 12.1.
-
1
3 1
4 3 5
2 1 1 3 1
5
4 1 1 3 4
6
Рис. 12.1. Пример задачи о кратчайшем маршруте.
Необходимо найти кратчайшие пути в узел 1 из всех остальных узлов. Обозначим искомые расстояния через yi. Так как yi – минимальное расстояние до стока, то должно выполняться:
yi = min{сij + уj}, для всех дуг (i,j). (12.1)
Принимаем у1=0, затем просматриваем узлы, непосредственно связанные дугой с узлом 1, и присваиваем им значения yi, пользуясь формулой (12.1). Доходим таким образом до источника (узел 8) и процедуру повторяем сначала, пока не убедимся в справедливости (12.1) для всех дуг сети. Нагляднее всего работу алгоритма можно проследить, выполняя вычисления непосредственно на сети. Срисуйте поэтому сеть на отдельный лист и делайте записи прямо на чертеже.
у2 = с21 +y1 =7+0=7,
у3 = min{с31 +y1,с32 +y2 }= min{4+0,3+7}=4,
у4 = min{с41 +y1,с43 +y3 }= min{2+0,1+4}=2,
у5 = min{с51 +y1,с54 +y4 }= min{4+0,1+2}=3,
у6 = min{с64 +y4,с65 +y5 }= min{5+2,3+3}=6,
у7 = min{с72 +y2,с73 +y3,с76 +y6}= min{1+7,5+4,3+6}=8,
у8 = min{с87 +y7,с86 +y6,с85 +y5}= min{1+8,4+6,6+3}=9.
Начинаем опять просмотр со второго узла:
у2 = min{с21 +y1,с23 +y3,с27 +y7}= min{7+0,3+4,1+8}=7,
у3 = min{с31 +y1,с32 +y2 ,с34 +y4}= min{4+0,3+7,1+2}=3,
у4 = min{с41 +y1,с43 +y3 ,с45 +y5}= min{2+0,1+3,1+3}=2,
у5 = min{с51 +y1,с54 +y4 }= min{4+0,1+2}=3,
у6 = min{с64 +y4,с65 +y5 }= min{5+2,3+3}=6,
у7 = min{с72 +y2,с73 +y3,с76 +y6}= min{1+7,5+3,3+6}=8,
у8 = min{с87 +y7,с86 +y6,с85 +y5}= min{1+8,4+6,6+3}=9.
Так как было одно изменение в узле 3, просматриваем сначала:
у2 = min{с21 +y1,с23 +y3,с27 +y7}= min{7+0,3+3,1+8}=6,
у3 = min{с31 +y1,с32 +y2 ,с34 +y4}= min{4+0,3+6,1+2}=3,
у4 = min{с41 +y1,с43 +y3 ,с45 +y5}= min{2+0,1+3,1+3}=2,
у5 = min{с51 +y1,с54 +y4 }= min{4+0,1+2}=3,
у6 = min{с64 +y4,с65 +y5 }= min{5+2,3+3}=6,
у7 = min{с72 +y2,с73 +y3,с76 +y6}= min{1+6,5+3,3+6}=7,
у8 = min{с87 +y7,с86 +y6,с85 +y5}= min{1+7,4+6,6+3}=8.
Просматривая сначала все узлы, убеждаемся, что более изменений нет, алгоритм закончен, найденные значения являются кратчайшими расстояниями от i-го узла до стока (узла 1).
6
7
-
1
0
3
4 3 5
2
2
6
8
4 1 1 3 4
3
Рис. 12.2.Кратчайшие маршруты в узел 1.
В квадратиках у каждого узла i проставлены значения yi.
Для вычисления кратчайших путей между каждой парой узлов используется аналогичный алгоритм, только рассматривается усеченная сеть, содержащая эти два узла и все промежуточные между ними.
Пример 12.2. Найдем расстояние между узлами 3 и 6. Усеченная сеть представлена на рис 12.3.
1 1
5
1 1
3
Рис. 12.3.
Принимаем у3=0, затем
у4 = с43 +y3 =1+0=1,
у5 = с54 +y4 = 1+1=2,
у6 = min{с64 +y4,с65 +y5 }= min{5+1,3+2}=5.
Делаем еще один просмотр сначала, убеждаемся, что ни одно значение yi не изменилось, значит мы получили решение:
Кратчайший путь из узла 6 в узел 3 равен 5 (этот путь проходит через промежуточные пункты 5 и 4). Кстати, кратчайший путь из узла 3 в узел 6 (он вообще единственный) проходит через пункты 2 и 7 и равен 7.
Рассмотрим теперь производственную задачу, не связанную с перевозками, однако с математической точки зрения описываемую транспортной моделью.
Пример 12.3. Задача о назначениях.
Пусть задано n работ, каждую из которых может выполнить любой из n исполнителей. Стоимость выполнения работы i исполнителем j равна сij. Нужно назначить по одному исполнителю на каждую работу таким образом, чтобы минимизировать общие затраты.
Определим искомые переменные следующим образом:
хij = 1, если работу i выполняет исполнитель j,
0 в остальных случаях.
Тогда оптимизационная модель принимает вид:
Минимизировать Z=i j сijхij (12.2)
при ограничениях j хij=1, i=1,2,…,n, (12.3)
i хij=1, j=1,2,…,n, (12.4)
хij=0 или 1 для всех i и j. (12.5)
Отметим, что модель назначений (12.2) – (12.5) является частным случаем классической транспортной задачи (Тема 4), в которой m=n и Si=Dj=1. Пусть данные о затратах (сij) представлены в табл. 12.1.
Матрица оценок. Таблица 12.1
работа |
1 |
2 |
3 |
4 |
1 |
1 |
8 |
5 |
3 |
2 |
5 |
7 |
9 |
7 |
3 |
3 |
5 |
4 |
2 |
4 |
3 |
1 |
6 |
3 |
Эту задачу можно решить любым методом решения транспортной задачи, изложенным в Теме 4 (предоставляется это сделать читателю), однако для задачи о назначениях разработаны специальные, более эффективные методы решения. Рассмотрим алгоритм Флада (называемый еще венгерский метод), который заключается в быстром уменьшении величин в матрице оценок, так что в конце получается набор n независимых нулей по одному в каждой строке и в каждом столбце. Этот набор (не обязательно единственный) независимых нулей определяет оптимальное решение. Суть метода в следующем:
На первом этапе от всех элементов каждого столбца таблицы отнимается минимальный элемент этого столбца. Результаты заносим в табл. 12.2.
Таблица 12.2
работа |
1 |
2 |
3 |
4 |
1 |
0 |
7 |
1 |
1 |
2 |
4 |
6 |
5 |
5 |
3 |
2 |
4 |
0 |
0 |
4 |
2 |
0 |
2 |
1 |
Если максимальное количество независимых нулей равно n, алгоритм окончен. Набор нулей называется независимым, если никакие два нуля из этого набора не лежат в одной строке или столбце. В табл. 12.2 только 3 независимых нуля (выделены жирным шрифтом).
На этапе 2 от всех элементов каждой строки отнимается минимальный элемент этой строки. Результаты заносим в табл. 12.3.
Если теперь максимальное количество независимых нулей равно n, то алгоритм окончен. У нас в табл. 12.3 опять только 3 независимых нуля, поэтому переходим к этапу 3. (Набор независимых нулей определяется неоднозначно, главное, что их количество равно 3).
Таблица 12.3
работа |
1 |
2 |
3 |
4 |
1 |
0 |
7 |
1 |
1 |
2 |
0 |
2 |
1 |
1 |
3 |
2 |
4 |
0 |
0 |
4 |
2 |
0 |
2 |
1 |
На этапе 3 определяем минимальный набор строк и столбцов (называемых в дальнейшем линиями), включающий все нулевые элементы. В табл. 12.3 это будут столбцы 1 и 2 и строка 3. Следует отметить, что минимальное количество линий, включающих все нулевые элементы, совпадает с количеством независимых нулей. Среди элементов таблицы, не вошедших ни в одну из этих линий, выбираем минимальный (=1), вычитаем его из элементов таблицы, не вошедших ни в одну из линий, и добавляем ко всем элементам, лежащим на пересечении линий (если такие есть). Получим табл.12.4.
Таблица 12.4
работа |
1 |
2 |
3 |
4 |
1 |
0 |
7 |
0 |
0 |
2 |
0 |
2 |
0 |
0 |
3 |
3 |
5 |
0 |
0 |
4 |
2 |
0 |
1 |
0 |
Повторяем этап 3 до тех пор, пока максимальное количество независимых нулей не станет равным n, тогда алгоритм окончен. Важной особенностью этого алгоритма является его самокорректировка. Если на некотором повторе этапа 3 мы ошибочно выбрали набор линий, который не является минимальным, то в дальнейшем ошибка будет автоматически исправлена. В нашем примере с первого раза получили 4 независимых нуля (выделены в табл. 12.4), они и определяют оптимальное решение:
х11 = 1,х42 =1,х33 =1,х24=1, остальные равны нулю. В данном случае решение не единственное, возможны другие варианты, например,
х21 = 1,х42 =1,х33 =1,х14=1. Значение целевой функции
Z=1+1+4+7=13 (во втором варианте Z=5+1+4+3=13).
Возможны модификации задачи о назначениях. Если количество работ не совпадает с количеством исполнителей, тогда (как и в транспортной задаче открытого типа) вводятся фиктивные работы или фиктивные исполнители.
Пример 12.4. Пусть транспортная компания имеет 4 грузовика и 6 мест для погрузки, причем помещение каждого j–го грузовика на каждое i–е место связано с определенными затратами сij (табл. 12.5).
Таблица 12.5
Место |
1 |
2 |
3 |
4 |
1 |
3 |
6 |
2 |
6 |
2 |
7 |
1 |
4 |
4 |
3 |
3 |
8 |
5 |
8 |
4 |
6 |
4 |
3 |
7 |
5 |
5 |
2 |
4 |
3 |
6 |
5 |
7 |
6 |
2 |
Нужно одновременно разместить все грузовики на погрузку с минимальными затратами.
В данном случае вводим два фиктивных грузовика (5-й и 6-й столбец табл.12.6, соответствующие сij в этих столбцах равны 0).
Таблица 12.6
Место |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
3 |
6 |
2 |
6 |
0 |
0 |
2 |
7 |
1 |
4 |
4 |
0 |
0 |
3 |
3 |
8 |
5 |
8 |
0 |
0 |
4 |
6 |
4 |
3 |
7 |
0 |
0 |
5 |
5 |
2 |
4 |
3 |
0 |
0 |
6 |
5 |
7 |
6 |
2 |
0 |
0 |
Применяем алгоритм, разобранный в предыдущем примере, получаем оптимальное решение в табл. 12.7 в виде выделенных нулей (кстати, оно получается сразу после первого этапа алгоритма).
Таблица 12.7
Место |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
5 |
0 |
4 |
0 |
0 |
2 |
4 |
0 |
2 |
2 |
0 |
0 |
3 |
0 |
7 |
3 |
6 |
0 |
0 |
4 |
3 |
3 |
1 |
5 |
0 |
0 |
5 |
2 |
1 |
2 |
1 |
0 |
0 |
6 |
2 |
6 |
4 |
0 |
0 |
0 |