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

Тема 12

Задачи выбора маршрута

Большое значение имеет обобщение классической транспортной модели, рассмотренной в Теме 4, путем включения в нее промежуточных (перевалочных) пунктов. Так, например, промежуточные пункты часто встречаются в распределительных системах снабжения компаний, имеющих универсальные магазины во многих городах. Такие компании имеют зональные оптовые базы, которые снабжают товарами более мелкие региональные склады, откуда товары в свою очередь поступают в розничную торговую сеть. Модель с промежуточными пунктами является эффективным средством выбора оптимального числа и географического расположения складов, поскольку анализ сетевой модели позволяет отыскивать план перевозок товаров, минимизирующий транспортные затраты при любой заданной схеме размещения складов. Кроме того, рассматри-ваемые в этой теме модели заслуживают изучения еще и потому, что существуют другие задачи, эквивалентные в математическом смысле транспортным задачам с промежуточными пунктами.

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

Рассмотрим общую модель выбора кратчайшего пути в транспортной сети. Эта задача на самом деле охватывает широкий круг важных приложений, включая задачу о назначениях (см. ниже), задачи календарного планирования (Тема 13), задачи износа и замены оборудования (Тема 16). Модели и методы Темы 7 также можно считать частными случаями рассматриваемой в данной теме модели.

Рассмотрим сеть, состоящую из множества узлов, некоторые пары которых соединены ориентированными дугами (т.е. отрезками, на которых задано направление). Как правило, в сети выделяется узел, называемый выходом (стоком, пунктом назначения, конечным), и один (или несколько), называемый входом (источником, исходным пунктом, начальным). Величина сij определяет длину дуги, исходящей из узла i и входящей в узел j. Задача заключается в отыскании кратчайшего пути между любыми двумя узлами сети.

В приложениях этой модели величина сij может измеряться в единицах, отличных от единиц длины. Так, например, сij может представлять собой стоимость переезда из узла i в узел j. В этом случае задача заключается в отыскании пути минимальной стоимости. Кроме того, сij может также определять время переезда из одного узла в другой. Тогда требуется отыскать путь минимальной продолжительности.

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

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

Пример 12.1. Рассмотрим транспортную сеть на рис. 12.1.

  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 +y132 +y2 }= min{4+0,3+7}=4,

у4 = min{с41 +y143 +y3 }= min{2+0,1+4}=2,

у5 = min{с51 +y154 +y4 }= min{4+0,1+2}=3,

у6 = min{с64 +y465 +y5 }= min{5+2,3+3}=6,

у7 = min{с72 +y273 +y376 +y6}= min{1+7,5+4,3+6}=8,

у8 = min{с87 +y786 +y685 +y5}= min{1+8,4+6,6+3}=9.

Начинаем опять просмотр со второго узла:

у2 = min{с21 +y123 +y327 +y7}= min{7+0,3+4,1+8}=7,

у3 = min{с31 +y132 +y234 +y4}= min{4+0,3+7,1+2}=3,

у4 = min{с41 +y143 +y345 +y5}= min{2+0,1+3,1+3}=2,

у5 = min{с51 +y154 +y4 }= min{4+0,1+2}=3,

у6 = min{с64 +y465 +y5 }= min{5+2,3+3}=6,

у7 = min{с72 +y273 +y376 +y6}= min{1+7,5+3,3+6}=8,

у8 = min{с87 +y786 +y685 +y5}= min{1+8,4+6,6+3}=9.

Так как было одно изменение в узле 3, просматриваем сначала:

у2 = min{с21 +y123 +y327 +y7}= min{7+0,3+3,1+8}=6,

у3 = min{с31 +y132 +y234 +y4}= min{4+0,3+6,1+2}=3,

у4 = min{с41 +y143 +y345 +y5}= min{2+0,1+3,1+3}=2,

у5 = min{с51 +y154 +y4 }= min{4+0,1+2}=3,

у6 = min{с64 +y465 +y5 }= min{5+2,3+3}=6,

у7 = min{с72 +y273 +y376 +y6}= min{1+6,5+3,3+6}=7,

у8 = min{с87 +y786 +y685 +y5}= min{1+7,4+6,6+3}=8.

Просматривая сначала все узлы, убеждаемся, что более изменений нет, алгоритм закончен, найденные значения являются кратчайшими расстояниями от i-го узла до стока (узла 1).

6

Отметим дуги, на которых достигался минимум выражения (12.1), т.е. такие, для которых справедливо yi = сij + уj. В нашем примере это дуги (8,7), (7,2), (2,3), (3,4), (4,1), (6,5) и (5,4). Они образуют кратчайшие маршруты от каждого узла до стока. Результаты отражены на рис.12.2.

7

  1. 1

    0

3

3 1

4 3 5

2

2

1 1 3 1

6

8

5

4 1 1 3 4

3

6

Рис. 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 +y465 +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

Соседние файлы в папке mat_Gelrud