Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Алгоритм Литтла - метод решения задачи коммивояжера

Лекция



Привет, Вы узнаете о том , что такое алгоритм литтла, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое алгоритм литтла, задачи коммивояжера , настоятельно рекомендую прочитать все из категории Алгоритмы и теория алгоритмов.

алгоритм литтла  применяют для поиска решения  задачи коммивояжера  в виде гамильтонова контура. Данный алгоритм используется для поиска оптимального гамильтонова контура в графе, имеющем N вершин, причем каждая вершина i связана с любой другой вершиной j двунаправленной дугой. Каждой дуге приписан вес Сi,j, причем веса дуг строго положительны (Сi,j0). Веса дуг образуют матрицу стоимости. Все элементы по диагонали матрицы приравнивают к бесконечности (Сj,j=∞).

В случае, если пара вершин i и j не связана между собой (граф не полносвязный), то соответствующему элементу матрицы стоимости приписываем вес, равный длине минимального пути между вершинами i и j. Если в итоге дуга (i, j) войдет в результирующий контур, то ее необходимо заменить соответствующим ей путем. Матрицу оптимальных путей между всеми вершинами графа можно получить применив алгоритм Данцига или Флойда.

Алгоритм Литтала является частным случаем применения метода "ветвей и границ" для конкретной задачи. Общая идея тривиальна: нужно разделить огромное число перебираемых вариантов на классы и получить оценки (снизу – в задаче минимизации, сверху – в задаче максимизации) для этих классов, чтобы иметь возможность отбрасывать варианты не по одному, а целыми классами. Трудность состоит в том, чтобы найти такое разделение на классы (ветви) и такие оценки (границы), чтобы процедура была эффективной.

Алгоритм Литтла

  1. В каждой строке матрицы стоимости найдем минимальный элемент и вычтем его из всех элементов строки. Сделаем это и для столбцов, не содержащих нуля. Получим матрицу стоимости, каждая строка и каждый столбец которой содержат хотя бы один нулевой элемент.
  2. Для каждого нулевого элемента матрицы cij  рассчитаем коэффициент Гi,j, который равен сумме наименьшего элемента i строки (исключая элемент Сi,j=0) и наименьшего элемента j столбца. Из всех коэффициентов  Гi,j выберем такой, который является максимальным Гk,l=max{Гi,j}. В гамильтонов контур вносится соответствующая дуга (k,l).
  3. Удаляем k-тую строку и столбец l, поменяем на бесконечность значение элемента Сl,k (поскольку дуга (k,l) включена в контур, то обратный путь из l в k недопустим).
  4. Повторяем алгоритм шага 1, пока порядок матрицы не станет равным двум.
  5. Затем в текущий ориентированный граф вносим две недостающие дуги, определяющиеся однозначно матрицей прядка 2. Получаем гамильтонов контур.

В ходе решения ведется постоянный подсчет текущего значения нижней границы. Нижняя граница равна сумме всех вычтенных элементов в строках и столбцах. Итоговое значение нижней границы должно совпасть с длиной результирующего контура.

 

 

Алгоритм Литтла - Пример 1

Необходимо найти оптимальный маршрут коммивояжера в графе представленом на рисунке:

Алгоритм Литтла - метод решения задачи коммивояжера

Пронумеруем вершины исходного графа, и составим матрицу длин кратчайших дуг между каждой парой вершин D0, в случае, если дуги между вершиной i и j не существует, элементу di,j матрицы присваивается значение ∞. Исходный граф с пронумероваными вершинами представлен на рисунке ниже.

Алгоритм Литтла - метод решения задачи коммивояжера

Матрица D0:

D0= 0 12 28
12 0 10 43
10 0 10
28 43 17 0
31 10 0 8
14 0 6
6 0

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

12 22 28 32 40 46
12 10 40 20 28 34
22 10 50 10 18 24
28 27 17 27 35 41
32 20 10 60 8 14
46 34 24 74 14 6
52 40 30 80 20 6

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

Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  1 2 3 4 5 6 7
1 0 10 16 20 28 34
2 2 0 30 10 18 24
3 12 0 40 0 8 14
4 11 10 0 10 18 24
5 24 12 2 52 0 6
6 40 28 18 68 8 0
7 46 34 24 74 14 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 3 4 5 6 7
1 0 10 0 20 28 34
2 0 0 14 10 18 24
3 10 0 24 0 8 14
4 9 10 0 10 18 24
5 22 12 2 36 0 6
6 38 28 18 52 8 0
7 44 34 24 58 14 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г1,2=0, Г1,4=14, Г2,1=9, Г2,3=0, Г3,2=0, Г3,5=8, Г4,3=9, Г5,6=2, Г6,7=14, Г7,6=14, 
В результате сравнения мы получили 3 одинаковых максимальных Г=14. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г1,4=14
Удалим из матрицы стоимости строку 1 и столбец 4. Внесем в текущий ориентированный граф дугу (1,4)

  1 2 3 5 6 7
2 0 0 10 18 24
3 10 0 0 8 14
4 9 10 0 10 18 24
5 22 12 2 0 6
6 38 28 18 8 0
7 44 34 24 14 0

В строке 4 и столбце 1 отсутствует элемент равный ∞. Присвоим элементу (4,1) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=87
Нижняя граница равна сумме всех вычтенных элементов в строках и столбцах. Итоговое значение нижней границы должно совпасть с длиной результирующего контура.
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  1 2 3 5 6 7
2 0 0 10 18 24
3 10 0 0 8 14
4 10 0 10 18 24
5 22 12 2 0 6
6 38 28 18 8 0
7 44 34 24 14 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 3 5 6 7
2 0 0 10 18 24
3 10 0 0 8 14
4 10 0 10 18 24
5 22 12 2 0 6
6 38 28 18 8 0
7 44 34 24 14 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г2,1=10, Г2,3=0, Г3,2=10, Г3,5=8, Г4,3=10, Г5,6=2, Г6,7=14, Г7,6=14, 
В результате сравнения мы получили 2 одинаковых максимальных Г=14. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г6,7=14
Удалим из матрицы стоимости строку 6 и столбец 7. Внесем в текущий ориентированный граф дугу (6,7)

  1 2 3 5 6
2 0 0 10 18
3 10 0 0 8
4 10 0 10 18
5 22 12 2 0
7 44 34 24 14 0

В строке 7 и столбце 6 отсутствует элемент равный ∞. Присвоим элементу (7,6) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=87
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  1 2 3 5 6
2 0 0 10 18
3 10 0 0 8
4 10 0 10 18
5 22 12 2 0
7 30 20 10 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 3 5 6
2 0 0 10 18
3 10 0 0 8
4 10 0 10 18
5 22 12 2 0
7 30 20 10 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г2,1=10, Г2,3=0, Г3,2=10, Г3,5=0, Г4,3=10, Г5,6=10, Г7,5=10, 
В результате сравнения мы получили 5 одинаковых максимальных Г=10. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г2,1=10
Удалим из матрицы стоимости строку 2 и столбец 1. Внесем в текущий ориентированный граф дугу (2,1)

  2 3 5 6
3 0 0 8
4 10 0 10 18
5 12 2 0
7 20 10 0

В строке 4 и столбце 2 отсутствует элемент равный ∞. Присвоим элементу (4,2) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=101
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  2 3 5 6
3 0 0 8
4 0 10 18
5 12 2 0
7 20 10 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  2 3 5 6
3 0 0 8
4 0 10 18
5 12 2 0
7 20 10 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г3,2=12, Г3,5=0, Г4,3=12, Г5,6=10, Г7,5=10, 
В результате сравнения мы получили 2 одинаковых максимальных Г=12. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г3,2=12
Удалим из матрицы стоимости строку 3 и столбец 2. Внесем в текущий ориентированный граф дугу (3,2)

  3 5 6
4 0 10 18
5 2 0
7 10 0

В строке 4 и столбце 3 отсутствует элемент равный ∞. Присвоим элементу (4,3) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=101
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  3 5 6
4 0 8
5 2 0
7 10 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  3 5 6
4 0 8
5 0 0
7 8 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г4,5=8, Г5,3=8, Г5,6=8, Г7,5=8, 
В результате сравнения мы получили 4 одинаковых максимальных Г=8. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г4,5=8
Удалим из матрицы стоимости строку 4 и столбец 5. Об этом говорит сайт https://intellect.icu . Внесем в текущий ориентированный граф дугу (4,5)

  3 6
5 0 0
7 8

В строке 5 и столбце 3 отсутствует элемент равный ∞. Присвоим элементу (5,3) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=113
После того, как ранг матрицы становится равным двум мы получае нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=121
Маршрут коммивояжера включает в себя дуги:, (1, 4), (6, 7), (2, 1), (3, 2), (4, 5), (5, 6), (7, 3)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г7,5. Удалим из матрицы стоимости строку 5 и столбец 7. Внесем в текущий ориентированный граф дугу (7,5)
 

  3 6
4 8
5 0 0

В строке 5 и столбце 6 отсутствует элемент равный ∞. Присвоим элементу (5,6) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=121
Маршрут коммивояжера включает в себя дуги:, (1, 4), (6, 7), (2, 1), (3, 2), (7, 5), (4, 6), (5, 3)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г5,6. Удалим из матрицы стоимости строку 6 и столбец 5. Внесем в текущий ориентированный граф дугу (5,6)

  3 5
4 0
7 8 0

В строке 7 и столбце 5 отсутствует элемент равный ∞. Присвоим элементу (7,5) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=121
Маршрут коммивояжера включает в себя дуги:, (1, 4), (6, 7), (2, 1), (3, 2), (5, 6), (4, 5), (7, 3)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г5,3. Удалим из матрицы стоимости строку 3 и столбец 5. Внесем в текущий ориентированный граф дугу (5,3)

  5 6
4 0 8
7 0

В строке 4 и столбце 5 отсутствует элемент равный ∞. Присвоим элементу (4,5) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=121
Маршрут коммивояжера включает в себя дуги:, (1, 4), (6, 7), (2, 1), (3, 2), (5, 3), (4, 6), (7, 5)
----------------------------------------------------------------------

Приводить рассматрение остальных ветвлений алгоритма мы не будем. Скажем сразу, что оптимальное решение нами уже получено (все три контура полученые нами имеют одинаковое значение нижней границы равное 121, следовательно каждый из них задает наилучший маршрут коммивояжера). Рассмотрим первый полученый нами вариант: (1, 4), (6, 7), (2, 1), (3, 2), (7, 5), (4, 6), (5, 3).

Вспомним, что в процессе решения мы заменили некоторые элементы матрицы стоимости (которые по умолчанию являются дугами графа) путями между соответствующими вершинами. Теперь, если такие дуги имеются в составе полученого оптимального контура, необходимо заменить их на эти пути (для этого используется таблица кратчайших путей, полученная предварительно с помощью алгоритма Флойда или Данцига). Дуге (1, 4) соответствует путь (1, 4); дуге (6, 7) - путь(6, 7); дуге (2, 1) соответствует путь (2, 1); дуге (3, 2) - путь (3,2); дуге (5, 3) соответствует путь (5, 3); дуге (7, 5) - путь 7-6-5; дуге (4, 6) - путь 4-3-5-6. То есть оптимальный контур для нашего графа: 1-4-3-5-6-7-6-5-3-2-1 длиной 121 единицу.

 

 

Алгоритм Литтла - Пример 2

Имеется схема расположения N абонентов локальной вычислительной сети. Физическая топология – кольцо.
Необходимо выбрать маршрут организации абонентов в сеть с учетом критерия выбора – минимум затрачиваемого кабеля (цифры даны в метрах).
Число абонентов N=10. Матрица расстояний между абонентами представлена ниже.

0 60.8 58.3 47.2 62.6 40.3 79.1 29.2 40.3 40.3
60.8 0 108.2 105.9 40.3 47.2 91.9 57.0 74.3 74.3
58.3 108.2 0 26.9 87.3 98.6 60.4 51.5 36.4 36.4
47.2 105.9 26.9 0 95.1 84.9 82.0 55.0 47.4 47.4
62.6 40.3 87.3 95.1 0 73.8 54.1 40.3 51.0 51.0
40.3 47.2 98.6 84.9 73.8 0 110.1 60.2 76.5 76.5
79.1 91.9 60.4 82.0 54.1 110.1 0 51.0 40.3 40.3
29.2 57.0 51.5 55.0 40.3 60.2 51.0 0 18.0 18.0
40.3 74.3 36.4 47.4 51.0 76.5 40.3 18.0 0 0
40.3 74.3 36.4 47.4 51.0 76.5 40.3 18.0 0 0

Перейдем от матрицы расстояний к матрице стоимости, присвоив диагональному элементу значения бесконечности. Так-как задача геометрическая, неравенство треугольника для нее выполняется, и мы можем искать решение в виде гамильтонова контура.

60.8 58.3 47.2 62.6 40.3 79.1 29.2 40.3 40.3
60.8 108.2 105.9 40.3 47.2 91.9 57.0 74.3 74.3
58.3 108.2 26.9 87.3 98.6 60.4 51.5 36.4 36.4
47.2 105.9 26.9 95.1 84.9 82.0 55.0 47.4 47.4
62.6 40.3 87.3 95.1 73.8 54.1 40.3 51.0 51.0
40.3 47.2 98.6 84.9 73.8 110.1 60.2 76.5 76.5
79.1 91.9 60.4 82.0 54.1 110.1 51.0 40.3 40.3
29.2 57.0 51.5 55.0 40.3 60.2 51.0 18.0 18.0
40.3 74.3 36.4 47.4 51.0 76.5 40.3 18.0 0
40.3 74.3 36.4 47.4 51.0 76.5 40.3 18.0 0


Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  1 2 3 4 5 6 7 8 9 10
1 31.6 29.1 18 33.4 11.1 49.9 0 11.1 11.1
2 20.5 67.9 65.6 0 6.9 51.6 16.7 34 34
3 31.4 81.3 0 60.4 71.7 33.5 24.6 9.5 9.5
4 20.3 79 0 68.2 58 55.1 28.1 20.5 20.5
5 22.3 0 47 54.8 33.5 13.8 0 10.7 10.7
6 0 6.9 58.3 44.6 33.5 69.8 19.9 36.2 36.2
7 38.8 51.6 20.1 41.7 13.8 69.8 10.7 0 0
8 11.2 39 33.5 37 22.3 42.2 33 0 0
9 40.3 74.3 36.4 47.4 51 76.5 40.3 18 0
10 40.3 74.3 36.4 47.4 51 76.5 40.3 18 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 3 4 5 6 7 8 9 10
1 31.6 29.1 18 33.4 4.2 36.1 0 11.1 11.1
2 20.5 67.9 65.6 0 0 37.8 16.7 34 34
3 31.4 81.3 0 60.4 64.8 19.7 24.6 9.5 9.5
4 20.3 79 0 68.2 51.1 41.3 28.1 20.5 20.5
5 22.3 0 47 54.8 26.6 0 0 10.7 10.7
6 0 6.9 58.3 44.6 33.5 56 19.9 36.2 36.2
7 38.8 51.6 20.1 41.7 13.8 62.9 10.7 0 0
8 11.2 39 33.5 37 22.3 35.3 19.2 0 0
9 40.3 74.3 36.4 47.4 51 69.6 26.5 18 0
10 40.3 74.3 36.4 47.4 51 69.6 26.5 18 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г1,8=4.2, Г2,5=13.8, Г2,6=4.2, Г3,4=27.5, Г4,3=40.4, Г5,2=6.9, Г5,7=19.2, Г5,8=0, Г6,1=18.1, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=18, Г10,9=18, 
Максимальное значение имеет Г4,3=40.4
Удалим из матрицы стоимости строку 4 и столбец 3, и присвоим элементу (3,4) значение бесконечности. Внесем в текущий ориентированный граф дугу (4,3)
 

  1 2 4 5 6 7 8 9 10
