Разбиение множества маршрутов на подмножества
Нижняя граница для Z35'(2), полученная как на предыдущем шаге ветвления, равна 32 + 15 = 47. Сравнивая нижние границы ц Z35(2)=36 и Z35'(2)=47>36 выбираем для дальнейшего разбиения подмножество маршрутов Z35(2). Для выделения претендентов на включение во множество дуг, по которым производится ветвление, найдем степени Иij нулевых элементов этой матрицы (суммы минимумов по строке и столбцу… Читать ещё >
Разбиение множества маршрутов на подмножества (реферат, курсовая, диплом, контрольная)
Для выделения претендентов на включение во множество дуг, по которым производится ветвление, рассмотрим в приведенной матрице все элементы, равные нулю. Найдем степени Иij нулевых элементов этой матрицы. Степень нулевого элемента Иij равна сумме минимального элемента в строке i и минимального элемента в столбце j (при выборе этих минимумов cij — не учитывается). С наибольшей вероятностью искомому маршруту принадлежат дуги с максимальной степенью нуля.
Для получения платежной матрицы маршрутов, включающей дугу (i, j) вычеркиваем в матрице строку i и столбец j, а чтобы не допустить образования цикла в маршруте, заменяем элемент, замыкающий текущую цепочку на бесконечность.
Множество маршрутов, не включающих дугу (i, j) получаем путем замены элемента cij на бесконечность.
Пример задачи
Коммивояжер должен объездить 6 городов. Для того чтобы сократить расходы, он хочет построить такой маршрут, чтобы объездить все города точно по одному разу и вернуться в исходный с минимумом затрат. Исходный город A. Затраты на перемещение между городами заданы следующей матрицей:
A. | B. | C. | D. | E. | F. | |
A. | ||||||
B. | ||||||
C. | ||||||
D. | ||||||
E. | ||||||
F. |
Решение задачи.
Итерация 1.
Для удобства изложения везде ниже в платежной матрице заменим имена городов (A, B, …, F) номерами соответствующих строк и столбцов (1, 2, …, 6).
Найдем нижнюю границу длин множества всех маршрутов. Вычтем из каждой строки число, равное минимальному элементу этой строки, далее вычтем из каждого столбца число, равное минимальному элементу этого столбца, и таким образом приведем матрицу по строкам и столбцам. Минимумы по строкам: r1=4, r2=5, r3=2, r4=12, r5=5, r6=2.
После их вычитания по строкам получим:
Минимумы по столбцам: h1=0, h2=1, h3=h4=h5=0, h6=1.
После их вычитания по столбцам получим приведенную матрицу:
Найдем нижнюю границу.
ц(Z) = 4+5+2+12+5+2+1+1=32.
Для выделения претендентов на включение во множество дуг, по которым производится ветвление, найдем степени Иij нулевых элементов этой матрицы (суммы минимумов по строке и столбцу).
И14 = 10 + 0, И24 = 1 + 0, И35 = 5+0, И42 = 0 + 4, И45 = 0 + 0, И51 = 4 + 0, И56 = 4 + 0, И63 = 4+13.
Наибольшая степень И63 = 17. Ветвление проводим по дуге (6,3).
Нижняя граница для множества Z63(1)остается равной 32. Для всех маршрутов множества Z63'(1) из города 6 мы не перемещаемся в город 3,.
ц (Z63'(1)) = 32 + 4.
В матрице, соответствующей Z63(1), вычеркиваем шестую строку и третий столбец и положим c36= ?, чтобы предотвратить появления цикла 6> 3 > 6. Получим новую платежную матрицу {c1ij}:
Сравнивая нижние границы ц Z63'(1)=40 и ц Z63(1)=32 < 40, выделяем подмножество маршрутов Z63(1), которое с большей вероятностью содержит маршрут минимальной длины.
Итерация 2.
Приведенная платежная матрица для Z63(1) (в каждой сроке и в каждом столбце есть 0, после приведения матрица не меняется):
Далее продолжаем процесс ветвления. Найдем степени Иij нулевых элементов этой матрицы И14 =10, И24 = 1, И35 = 15, И42 = 10, И45 = 0, И51 =4, И56 = 4. Наибольшая степень И35=15. Затем множество Z63(1) разбивается на дуге (3, 5) на два новых Z35(2) и Z35'(2).
В матрице для Z35(2) вычеркиваем строку 3 и столбец 5. Дуги (6, 3) и (3, 5) образуют связный путь (6, 3, 5); положим c56= ?, чтобы предотвратить появления цикла 6>3> 5 > 6.
Для приведения надо вычесть минимум по столбцу 6: r6=4. При этом нижняя граница станет равной 32+4=36.
Нижняя граница для Z35'(2), полученная как на предыдущем шаге ветвления, равна 32 + 15 = 47. Сравнивая нижние границы ц Z35(2)=36 и Z35'(2)=47>36 выбираем для дальнейшего разбиения подмножество маршрутов Z35(2).
Итерация 3.
Приведенная платежная матрица для Z35(2):
Степени Иij нулевых элементов этой матрицы И14 = 8, И24 = 0, И26 = 1, И42 = 10, И51 =21. Наибольшая степень И51=21. Затем множество Z35(2) разбивается на два новых Z51(3) и Z51'(3).
Нижняя граница для Z51'(3) равна 36+21=57. В матрице для Z51(3) вычеркиваем строку 5 и столбец 1, положим с16=?. Получим матрицу:
Приведение не требуется. Выбираем для дальнейшего разбиения подмножество маршрутов Z51(3).
Итерация 4.
Приведенная платежная матрица для Z51(3):
Степени Иij нулевых элементов этой матрицы И14 = 8, И24 = 0, И26 = 1, И42 =11. Выбираем И42 =11. Разбиваем Z51(3) на Z42(4) и Z42'(4).
Нижняя граница для Z42'(4) равна 36+11 = 47. В матрице для Z42(4) вычеркиваем строку 4 и столбец 2 и полагаем c24= ?. Получим.
Приведение не требуется.
Из матрицы 22 получаем два перехода с нулевой длиной: (1, 4) и (2, 6).
Полученный маршрутом коммивояжера: Z0 = (1, 4, 2, 6, 3, 5, 1) или (A-D-B-F-C-E-A).
Пройденный путь равен 36.
Руководство пользователя.
- 1. Введите размерность матрицы.
- 2. Ведите поэлементно взвешенную матрицу смежности.
- 3. Результат работы программы:
- 4. Введите источник.
- 5. Результат работы программы: