Матрица расстояний и километровых выигрышей
Матрица расстояний между пунктами (dij), км | |||||||||||||
Матрица километровых выигрышей (sij), км | 0 | 7,0 | 4,0 | 12,4 | 5,1 | 12,0 | 7,3 | 6,1 | 14,8 | 7,3 | 5,0 | 9,2 | 7,3 |
0,0 | 1 | 11,0 | 12,6 | 9,4 | 8,2 | 11,4 | 13,0 | 13,0 | 8,6 | 11,4 | 2,8 | 8,6 | |
0,0 | 0,0 | 2 | 13,9 | 5,8 | 15,3 | 7,3 | 2,2 | 17,0 | 9,2 | 3,0 | 13,2 | 9,2 | |
0,0 | 6,7 | 2,5 | 3 | 17,5 | 7,2 | 7,1 | 14,2 | 4,1 | 19,0 | 11,4 | 15,2 | 5,1 | |
0,0 | 2,7 | 3,3 | 0,0 | 4 | 16,4 | 12,0 | 7,8 | 19,7 | 3,6 | 8,5 | 10,4 | 12,4 | |
0,0 | 10,8 | 0,8 | 17,2 | 0,7 | 5 | 11,0 | 16,6 | 5,4 | 16,6 | 13,9 | 10,0 | 7,1 | |
0,0 | 2,9 | 4,0 | 12,6 | 0,3 | 8,3 | 6 | 7,2 | 10,8 | 14,6 | 4,5 | 14,2 | 4,0 | |
0,0 | 0,0 | 7,8 | 4,2 | 3,4 | 1,6 | 6,2 | 7 | 17,7 | 11,3 | 2,8 | 15,3 | 10,0 | |
0,0 | 8,8 | 1,7 | 23,0 | 0,2 | 21,4 | 11,2 | 3,2 | 8 | 20,6 | 14,9 | 15,1 | 7,8 | |
0,0 | 5,7 | 2,1 | 0,6 | 8,8 | 2,8 | 0,0 | 2,0 | 1,4 | 9 | 11,7 | 8,6 | 14,0 | |
0,0 | 0,6 | 6,0 | 6,0 | 1,6 | 3,1 | 7,8 | 8,3 | 4,9 | 0,6 | 10 | 13,9 | 7,2 | |
0,0 | 13,4 | 0,1 | 6,4 | 3,9 | 11,3 | 2,3 | 0,0 | 8,9 | 7,9 | 0,3 | 11 | 11,4 | |
0,0 | 5,7 | 2,1 | 14,6 | 0,0 | 12,3 | 10,6 | 3,4 | 14,2 | 0,6 | 5,1 | 5,1 | 12 |
Теперь, когда проведена вся необходимая подготовительная работа, приступим непосредственно к решению задачи.
Воспользуемся алгоритмом Кларка-Райта. Здесь приводится только пошаговое описание алгоритма. Демонстрация использования данного алгоритма применительно к рассматриваемой задаче приводится в таблице 5 и соответствующих комментариях к ней.
Шаг 1. На матрице километровых выигрышей находим ячейку (i*, j*) с максимальным километровым выигрышем Smax:
,
При этом должны соблюдаться следующие три условия:
|
|
1) пункты i* и j* не входят в состав одного и того же маршрута;
2) пункты i* и j* являются начальным и/или конечным пунктом тех маршрутов, в состав которых они входят;
3) ячейка (i*, j*) не заблокирована (т.е. рассматривалась на предыдущих шагах алгоритма).
Если удалось найти такую ячейку, которая удовлетворяет трем указанным условиям, то переход к шагу 2. Если не удалось, то переход к шагу 6.
Шаг 2. Маршрут, в состав которого входит пункт i*, обозначим как маршрут 1. Соответственно, маршрут, в состав которого входит пункт j*, обозначим как маршрут 2. Введем следующие условные обозначения:
N = {1, 2, …, n} – множество получателей; N1 (N1 Ì N) – подмножество пунктов, входящих в состав маршрута 1; N2 (N2 Ì N) – подмножество пунктов, входящих в состав маршрута 2.
Очевидно, что i* Î N1, j* Î N2 и N1 Ç N2= Æ (согласно шагу 1, условие 1).
Рассчитаем суммарный объем поставок по маршрутам 1 и 2:
и ,
где qk – объем спроса k-го пункта, шт (см табл. 3).
Шаг 3. Проверим на выполнение следующее условие:
q1 + q2 £ c
где c – грузовместимость автомобиля, шт.
Если условие выполняется, то переход к шагу 4, если нет – к шагу 5.
Шаг 4.Производим объединение маршрутов 1 и 2 в один общий кольцевой маршрут X. Будем считать, что пункт i* является конечным пунктом маршрута 1, а пункт j* – начальным пунктом маршрута 2. При объединении маршрутов 1 и 2 соблюдаем следующие условия:
|
|
последовательность расположения пунктов на маршруте 1 от начала и до пункта i* не меняется;
пункт i* связывается с пунктом j*;
последовательность расположения пунктов на маршруте 2 от пункта j* и до конца не меняется.
Шаг 5. Повторяем шаги 1-4 до тех пор, пока при очередном повторении не удастся найти Smax, который удовлетворяет трем условиям из шага 1.
Шаг 6. Рассчитываем суммарный пробег автотранспорта.
Теперь рассмотрим применение этого алгоритма к рассматриваемой задаче. Весь ход последовательного решения задачи представлен в таблице 5.
Таблица 3.4
Решение задачи развозки методом Кларка-Райта
№ п/п | Шаг 1 | Шаг 2 | Шаг 3 | Шаг 4 | |||||||
i* | j* | Smax | Условия | q1 | q2 | q1+q2 £ c? | № маршрута | Маршрут | |||
1 | 2 | 3 | |||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1 | 8 | 3 | 23,0 | + | + | + | 200 | 400 | + | 1 | 0-3-8-0 |
2 | 8 | 5 | 21,4 | + | + | + | 600 | 150 | + | 1 | 0-3-8-5-0 |
3 | 5 | 3 | 17,2 | - | + | + | - | - | - | - | - |
4 | 12 | 3 | 14,6 | + | + | + | 550 | 750 | + | 1 | 0-12-3-8-5-0 |
5 | 12 | 8 | 14,2 | - | - | + | - | - | - | - | - |
6 | 11 | 1 | 13,4 | + | + | + | 475 | 450 | + | 2 | 0-1-11-0 |
7 | 6 | 3 | 12,6 | + | - | + | - | - | - | - | - |
8 | 12 | 5 | 12,3 | - | + | + | - | - | - | - | - |
9 | 11 | 5 | 11,3 | + | + | + | 925 | 1300 | - | - | - |
10 | 8 | 6 | 11,2 | + | - | + | - | - | - | - | - |
11 | 5 | 1 | 10,8 | + | + | + | 1300 | 925 | - | - | - |
12 | 12 | 6 | 10,6 | + | + | + | 1300 | 450 | - | - | - |
13 | 11 | 8 | 8,9 | + | - | + | - | - | - | - | - |
14 | 9 | 4 | 8,8 | + | + | + | 450 | 200 | + | 3 | 0-9-4-0 |
15 | 8 | 1 | 8,8 | + | - | + | - | - | - | - | - |
16 | 6 | 5 | 8,3 | + | + | + | 450 | 1300 | - | - | - |
17 | 10 | 7 | 8,3 | + | + | + | 300 | 250 | + | 4 | 0-7-10-0 |
18 | 11 | 9 | 7,9 | + | + | + | 925 | 650 | - | - | - |
19 | 7 | 2 | 7,9 | + | + | + | 550 | 400 | + | 4 | 0-2-7-10-0 |
20 | 10 | 6 | 7,8 | + | + | + | 950 | 450 | + | 4 | 0-2-7-10-6-0 |
Комментарии к таблице 5
|
|
Графа 1 – номер итерации
Графы 2, 3 – номера пунктов i* и j*, которые обозначают ячейку с максимальным километровым выигрышем Smax = s(i*,j*), найденную в результате просмотра матрицы километровых выигрышей (таблица 4).
Графа 4 – значение максимального километрового выигрыша Smax
Графы 5, 6 и 7 – результаты проверки условий 1, 2 и 3 при выполнении шага 1. “+” – положительный результат, “–” – отрицательный результат.
Графы 8 и 9 – объем перевозок по маршруту 1, в состав которого входит пункт i* (q1), и маршруту 2, в состав которого входит пункт j* (q2).
|
|
Графа 10 – проверка на условие q1 + q2 £ c, где c – грузовместимость транспортного средства. “+” – положительный результат проверки условия, “–” – отрицательный результат.
Графа 11 – порядковый номер кольцевого маршрута (всего в ходе решения получено всего четыре кольцевых маршрута, см. рис. 6).
Графа 12 – структура кольцевого маршрута, образовавшегося на данной итерации.
Рассмотрим, как происходит поэтапный поиск оптимального решения задачи.
Начнем с того, что исходный план развозки состоит из 12 радиальных маршрутов, когда доставка груза в каждый из пунктов назначения осуществляется по отдельному маршруту (см. рис. 4). При этом общий пробег автотранспорта составляет (см. треугольную матрицу расстояний, табл. 4):
L0 = 2 ´ d01 + 2 ´ d02 + … + 2 ´ d0,12 = 2 ´ 7,0 + 2 ´ 4,0 + … + 2 ´ 7,3 = 195 км
Теперь начнем пошаговый переход к новому оптимальному решению задачи, которое за счет объединения радиальных маршрутов в кольцевые позволит уменьшить суммарный пробег автотранспорта (графически это новое решение представлено на рис. 6).
Итерация 1. Объединяем два радиальных маршрута: 0-8-0 (объем доставки 200 шт.) и 0-3-0 (объем доставки 400 шт.) в общий кольцевой маршрут (под № 1) 0-8-3-0 (объем доставки 600 шт.). При этом суммарный пробег автотранспорта сокращается на 23,0 км.
Итерация 2. К кольцевому маршруту № 1 – 0-8-3-0 (600 шт.) присоединяем радиальный маршрут 0-5-0 (150 шт.). При этом пункт 5 присоединяем к пункту 8, в результате чего получаем новую структуру кольцевого маршрута 0-5-8-3-0 (750 шт.). Суммарный пробег автотранспорта сокращается еще на 21,4 км.
Отметим важность соблюдения последовательности пунктов в кольцевом маршруте: именно 0-5-8-3-0, а не 0-5-3-8-0 или 0-8-3-5-0. Если i* = 5 и j* = 8, то после объединения они должны стоять на маршруте друг за другом.
Итерация 3.Объединение пунктов 3 и 5 обеспечило бы выигрыш в 17,2 км. Но это объединение невозможно, поскольку оба пункта уже входят в состав кольцевого маршрута №1 – 0-5-8-3-0, а объединять можно пункты только из разных маршрутов. Таким образом, констатируем нарушение условия 1 и переходим к следующей итерации.
Итерация 4.Ккольцевому маршруту № 1 – 0-5-8-3-0 (750 шт.) присоединяем радиальный маршрут 0-12-0 (150 шт.). При этом пункт 12 присоединяем к пункту 3, в результате чего получаем новую структуру кольцевого маршрута 0-5-8-3-12-0 (1300 шт.). Суммарный пробег автотранспорта сокращается на 14,6 км.
Итерация 5. Пункты 12 и 8 не объединяем, поскольку они уже входят в состав кольцевого маршрута 1 (нарушается условие 1).
Итерация 6.Объединяем два радиальных маршрута: 0-11-0 (475 шт.) и 0-1-0 (450 шт.) в общий кольцевой маршрут (под № 2) 0-11-1-0 (925 шт.). При этом суммарный пробег автотранспорта сокращается на 13,4 км.
Итерация 7. Пункты 3 и 6 нельзя объединить по причине нарушения условия 2. Пункт 3 входит в состав кольцевого маршрута 1, и в этом маршруте он занимает «промежуточное» положение, то есть он связан с пунктами 8 и 12: 0-5-8-3-12-0. Радиальный маршрут 0-6-0 можно было бы присоединить к кольцевому маршруту 1 со стороны его «крайних» пунктов – 5 или 12, но к «промежуточным» пунктам 3 и 8 его присоединить нельзя.
Итерации с 8 по 20 повторяют ту же логику рассуждений, что и в предыдущих 7 итерациях. Отметим только, что на итерациях 9, 11, 12, 16 и 18 объединение не производится только по причине нарушения условия q1 + q2 £ c.
Итерации с 21 по 60 уже не имеют смысла, поскольку их выполнение уже не повлечет за собой изменение плана развозки.
Суммарный километровый выигрыш за 20 итераций составляет:
S = 23,0 + 21,4 + 14,6 + 13,4 + 8,8 + 8,3 + 7,9 + 7,8 = 105,3 км
а общий пробег автотранспорта, соответственно:
L1 = L0 – S = 195 –105,3 = 89,7 км
Графически оптимальная схема развозки представлена на рис. 6. Как видно, оптимальная схема развозки включает в себя четыре кольцевых маршрута (вместо первоначальных 12 радиальных маршрутов). Суммарный пробег автотранспорта можно также определить по следующей формуле:
,
где Li – протяженность i-го маршрута, км; r – количество маршрутов.
Рассмотрим, например, кольцевой маршрут 0-3-8-5-12-0. Протяженность маршрута определяется по формуле (см. табл. 4):
L1 = d0,12 + d12,3 + d3,8 + d8,5 + d5,0 = 7,3 + 5,1 + 4,1 + 5,4 + 12,0 = 33,9 км.
Аналогично рассчитываем протяженность остальных маршрутов. Результаты расчетов сведены в таблицу 6:
Таблица 3.5
Дата добавления: 2018-06-01; просмотров: 886; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!