Материал: 5462

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

86

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

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

 

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

(алгоритм Литтла).

 

 

 

 

Этот алгоритм можно сформулировать в виде следующих правил:

1.

Находим в каждой строке матрицы С

(Сij ) минимальный элемент

ui

min (Cij ) и вычитаем его из всех элементов соответствующей строки.

 

j 1,n

 

 

 

В результате получаем матрицу C , приведенную по строкам. Каждый

элемент этой матрицы определяется по формуле Cij Cij ui .

2.

Находим минимальный элемент

v j в каждом столбце матрицы C :

v j

min (Cij ). Матрицу C ,

приведенную

по столбцам, получаем с

 

i 1,n

 

 

 

помощью преобразования Cij

Cij

v j .

 

3. Находим константу приведения ui v j .

i j

4. Находим степени нулей для приведенной по строкам и столбцам матрицы C:

rs

min Cis

min Crj .

 

i 1,n

i r

j 1,n

j s

 

 

 

Записываем соответствующую степень в правом верхнем углу клетки r, s

5. Выбираем дугу r , s

,

для

которой степень

 

нулевого

 

элемента

наибольшая:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

s

 

 

max

rs .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(r, s)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Выходим на две ветви

P

 

 

 

и

 

Pr s . Ветвь P

 

содержит переход

 

 

 

r

s

 

 

 

 

 

 

r

s

 

 

 

 

 

 

r , s , а

 

r s – не содержит. Для получения расчетной матрицы

 

 

 

P

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

s

 

вычеркиваем в матрице C строку r и столбец s . Заменяем C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

r

 

 

 

 

(симметричный элемент) на , чтобы не допустить образования подцикла. 7. Находим приведенную по строкам и столбцам матрицу Рr s и отделяем

ее константу приведения h. Тогда нижняя граница ветви определяется по

формуле

r s

h .

 

 

 

 

 

 

 

 

 

 

 

 

8. Для получения расчетной матрицы Pr s

заменяем элемент C

 

 

на .

 

 

 

 

 

r

 

s

 

87

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9.

Находим приведенную

 

по

строкам

и

столбцам

матрицу

P r s

и

 

 

 

 

 

 

 

 

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

 

h . Тогда нижняя граница ветви

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

определяется по формуле

r

 

s

 

h .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10.

Сравниваем нижние

 

 

 

границы

ветвей.

 

Если

 

 

 

 

 

r s ,

то

 

 

 

 

r

 

s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дальнейшему ветвлению подлежит вариант

P

 

, в противном случае –

 

 

 

 

 

 

 

 

 

 

 

 

r

s

 

 

 

 

 

 

 

 

 

вариант Pr s и т.д.

11.Если в результате ветвления получаем размерность сокращенной матрицы 2 2 , то определяем полученный маршрут и его длину (рекорд). В противном случае переходим к шагу 12.

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

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

Решить задачу для матрицы расстояний в табл. 11

Таблица 11

 

 

 

 

 

 

 

 

 

 

P0

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

2

 

3

 

4

5

ui

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

30

40

 

15

6

6

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

10

 

18

 

9

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

20

30

 

 

 

1

10

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

25

10

35

 

 

5

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

9

8

7

 

6

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Справа к табл. 11 присоединяем столбец ui , в котором записываем минимальные элементы строк. Вычитаем ui из соответствующих

элементов матрицы С, получим матрицу, приведенную по строкам (табл.

12):

88

Таблица 12

С

 

j

 

 

 

 

 

 

 

i

1

2

 

3

 

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

24

34

 

9

0

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

2

 

3

 

11

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

19

29

 

 

 

0

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

20

5

30

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

3

2

1

 

0

 

 

 

 

 

 

 

 

 

vj

 

3

2

1

 

0

0

2. Внизу матрицы 12 присоединяем строку

v j ,

в которой записываем

минимальные элементы

 

столбцов.

Вычитаем

 

элементы v j из

соответствующих столбцов матрицы C . Получим матрицу C ,

приведенную по столбцам (табл. 13)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 13

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

 

2

 

 

 

3

 

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

1

 

 

 

 

22

 

 

33

 

9

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

0

 

 

 

 

 

10

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

16

 

27

 

 

 

 

0

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

4

 

 

17

 

3

 

 

29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

3

 

 

 

10

 

0

 

 

 

5

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

89

3. Находим константу приведения

ui

v j

25 6

31.

 

i

j

 

 

 

Нижней

границей

(P0 ) множества всех маршрутов

будет число

31 z(x) .

 

 

 

4. Находим

степени

нулей полностью приведенной

матрицы C

(табл. 13), равные сумме минимальных элементов соответствующих строки и столбца. Степени нулей записаны в правых верхних углах клеток, для которых Сij 0 .

5.Определяем максимальную степень нуля. Она равна 10 и соответствует клетке (5,3). Строим дерево ветвлений (рис. 9).

6.Разбиваем множество всех маршрутов Р0 на два: P531 и P153 . Матрицу

P531 с дугой (5,3) получаем из табл. 13 вычеркиваем пятой строки и

третьего столбца. Чтобы не допустить образования подциклов заменяем элемент (3,5) на (табл. 14).

Таблица 14

 

 

 

 

 

 

 

 

 

 

P531

 

 

 

 

vj

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ui

 

 

 

 

 

 

 

ui

 

1

2

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

22

9

0

0

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

2

 

0

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

16

27

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

17

3

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vj

 

0

3

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

7. Матрицу маршрутов

 

153

 

 

 

 

 

 

 

 

P

получим из табл. 13 путем замены элемента

С53 на ∞ (табл. 15)

 

 

 

 

 

 

 

 

90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

153

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

2

 

3

 

4

5

 

 

 

 

ui

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

22

33

 

9

 

 

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

0

 

10

 

0

 

2

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

16

27

 

 

 

0

 

9

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

17

3

29

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

0

0

 

 

 

0

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vj

0

0

10

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8. Приводим матрицы P531 и P153 по строкам и столбцам. Константа приведения для матрицы P531 :

 

 

h531

3.

 

 

 

 

 

 

 

 

Нижняя граница множества P531 :

 

 

 

 

 

 

 

 

 

 

 

(P531 ) 31

3

34 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

153 :

 

153

 

9. Находим константу приведения для множества маршрутов

P

h

10 .

Следовательно, нижняя граница (

 

153 )

 

10 41.

 

 

 

 

 

 

 

P

31

 

 

 

 

 

 

 

10. Сравниваем нижние границы подмножеств P531 и

 

153 . Так как 34

 

P

41,

то дальнейшему ветвлению подвергаем множество P531 (табл. 14).

 

Делаем дополнительное приведение матрицы маршрутов

P531 .

Приведенная матрица

 

153 представлена в табл. 16.

 

P

 

Источник: https://studfile.net/preview/16711122/