Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Формирование списка кандидатов на ветвление



После вычисления каждой из оценок (i = 1,2) следует проверить, не состоит ли множество из единственного маршрута. Если в каждой строке и в каждом столбце матрицы оказалось лишь по одному элементу, отличному от + ¥, то множество содержит единственный маршрут, длина которого равна . В этом случае верхняя граница (наименьшее из уже вычисленных значений F (x) полагается равной минимуму из предыдущего значения Z 0 и , т.е.

Z 0 = min { Z 0, }.

Если содержит более одного маршрута и меньше текущего значения Z 0, то множество включается в число кандидатов на ветвление. Остановка производится, если наименьшая из оценок снизу кандидатов на ветвление не меньше текущего значения Z 0.

Пример 5.2.. Решить методом ветвей и границ задачу коммивояжера с матрицей

Возьмем в качестве произвольного допустимого маршрута:

x 0 = {(1,2), (2,3), (3,4), (4,5), (5,1)}.

Тогда F(x 0) = 10 + 10 + 20 + 15 + 10 = 65 – текущее значение Z 0 – (верхняя граница длин всех маршрутов).

Получим редуцированную матрицу .

0 0 9 12 0

Нижняя граница d (x) = 10 + 1 + 8 + 10 + 8 + 9 + 12 = 58. Данное значение является нижней границей длин всех маршрутов. Заметим, что в идеальном случае поиск решения заключался бы в выборе ровно одного нулевого элемента в каждой строке и каждом столбце. Другими словами, если бы такой маршрут нулевой длины бы быть найден, то длина оптимального маршрута равнялась бы 58. Исходя из верхней и нижней границ, можно заключить, что 58 ≤ F (x *) ≤ 65.

Выберем дугу (r,s) с помощью вычисления значений функции Q(m,n).

Q(1,2) = 0, Q(2,1) = 0, Q(3,1) = 0, Q(4,2) = 4, Q(1,5) = 1, Q(2,3) = 5, Q(3,4) = 2, Q(5,2) = 2.

Следовательно, Q(r,s) = (2,3). Осуществим разбиение (ветвление). Правое подмножество X 2 будет содержать все маршруты, которые исключают дугу (2,3). Поэтому C 2 (2,3) = +∞.

~ ~ =

Оценка снизу для правого подмножества X 2 определяется следующим образом:

d (X 2) = d (X) + Θ(2,3) = 58 + 5 = 63 < Z 0.

Левое подмножество X 1 будет содержать маршруты, которые всегда включают дугу (2,3), и поэтому вторая строка и третий столбец в матрицу C 1 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C 1 (3,2) = +∞, чтобы запретить подцикл {(2,3),(3,2)}. В результате получим матрицу

C 1 = = .

Оценка снизу для левого подмножества:

d (X 1) = d (X) + t = 58 + 0 = 58 < Z 0,

где t – константа приведения матрицы С1

В списке кандидатов на ветвление множества X 1 и X 2. Так как d (X 1) < d (X 2), будем производить ветвление множества X 1. Выберем дугу (r,s) с помощью значений функции Q(m,n) для матрицы.

Q(1,2) = 0, Q(1,5) = 2, Q(3,1) = 2, Q(3,4) = 3, Q(4,2) = 4, Q(5,2) = 2.

Следовательно, Q(r,s) = 4, (r,s) = (4,2).

Правая подматрица:

C 4 = ~ = .

Оценка снизу для правого подмножества:

d (X 4) = d (X 1) + Θ(4,2) = 58 + 4 = 62 < Z 0.

Левая подматрица. Левое подмножество X 3 будет содержать маршруты, которые всегда включают дугу (4,2), и поэтому четвертая строка и второй столбец в матрицу C 3 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C 3 (3,4) = +∞, чтобы запретить подцикл {(4,2),(2,3),(3,4)}. В результате получим матрицу

C 3 = ~ ~ = .

d (X 3) = d (X 1) + t = 58 + 5 = 63 < Z 0.

В списке кандидатов на ветвление множества X 3, X 4, X 2.

Минимальная нижняя оценка оказалась у множества X 4, следовательно, для дальнейшего разбиения выбираем множество X 4.

Определим дугу (r,s) с помощью значений функции Q(m,n) для матрицы .

Q(1,2) = 0, Q(1,5) = 1, Q(3,1) = 0, Q(3,4) = 3, Q(4,1) = 1, Q(5,2) = 2.

Следовательно, Q(r,s) = 3, (r,s) = (3,4).

Правая подматрица.

C 6 = ~ = .

Оценка снизу для правого подмножества:

d (X 6) = d (X 4) + Θ(3,4) = 62 + 3 = 65 = Z 0.

Следовательно, множество X 6 исключаем из списка.

Левая подматрица. Левое подмножество X 5 будет содержать маршруты, которые всегда включают дугу (3,4), и поэтому третья строка и четвертый столбец в матрицу C 5 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C 5 (4,2) = +∞, чтобы запретить подцикл {(2,3), (3,4), (4,2)}, однако это условие оказалось уже выполненным. В результате получим матрицу:

C 5 = = .

Оценка снизу для левого подмножества:

d (X 5) = d (X 4) + t = 62 + 0 = 62 < Z 0.

В списке кандидатов на ветвление множества X 3, X 5, X 2.

Минимальная нижняя оценка оказалась у множества X 5, следовательно, для дальнейшего разбиения выбираем множество X 5. Определим дугу (r,s) с помощью значений функции Q(m,n) для матрицы .

Q(1,2) = 0, Q(1,5) = 1, Q(4,1) = 3, Q(5,2) = 2.

Следовательно, Q(r,s) = 3, (r,s) = (4,1).

Правая подматрица:

C 8 = ~ ~ = .

Оценка снизу для правого подмножества:

d (X 8) = d (X 5) + Θ(4,1) = 62 + 3 = 65 = Z 0.

Следовательно, множество X 8 исключаем из списка.

Левая подматрица. Левое подмножество X 7 будет содержать маршруты, которые всегда включают дугу (4,1), и поэтому четвертая строка и первый столбец в матрицу C 7 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C 7 (1,2) = +∞, чтобы запретить подцикл {(2,3), (3,4), (4,1), (1,2)}.

C 7 = = .

Оценка снизу для левого подмножества:

d (X 7) = d (X 5) + t = 62 + 0 = 62 < Z 0.

В списке кандидатов на ветвление множества X 3, X 7, X 2. Множество X 7 содержит единственный маршрут с минимальной нижней оценкой, поэтому задача решена.
X 1 = = X *;

Z 0= F (x *) = 10 + 8 + 10 + 20 + 14 = 62.

Представим процесс решения в виде дерева (см. рис. 5.2.).

Рис. 5.2.





Дата публикования: 2015-10-09; Прочитано: 234 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...