1 31.6 18 33.4 4.2 36.1 0 11.1 11.1
2 20.5 65.6 0 0 37.8 16.7 34 34
3 31.4 81.3 0 60.4 64.8 19.7 24.6 9.5 9.5
5 22.3 0 54.8 26.6 0 0 10.7 10.7
6 0 6.9 44.6 33.5 56 19.9 36.2 36.2
7 38.8 51.6 41.7 13.8 62.9 10.7 0 0
8 11.2 39 37 22.3 35.3 19.2 0 0
9 40.3 74.3 47.4 51 69.6 26.5 18 0
10 40.3 74.3 47.4 51 69.6 26.5 18 0


Текущая Нижняя граница=282.9
Нижняя граница равна сумме всех вычтенных элементов в строках и столбцах. Итоговое значение нижней границы должно совпасть с длиной результирующего контура.
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  1 2 4 5 6 7 8 9 10
1 31.6 18 33.4 4.2 36.1 0 11.1 11.1
2 20.5 65.6 0 0 37.8 16.7 34 34
3 21.9 71.8 50.9 55.3 10.2 15.1 0 0
5 22.3 0 54.8 26.6 0 0 10.7 10.7
6 0 6.9 44.6 33.5 56 19.9 36.2 36.2
7 38.8 51.6 41.7 13.8 62.9 10.7 0 0
8 11.2 39 37 22.3 35.3 19.2 0 0
9 40.3 74.3 47.4 51 69.6 26.5 18 0
10 40.3 74.3 47.4 51 69.6 26.5 18 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 4 5 6 7 8 9 10
1 31.6 0 33.4 4.2 36.1 0 11.1 11.1
2 20.5 47.6 0 0 37.8 16.7 34 34
3 21.9 71.8 50.9 55.3 10.2 15.1 0 0
5 22.3 0 36.8 26.6 0 0 10.7 10.7
6 0 6.9 26.6 33.5 56 19.9 36.2 36.2
7 38.8 51.6 23.7 13.8 62.9 10.7 0 0
8 11.2 39 19 22.3 35.3 19.2 0 0
9 40.3 74.3 29.4 51 69.6 26.5 18 0
10 40.3 74.3 29.4 51 69.6 26.5 18 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г1,4=19, Г1,8=0, Г2,5=13.8, Г2,6=4.2, Г3,9=0, Г3,10=0, Г5,2=6.9, Г5,7=10.2, Г5,8=0, Г6,1=18.1, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=18, Г10,9=18, 
Максимальное значение имеет Г1,4=19
Удалим из матрицы стоимости строку 1 и столбец 4. Внесем в текущий ориентированный граф дугу (1,4)
 

  1 2 5 6 7 8 9 10
2 20.5 0 0 37.8 16.7 34 34
3 21.9 71.8 50.9 55.3 10.2 15.1 0 0
5 22.3 0 26.6 0 0 10.7 10.7
6 0 6.9 33.5 56 19.9 36.2 36.2
7 38.8 51.6 13.8 62.9 10.7 0 0
8 11.2 39 22.3 35.3 19.2 0 0
9 40.3 74.3 51 69.6 26.5 18 0
10 40.3 74.3 51 69.6 26.5 18 0

