МОИМ СТУДЕНТАМ:
 
 
   18.11.2013   61 476   2  

Задача коммивояжера - метод ветвей и границ


Задача коммивояжера Одна из самых известных и важных задач транспортной логистики (и класса задач оптимизации в целом) – задача коммивояжера (англ. «Travelling salesman problem», TSP). Также встречается название «задача о бродячем торговце». Суть задачи сводится к поиску оптимального, то есть кратчайшего пути проходящего через некие пункты по одному разу. Например, задача коммивояжера может применяться для нахождения самого выгодного маршрута, позволяющего коммивояжеру объехать определенные города со своим товаром по одному разу и вернуться в исходную точку. Мерой выгодности маршрута будет минимальное время, проведенное в пути, минимальные расходы на дорогу или, в простейшем случае, минимальная длина пути.

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

Общий план решения задачи коммивояжера

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

  1. Построение матрицы с исходными данными.
  2. Нахождение минимума по строкам.
  3. Редукция строк.
  4. Нахождение минимума по столбцам.
  5. Редукция столбцов.
  6. Вычисление оценок нулевых клеток.
  7. Редукция матрицы.
  8. Если полный путь еще не найден, переходим к пункту 2, если найден к пункту 9.
  9. Вычисление итоговой длины пути и построение маршрута.

Подробная методика решения задачи коммивояжера

В целях лучшего понимания задачи будем оперировать не понятиями графа, его вершин и т.д., а понятиями простыми и максимально приближенными к реальности: вершины графа будут называться «города», ребра их соединяющие – «дороги».

Итак, методика решения задачи коммивояжера:

1. Построение матрицы с исходными данными 

Сначала необходимо длины дорог соединяющих города представить в виде следующей таблицы:

Задача коммивояжера - 1

В нашем примере у нас 4 города и в таблице указано расстояние от каждого города к 3-м другим, в зависимости от направления движения (т.к. некоторые ж/д пути могут быть с односторонним движением и т.д.).

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

2. Нахождение минимума по строкам 

Находим минимальное значение в каждой строке (di) и выписываем его в отдельный столбец.

Задача коммивояжера - 2

3. Редукция строк 

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

Задача коммивояжера - 3

В итоге в каждой строке будет хотя бы одна нулевая клетка.

4. Нахождение минимума по столбцам 

Далее находим минимальные значения в каждом столбце (dj). Эти минимумы выписываем в отдельную строку.

Задача коммивояжера - 4

5. Редукция столбцов 

Вычитаем из каждого элемента матрицы соответствующее ему dj.

Задача коммивояжера - 5

В итоге в каждом столбце будет хотя бы одна нулевая клетка.

6. Вычисление оценок нулевых клеток 

Для каждой нулевой клетки получившейся преобразованной матрицы находим «оценку». Ею будет сумма минимального элемента по строке и минимального элемента по столбцу, в которых размещена данная нулевая клетка. Сама она при этом не учитывается. Найденные ранее di и dj не учитываются. Полученную оценку записываем рядом с нулем, в скобках.

Задача коммивояжера - 6

И так по всем нулевым клеткам:

Задача коммивояжера - 7

7. Редукция матрицы 

Выбираем нулевую клетку с наибольшей оценкой. Заменяем ее на «М». Мы нашли один из отрезков пути. Выписываем его (от какого города к какому движемся, в нашем примере от 4-ого к 2-му).

Задача коммивояжера - 8

Ту строку и тот столбец, где образовалось две «М» полностью вычеркиваем. В клетку соответствующую обратному пути ставим еще одну букву «М» (т.к. мы уже не будем возвращаться обратно).

Задача коммивояжера - 9

8. Если полный путь еще не найден, переходим к пункту 2, если найден к пункту 9 

Если мы еще не нашли все отрезки пути, то возвращаемся ко 2-му пункту и вновь ищем минимумы по строкам и столбцам, проводим их редукцию, считаем оценки нулевых клеток и т.д.

Если все отрезки пути найдены (или найдены еще не все отрезки, но оставшаяся часть пути очевидна) – переходим к пункту 9.

9. Вычисление итоговой длины пути и построение маршрута 

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

В нашем примере маршрут получился следующий: 42314.

Общая длина пути: L = 30.

Практическое применение задачи коммивояжера

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

Решение задачи коммивояжера онлайн

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

Галяутдинов Р.Р.


 © Копирование материала допустимо только при указании прямой гиперссылки на источник: Галяутдинов Р.Р.


Орфография

Нашли опечатку? Помогите сделать статью лучше! Выделите орфографическую ошибку мышью и нажмите Ctrl+Enter.

Цитирование

Библиографическая запись для цитирования статьи по ГОСТ Р 7.0.5-2008:
Галяутдинов Р.Р. Задача коммивояжера - метод ветвей и границ // Сайт преподавателя экономики. [2013]. URL: http://galyautdinov.ru/post/zadacha-kommivoyazhera (дата обращения: 23.01.2017).

Еще можно почитать:


КОММЕНТАРИИ
#12 Ахмет Абилхамит   (гость) 00:14:16 02-04-2016

Было очень интересно, научился хорошей методике расчета кратчайшего пути. Спасибо за полезную статью.

#13  Руслан Рамилевич 14:06:17 26-04-2016

Ахмет, спасибо за отзыв! Рад, если статья пригодилась.



  ОСТАВЬТЕ КОММЕНТАРИЙ:

  Авторизуйтесь, пожалуйста:   
 

* Внимание! В гостевом режиме все комментарии проходят модерацию.
   Если при авторизации произошел сбой, обновите страницу и попробуйте еще раз.

 

 
   
Формулы ФОРМУЛЫ
Термины ТЕРМИНЫ
Бухучет БУХУЧЕТ
Налоги НАЛОГИ
Статистика СТАТИСТИКА
Биографии БИОГРАФИИ
Задачи ЗАДАЧИ
ENGLISH
  Галяутдинов Руслан Рамилевич

ГАЛЯУТДИНОВ
Руслан Рамилевич

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

Почта
 
 
 
Курсы валют ЦБ РФ
СейчасБудет
Курс доллара0.000.00
Курс евро0.000.00
Товарные рынки
BIDASK
Золото0.000.00
Серебро0.000.00
Платина0.000.00
Нефть Brent0.000.00
  Обзорные лекции к ГОСам по специальности 'Экономика и управление на предприятии' Решение задачи коммивояжера онлайн