ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.04.2019
Просмотров: 263
Скачиваний: 1
Имеется
необходимость посетить n городов в ходе
деловой поездки. Спланировать поездку
нужно так, чтобы, переезжая из города в
город, побывать в каждом не более одного
раза и вернуться в исходный город.
Определить оптимальный маршрут посещения
городов и его минимальное расстояние.
Задана
матрица расстояний между городами cij.
Решение
проводим с помощью калькулятора Решение
задачи коммивояжера.
Возьмем в качестве произвольного
маршрута:
X0 =
(1,2);(2,3);(3,4);(4,5);(5,6);(6,7);(7,1)
Тогда F(X0)
= 20 + 20 + 16 + 9 + 21 + 18 + 12 = 116
Для определения
нижней границы множества воспользуемся
операцией редукции или приведения
матрицы по строкам, для чего необходимо
в каждой строке матрицы D найти минимальный
элемент.
di =
min(j) dij
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Затем
вычесть его из элементов рассматриваемой
строки. В связи с этим во вновь полученной
матрице в каждой строке будет как минимум
один ноль.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Затем
такую же операцию редукции проводим по
столбцам, для чего в каждом столбце
находим минимальный элемент:
d j =
min(i) dij
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После
вычитания минимальных элементов получаем
полностью редуцированную матрицу, где
величины di,
dj называются
константами приведения.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сумма
констант приведения определяет нижнюю
границу H:
H
= 13+12+14+9+12+11+9+0+0+0+2+0+1+0 = 83
Элементы
матрицы dij соответствуют
расстоянию от пункта i до пункта
j.
Поскольку
в матрице n городов, то D является матрицей
nxn с неотрицательными элементами
d ij >=0
Каждый
допустимый маршрут представляет собой
цикл, по которому коммивояжер посещает
город только один раз и возвращается в
исходный город.
Длина
маршрута определяется выражением:
Причем
каждая строка и столбец входят в маршрут
только один раз с элементом dij .
Определяем
ребро ветвления и
разобьем все множество маршрутов
относительно этого ребра на два
подмножества (i,j) и (i*,j*).
С
этой целью для всех клеток матрицы с
нулевыми элементами заменяем поочередно
нули на М(бесконечность) и определяем
для них сумму образовавшихся констант
приведения, они приведены в скобках.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d(1,5)
= 1 + 0 = 1; d(2,5) = 0 + 0 = 0; d(2,6) = 0 + 2 = 2; d(3,2) = 0 + 0 =
0; d(3,4) = 0 + 1 = 1; d(3,7) = 0 + 0 = 0; d(4,2) = 0 + 0 = 0; d(4,5)
= 0 + 0 = 0; d(5,2) = 0 + 0 = 0; d(5,7) = 0 + 0 = 0; d(6,1) = 0 + 2 =
2; d(6,2) = 0 + 0 = 0; d(7,3) = 3 + 5 = 8;
Наибольшая
сумма констант приведения равна (3 + 5) =
8 для ребра (7,3), следовательно, множество
разбивается на два подмножества (7,3) и
(7*,3*).
Нижняя
граница гамильтоновых циклов этого
подмножества:
H(7*,3*)
= 83 + 8 = 91
Исключение
ребра (7,3) проводим путем замены элемента
d73 =
0 на M, после чего осуществляем очередное
приведение матрицы расстояний для
образовавшегося подмножества (7*,3*), в
результате получим редуцированную
матрицу.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Включение
ребра (7,3) проводится путем исключения
всех элементов 7-ой строки и 3-го столбца,
в которой элемент d37 заменяем
на М, для исключения образования
негамильтонова цикла.
В
результате получим другую сокращенную
матрицу (6 x 6), которая подлежит операции
приведения.
Сумма
констант приведения сокращенной
матрицы:
После
операции приведения сокращенная матрица
будет иметь вид:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нижняя
граница подмножества (7,3) равна:
H(7,3)
= 83 + 0 = 83 < 91
Поскольку
нижняя граница этого подмножества (7,3)
меньше, чем подмножества (7*,3*), то ребро
(7,3) включаем в маршрут.
Определяем
ребро ветвления и
разобьем все множество маршрутов
относительно этого ребра на два
подмножества (i,j) и (i*,j*).
С
этой целью для всех клеток матрицы с
нулевыми элементами заменяем поочередно
нули на М(бесконечность) и определяем
для них сумму образовавшихся констант
приведения, они приведены в скобках.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d(1,4)
= 1 + 0 = 1; d(2,4) = 0 + 0 = 0; d(2,5) = 0 + 2 = 2; d(3,2) = 0 + 0 =
0; d(3,3) = 0 + 1 = 1; d(4,2) = 0 + 0 = 0; d(4,4) = 0 + 0 = 0; d(5,2)
= 0 + 0 = 0; d(5,6) = 0 + 6 = 6; d(6,1) = 0 + 2 = 2; d(6,2) = 0 + 0 =
0;
Наибольшая
сумма констант приведения равна (0 + 6) =
6 для ребра (5,7), следовательно, множество
разбивается на два подмножества (5,7) и
(5*,7*).
Нижняя
граница гамильтоновых циклов этого
подмножества:
H(5*,7*)
= 83 + 6 = 89
Исключение
ребра (5,7) проводим путем замены элемента
d57 =
0 на M, после чего осуществляем очередное
приведение матрицы расстояний для
образовавшегося подмножества (5*,7*), в
результате получим редуцированную
матрицу.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Включение
ребра (5,7) проводится путем исключения
всех элементов 5-ой строки и 7-го столбца,
в которой элемент d75 заменяем
на М, для исключения образования
негамильтонова цикла.
В
результате получим другую сокращенную
матрицу (5 x 5), которая подлежит операции
приведения.
Сумма
констант приведения сокращенной
матрицы:
После
операции приведения сокращенная матрица
будет иметь вид:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нижняя
граница подмножества (5,7) равна:
H(5,7)
= 83 + 0 = 83 < 89
Чтобы
исключить подциклы, запретим следующие
переходы: (3,5),
Поскольку
нижняя граница этого подмножества (5,7)
меньше, чем подмножества (5*,7*), то ребро
(5,7) включаем в маршрут.
Определяем
ребро ветвления
и разобьем все множество маршрутов
относительно этого ребра на два
подмножества (i,j) И (i*,j*).
С
этой целью для всех клеток матрицы с
нулевыми элементами заменяем поочередно
нули на М(бесконечность) и определяем
для них сумму образовавшихся констант
приведения, они приведены в скобках.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d(1,4)
= 1 + 0 = 1; d(2,4) = 0 + 0 = 0; d(2,5) = 0 + 2 = 2; d(3,2) = 0 + 0 =
0; d(3,3) = 0 + 1 = 1; d(4,2) = 0 + 0 = 0; d(4,4) = 0 + 0 = 0; d(5,1)
= 0 + 2 = 2; d(5,2) = 0 + 0 = 0;
Наибольшая
сумма констант приведения равна (0 + 2) =
2 для ребра (2,6), следовательно, множество
разбивается на два подмножества (2,6) и
(2*,6*).
Нижняя
граница гамильтоновых циклов этого
подмножества:
H(2*,6*)
= 83 + 2 = 85
Исключение
ребра (2,6) проводим путем замены элемента
d26 =
0 на M, после чего осуществляем очередное
приведение матрицы расстояний для
образовавшегося подмножества (2*,6*), в
результате получим редуцированную
матрицу.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Включение
ребра (2,6) проводится путем исключения
всех элементов 2-ой строки и 6-го столбца,
в которой элемент d62 заменяем
на М, для исключения образования
негамильтонова цикла.
В
результате получим другую сокращенную
матрицу (4 x 4), которая подлежит операции
приведения.
Сумма
констант приведения сокращенной
матрицы:
После
операции приведения сокращенная матрица
будет иметь вид:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нижняя
граница подмножества (2,6) равна:
H(2,6)
= 83 + 0 = 83 < 85
Чтобы
исключить подциклы, запретим следующие
переходы: (3,5),
Поскольку
нижняя граница этого подмножества (2,6)
меньше, чем подмножества (2*,6*), то ребро
(2,6) включаем в маршрут.
Определяем
ребро ветвления
и разобьем все множество маршрутов
относительно этого ребра на два
подмножества (i,j) и (i*,j*).
С
этой целью для всех клеток матрицы с
нулевыми элементами заменяем поочередно
нули на М(бесконечность) и определяем
для них сумму образовавшихся констант
приведения, они приведены в скобках.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d(1,4)
= 1 + 0 = 1; d(2,2) = 0 + 0 = 0; d(2,3) = 0 + 1 = 1; d(3,2) = 0 + 0 =
0; d(3,4) = 0 + 0 = 0; d(4,1) = 3 + 2 = 5;
Наибольшая
сумма констант приведения равна (3 + 2) =
5 для ребра (6,1), следовательно, множество
разбивается на два подмножества (6,1) и
(6*,1*).
Нижняя
граница гамильтоновых циклов этого
подмножества:
H(6*,1*)
= 83 + 5 = 88
Исключение
ребра (6,1) проводим путем замены элемента
d61 =
0 на M, после чего осуществляем очередное
приведение матрицы расстояний для
образовавшегося подмножества (6*,1*), в
результате получим редуцированную
матрицу.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Включение
ребра (6,1) проводится путем исключения
всех элементов 6-ой строки и 1-го столбца,
в которой элемент d16 заменяем
на М, для исключения образования
негамильтонова цикла.
В
результате получим другую сокращенную
матрицу (3 x 3), которая подлежит операции
приведения.
Сумма
констант приведения сокращенной
матрицы:
После
операции приведения сокращенная матрица
будет иметь вид:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нижняя
граница подмножества (6,1) равна:
H(6,1)
= 83 + 0 = 83 < 88
Чтобы
исключить подциклы, запретим следующие
переходы: (3,5), (1,2),
Поскольку
нижняя граница этого подмножества (6,1)
меньше, чем подмножества (6*,1*), то ребро
(6,1) включаем в маршрут.
Определяем
ребро ветвления
и разобьем все множество маршрутов
относительно этого ребра на два
подмножества (i,j) И (i*,j*).
С
этой целью для всех клеток матрицы с
нулевыми элементами заменяем поочередно
нули на М(бесконечность) и определяем
для них сумму образовавшихся констант
приведения, они приведены в скобках.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|