В строке 3 и столбце 1 отсутствует элемент равный ∞. Присвоим элементу (3,1) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=310.4
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  1 2 5 6 7 8 9 10
2 20.5 0 0 37.8 16.7 34 34
3 71.8 50.9 55.3 10.2 15.1 0 0
5 22.3 0 26.6 0 0 10.7 10.7
6 0 6.9 33.5 56 19.9 36.2 36.2
7 38.8 51.6 13.8 62.9 10.7 0 0
8 11.2 39 22.3 35.3 19.2 0 0
9 40.3 74.3 51 69.6 26.5 18 0
10 40.3 74.3 51 69.6 26.5 18 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 5 6 7 8 9 10
2 20.5 0 0 37.8 16.7 34 34
3 71.8 50.9 55.3 10.2 15.1 0 0
5 22.3 0 26.6 0 0 10.7 10.7
6 0 6.9 33.5 56 19.9 36.2 36.2
7 38.8 51.6 13.8 62.9 10.7 0 0
8 11.2 39 22.3 35.3 19.2 0 0
9 40.3 74.3 51 69.6 26.5 18 0
10 40.3 74.3 51 69.6 26.5 18 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г2,5=13.8, Г2,6=26.6, Г3,9=0, Г3,10=0, Г5,2=6.9, Г5,7=10.2, Г5,8=10.7, Г6,1=18.1, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=18, Г10,9=18, 
Максимальное значение имеет Г2,6=26.6
Удалим из матрицы стоимости строку 2 и столбец 6. Внесем в текущий ориентированный граф дугу (2,6)
 

  1 2 5 7 8 9 10
3 71.8 50.9 10.2 15.1 0 0
5 22.3 0 0 0 10.7 10.7
6 0 6.9 33.5 56 19.9 36.2 36.2
7 38.8 51.6 13.8 10.7 0 0
8 11.2 39 22.3 19.2 0 0
9 40.3 74.3 51 26.5 18 0
10 40.3 74.3 51 26.5 18 0

В строке 6 и столбце 2 отсутствует элемент равный ∞. Присвоим элементу (6,2) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=310.4
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  1 2 5 7 8 9 10
3 71.8 50.9 10.2 15.1 0 0
5 22.3 0 0 0 10.7 10.7
6 0 33.5 56 19.9 36.2 36.2
7 38.8 51.6 13.8 10.7 0 0
8 11.2 39 22.3 19.2 0 0
9 40.3 74.3 51 26.5 18 0
10 40.3 74.3 51 26.5 18 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 2 5 7 8 9 10
3 71.8 37.1 10.2 15.1 0 0
5 22.3 0 0 0 10.7 10.7
6 0 19.7 56 19.9 36.2 36.2
7 38.8 51.6 0 10.7 0 0
8 11.2 39 8.5 19.2 0 0
9 40.3 74.3 37.2 26.5 18 0
10 40.3 74.3 37.2 26.5 18 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г3,9=0, Г3,10=0, Г5,2=39, Г5,7=10.2, Г5,8=10.7, Г6,1=30.9, Г7,5=8.5, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=18, Г10,9=18, 
Максимальное значение имеет Г5,2=39
Удалим из матрицы стоимости строку 5 и столбец 2. Внесем в текущий ориентированный граф дугу (5,2)
 

  1 5 7 8 9 10
3 37.1 10.2 15.1 0 0
6 0 19.7 56 19.9 36.2 36.2
7 38.8 0 10.7 0 0
8 11.2 8.5 19.2 0 0
9 40.3 37.2 26.5 18 0
10 40.3 37.2 26.5 18 0

В строке 6 и столбце 5 отсутствует элемент равный ∞. Присвоим элементу (6,5) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=324.2
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  1 5 7 8 9 10
3 37.1 10.2 15.1 0 0
6 0 56 19.9 36.2 36.2
7 38.8 0 10.7 0 0
8 11.2 8.5 19.2 0 0
9 40.3 37.2 26.5 18 0
10 40.3 37.2 26.5 18 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  1 5 7 8 9 10
3 37.1 0 4.4 0 0
6 0 45.8 9.2 36.2 36.2
7 38.8 0 0 0 0
8 11.2 8.5 9 0 0
9 40.3 37.2 16.3 7.3 0
10 40.3 37.2 16.3 7.3 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г3,7=9, Г3,9=0, Г3,10=0, Г6,1=20.4, Г7,5=8.5, Г7,8=4.4, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=7.3, Г10,9=7.3, 
Максимальное значение имеет Г6,1=20.4
Удалим из матрицы стоимости строку 6 и столбец 1. Внесем в текущий ориентированный граф дугу (6,1)
 

  5 7 8 9 10
3 37.1 0 4.4 0 0
7 0 0 0 0
8 8.5 9 0 0
9 37.2 16.3 7.3 0
10 37.2 16.3 7.3 0

