Сербин В.Д. Основы логистики: Методы планирования работы внутризаводского транспортаИсходной информацией для решения задачи являются условные схемы размещения пунктов, которые должны быть включены в маршрут, и матрица расстояний C = (cij) между этими пунктами, (см. табл. 4.1) в километрах. Рассмотрим решение задачи построения кольцевого маршрута на примере. Исходными данными для примера будут данные табл.4.1. Алгоритм решения состоит из нескольких шагов. Таблица 4.1
Шаг 1. Исходную матрицу (треугольная матрица (табл. 4.1)) заполним так, чтобы матрица стала симметричной по отношению к главной диагонали (табл.4.2). Таблица 4.2
Шаг 2. Получение приведенной матрицы. Приведенной будем называть такую матрицу, которая имеет хотя бы один нулевой элемент. Для получения приведенной матрицы в каждой строке находим минимальный элемент и выписываем его с правой стороны матрицы. Это вектор-столбец вида (3, 3, 6, 5, 4) (см. табл.4.1). Из элементов соответствующей строки вычитаем минимальное значение элемента этой строки и получаем приведенную матрицу по строкам (см. табл. 4.3). Таблица 4.3
Затем в каждом столбце находим минимальный элемент и выписываем их внизу матрицы. Это вектор-строка вида (0, 0, 2, 2, 0) (см. табл.4.3). Из элементов соответствующего столбца вычитается минимальное значение элемента этого столбца, и получают приведенную матрицу (табл.4.4). Математически доказано, что сделанные описанным способом процедуры получения приведенной матрицы (табл. 4.4) сохраняют свойства исходной матрицы. Элемент приведенной матрицы cij будем называть полюсом, если cij = 0. Таблица 4.4
Шаг 3. Последовательно для каждого полюса выполним следующее: - для строки i0, где находится полюс, находим минимальный элемент этой строки, исключая значение только для самого этого полюса: - для столбца j0, где находится полюс, находим минимальный элемент этого столбца, исключая значение только для самого этого полюса. Находим значение параметра d( i0, j0) по формуле d( i0, j0) = min ( cij) + min( cij ). Имеем: Шаг 4. Находим параметр h(i0,j0) по формуле h(i0,j0) = max ( dij ). Если таких значений будет несколько, можно выбрать любое. Выбранный параметр h(i0,j0) показывает направление движения: нужно двигаться из пункта i0 в пункт j0. Чтобы не было возврата, делаем запрет, полагая c(j0,i0) = \\\\. В нашем примере имеем h35 = 3 и h53 = 3. Возьмем первый случай: h(i0,j0) = h35 . Так как i0 = 3, а j0 = 5, то будем двигаться из пункта 3 в пункт 5 (см. рис. 4.1а.). В этом случае запрет будет иметь вид с53=\\\\. Шаг 5. Вычеркиваем строку i0 и столбец j0, сохраняя номера строк и столбцов матрицы неизменными. Для нашего примера это будет матрица табл. 4.5. Таблица 4.5
Шаг 6. Если после вычеркивания в полученной матрице нет ни одного полюса, то необходимо создать полюса, применяя процедуры, описанные для шага 2. Получив приведенную матрицу, в которой имеются полюса, переходим к шагу 3. Если после вычеркивания получаем матрицу (2Х2), то эту матрицу будем называть тривиальной, так как она позволяет однозначно достроить маршрут до кольцевого маршрута и получить решение задачи. Рассмотрим последовательность действий для нашего примера. Таблица 4.6
Так как в табл. 4.6 имеются полюса, то для каждого полюса находим d-параметры: d12= 2 + 0 = 2, Находим h-параметр. Получим: h(i0,j0) = d51 = 3. Вычеркиваются строка i0 = 5 и столбец j0 = 1 и полагаем элемент c15=\\\\ (в нашем случае этот элемент отсутствует). Проводим стрелку от пункта 5 к пункту 1, согласно процедуре шага 4 (см. рис. 4.1б.). Однако чтобы избежать зацикливания 3 - 5 - 1 - 3, полагаем с13=\\\\. После этого составляется новая матрица (табл. 4.7). Таблица 4.7
Так как в табл. 4.7 имеются полюса, снова рассчитываем d- и h-параметры. Получим: d12 = 2 + 0 = 2, Анализ полученных значений дает h(i0,j0) = d24 = 5. Организуем перевозку из пункта 2 в пункт 4 (см. рис. 4.1в.). Вычеркивается строка i0 = 2 и столбец j0 = 4. Чтобы избежать зацикливания, полагаем с42=\\\\. Получаем матрицу табл. 4.8. Таблица 4.8
Получена тривиальная матрица (2х2). По значениям этой матрицы строим две связи: 1 – 2 (т. к. по табл. 4.8 «расстояние» между этими пунктами самое короткое) и 4 – 3, чтобы получить замкнутый циклический маршрут (рис. 4.1г. и 4.1д. соответственно). Протяженность кольцевого маршрута составляет 28 км. Это можно проверить по исходным данным табл. 4.1, обходя по контуру маршрута, начиная с пункта 3: L = 6 + 4 + 3 + 5 + 10 = 28 (км).
Рис. 4.1. Результаты конструирования маршрута (по шагам) |