В строке 3 и столбце 5 отсутствует элемент равный ∞. Присвоим элементу (3,5) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=345.1
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки. Получим матрицу представленную ниже.

  5 7 8 9 10
3 0 4.4 0 0
7 0 0 0 0
8 8.5 9 0 0
9 37.2 16.3 7.3 0
10 37.2 16.3 7.3 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  5 7 8 9 10
3 0 4.4 0 0
7 0 0 0 0
8 8.5 9 0 0
9 37.2 16.3 7.3 0
10 37.2 16.3 7.3 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г3,7=9, Г3,9=0, Г3,10=0, Г7,5=8.5, Г7,8=4.4, Г7,9=0, Г7,10=0, Г8,9=0, Г8,10=0, Г9,10=7.3, Г10,9=7.3, 
Максимальное значение имеет Г3,7=9
Удалим из матрицы стоимости строку 3 и столбец 7. Внесем в текущий ориентированный граф дугу (3,7)
 

  5 8 9 10
7 0 0 0 0
8 8.5 0 0
9 37.2 7.3 0
10 37.2 7.3 0

В строке 7 и столбце 5 отсутствует элемент равный ∞. Присвоим элементу (7,5) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=345.1
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  5 8 9 10
7 0 0 0
8 8.5 0 0
9 37.2 7.3 0
10 37.2 7.3 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  5 8 9 10
7 0 0 0
8 0 0 0
9 28.7 7.3 0
10 28.7 7.3 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г7,8=7.3, Г7,9=0, Г7,10=0, Г8,5=28.7, Г8,9=0, Г8,10=0, Г9,10=7.3, Г10,9=7.3, 
Максимальное значение имеет Г8,5=28.7
Удалим из матрицы стоимости строку 8 и столбец 5. Внесем в текущий ориентированный граф дугу (8,5)
 

  8 9 10
7 0 0 0
9 7.3 0
10 7.3 0

В строке 7 и столбце 8 отсутствует элемент равный ∞. Присвоим элементу (7,8) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=353.6
Найдем минимальные элементы в каждой строке и затем вычтем его из остальных элементов строки (минимальные элементы записаны напротив соответствующих строк). Получим матрицу представленную ниже.

  8 9 10
7 0 0
9 7.3 0
10 7.3 0


То же проделаем и со столбцами, не содержащими нуля. Получим матрицу, содержащую нули в каждой строке и каждом столбце.

  8 9 10
7 0 0
9 0 0
10 0 0


Для каждого нулевого элемента рассчитаем значение Гij, равное сумме наименьшего элемента i строки (исключая элемент Сij=0) и наименьшего элемента j столбца.
Г7,9=0, Г7,10=0, Г9,8=0, Г9,10=0, Г10,8=0, Г10,9=0, 
В результате сравнения мы получили 6 одинаковых максимальных Г=0. Это означает что алгоритм разветвляется и мы должны рассмотреть все получившиеся варианты поочередно.Рассмотрим вариант Г9,8=0
Удалим из матрицы стоимости строку 9 и столбец 8. Внесем в текущий ориентированный граф дугу (9,8)

  9 10
7 0 0
10 0

В строке 7 и столбце 9 отсутствует элемент равный ∞. Присвоим элементу (7,9) значение бесконечности чтобы избежать преждевременногог замыкания контура.
Текущая Нижняя граница=360.9
После того, как ранг матрицы становится равным двум мы получае нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (9, 8), (7, 10), (10, 9)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г10,9. Удалим из матрицы стоимости строку 9 и столбец 10. Внесем в текущий ориентированный граф дугу (10,9)
 

  8 10
7 0
9 0 0

В строке 7 и столбце 8 отсутствует элемент равный ∞. Присвоим элементу (7,8) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (10, 9), (7, 10), (9, 8)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г10,8. Удалим из матрицы стоимости строку 8 и столбец 10. Внесем в текущий ориентированный граф дугу (10,8)
 

  9 10
7 0 0
9 0

В строке 7 и столбце 9 отсутствует элемент равный ∞. Присвоим элементу (7,9) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (10, 8), (7, 9), (9, 10)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г9,10. Удалим из матрицы стоимости строку 10 и столбец 9. Внесем в текущий ориентированный граф дугу (9,10)
 

  8 9
7 0
10 0 0

В строке 7 и столбце 8 отсутствует элемент равный ∞. Присвоим элементу (7,8) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (9, 10), (7, 9), (10, 8)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г7,10. Удалим из матрицы стоимости строку 10 и столбец 7. Внесем в текущий ориентированный граф дугу (7,10)
 

  8 9
9 0
10 0 0

В строке 9 и столбце 8 отсутствует элемент равный ∞. Присвоим элементу (9,8) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (7, 10), (9, 8), (10, 9)
-------------------------------------------------------------------------
Вернемся к возникшему у нас ветвлению и рассмотрим случай при котором максимальное значение имеет Г7,9. Удалим из матрицы стоимости строку 9 и столбец 7. Внесем в текущий ориентированный граф дугу (7,9)
 

  8 10
9 0 0
10 0

В строке 9 и столбце 8 отсутствует элемент равный ∞. Присвоим элементу (9,8) значение бесконечности чтобы избежать преждевременногог замыкания контура.
После того, как ранг матрицы становится равным двум мы получаем нули в каждой ее строке и столбце (добавив как и ранее вычтеные элементы матрицы к нижней границе), и добавляем к маршруту комивояжера дуги которым соответствуют нулевые элементы.
НГр=360.9
Маршрут коммивояжера включает в себя дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (7, 9), (9, 10), (10, 8)
-------------------------------------------------------------------------


Мы рассмотрели все возможные ветви алгоритма, теперь необходимо выбрать из полученых в результате рассмотрения каждой ветви значений нижней границы - минимальное. Это и будет оптимальной длиной пути коммивояжера
Минимальное значение имеет НГр=360.9
Соответствующий оптимальный контур включет дуги:, (4, 3), (1, 4), (2, 6), (5, 2), (6, 1), (3, 7), (8, 5), (9, 8), (7, 10), (10, 9)

Анализ данных, представленных в статье про алгоритм литтла, подтверждает эффективность применения современных технологий для обеспечения инновационного развития и улучшения качества жизни в различных сферах. Надеюсь, что теперь ты понял что такое алгоритм литтла, задачи коммивояжера и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмы и теория алгоритмов

создано: 2017-12-22
обновлено: 2021-03-13
132304



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии

Saliha
14-11-2023
Я хочу выразить свою глубокую благодарность автору супер статьи про метод Литтла, который оказался невероятно эффективным и удивительно интуитивным способом решения задачи коммивояжера. Этот алгоритм покорил меня своей простотой и точностью в нахождении оптимального пути для обхода множества точек. Что меня поразило, так это исключительная гибкость метода Литтла. Этот алгоритм легко адаптируется к различным размерам и структурам задач, что делает его универсальным инструментом для решения проблемы коммивояжера в различных областях. Благодаря этой универсальности, я смог решить задачи разного масштаба – от небольших городских карт до сложных маршрутов в крупных логистических системах. Особенно хочу подчеркнуть его высокую эффективность. Метод Литтла предоставляет не только оптимальные решения, но и делает это в разумные временные рамках, что является ключевым фактором в современных условиях, где время - это важный ресурс. Помимо этого, алгоритм Литтла легок в понимании и использовании. Его простота делает его доступным даже для тех, кто только начинает знакомиться с алгоритмами решения задач оптимизации. Я бы порекомендовал метод Литтла всем, кто сталкивается с задачами коммивояжера и ищет эффективный и удобный инструмент для их решения. В общем, метод Литтла - это не просто алгоритм, это настоящий помощник, открывающий новые горизонты в решении задач маршрутизации. Спасибо за этот потрясающий инструмент, который существенно облегчил мою работу и улучшил результаты моих проектов.

Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Алгоритмы и теория алгоритмов

Термины: Алгоритмы и теория алгоритмов