Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа по дрожжину.doc
Скачиваний:
71
Добавлен:
21.11.2019
Размер:
654 Кб
Скачать
☆
  1. Решение задачи коммивояжера

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

X0 = (1,2);(2,3);(3,4);(4,5);(5,6);(6,1)

Тогда F(X0) = 287 + 602 + 181 + 344 + 435 = 1849

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

Di = min(j) dij

I j

1

2

3

4

5

6

di

1

M

287

808

635

871

1095

287

2

M

602

429

665

864

3

M

181

277

403

4

M

344

442

5

M

435

6

M

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

Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент:

dj = min(i) dij

I j

1

2

3

4

5

6

1

M

0

521

348

584

808

2

M

602

429

665

864

3

M

181

277

403

4

M

344

442

5

M

435

6

M

dj

0

403

После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.

I j

1

2

3

4

5

6

1

M

0

521

348

584

405

2

M

602

429

665

461

3

M

181

277

0

4

M

344

39

5

M

32

6

M

Шаг №1.

Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

I j

1

2

3

4

5

6

di

1

M

0(348)

521

348

584

405

348

2

(429)

M

602

429

665

461

429

3

(0)

(0)

M

181

277

0(32)

4

(0)

(0)

(0)

M

344

39

5

(0)

(0)

(0)

(0)

M

32

6

(0)

(0)

(0)

(0)

(277)

M

dj

0

277

32

0

Наибольшая сумма констант приведения равна (429 + ) = 429 для ребра (2,1), следовательно, множество разбивается на два подмножества (2,1) и (2*,1*).

Нижняя граница гамильтоновых циклов этого подмножества:

I j

1

2

3

4

5

6

di

1

M

0

521

348

584

405

0

2

M

M

602

429

665

461

429

3

M

181

277

0

4

M

344

39

5

M

32

6

M

dj

0

0

429

В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид:

I j

2

3

4

5

6

di

1

M

521

348

584

405

348

3

M

181

277

0

4

M

344

39

5

M

32

6

M

dj

0

348

Поскольку нижняя граница этого подмножества (2,1) меньше, чем подмножества (2*,1*), то ребро (2,1) включаем в маршрут.

Шаг №2.

Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

I j

2

3

4

5

6

di

1

M

173

0(57)

236

57

57

3

(0)

M

181

277

0(32)

4

(0)

(0)

M

344

39

5

(0)

(0)

(0)

M

32

6

(0)

(0)

(0)

(236)

M

dj

0

236

32

0

Наибольшая сумма констант приведения равна ( + 236) = 236 для ребра (6,5), следовательно, множество разбивается на два подмножества (6,5) и (6*,5*).

Нижняя граница гамильтоновых циклов этого подмножества:

I j

2

3

4

5

6

di

1

M

173

0

236

57

0

3

M

181

277

0

4

M

344

39

5

M

32

6

M

M

dj

0

236

0

236

В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид:

I j

2

3

4

6

di

1

M

173

0

57

0

3

M

181

0

4

M

39

5

M

dj

0

0

0

Поскольку нижняя граница этого подмножества (6,5) меньше, чем подмножества (6*,5*), то ребро (6,5) включаем в маршрут.

Шаг №3.

Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

I j

2

3

4

6

di

1

M

173

0(57)

57

57

3

(0)

M

181

0(39)

4

(0)

(0)

M

39

5

(0)

(0)

(0)

M

dj

0

39

0

Наибольшая сумма констант приведения равна (57 + 0) = 57 для ребра (1,4), следовательно, множество разбивается на два подмножества (1,4) и (1*,4*).

Нижняя граница гамильтоновых циклов этого подмножества:

I j

2

3

4

6

di

1

M

173

M

57

57

3

M

181

0

4

M

39

5

M

dj

0

57

В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид:

I j

2

3

6

di

3

M

0

4

39

5

M

dj

0

0

Чтобы исключить подциклы, запретим следующие переходы: (4,2),

Поскольку нижняя граница этого подмножества (1,4) меньше, чем подмножества (1*,4*), то ребро (1,4) включаем в маршрут.

Шаг №4.

Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

I j

2

3

6

di

3

(0)

M

0(39)

4

M

(39)

39

39

5

(0)

(0)

M

dj

39

0

Наибольшая сумма констант приведения равна ( + 39) = 39 для ребра (3,6), следовательно, множество разбивается на два подмножества (3,6) и (3*,6*).

Нижняя граница гамильтоновых циклов этого подмножества:

I j

2

3

6

di

3

M

M

4

M

39

5

M

dj

39

39

В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид:

I j

2

3

di

4

M

5

dj

0

Поскольку нижняя граница этого подмножества (3,6) меньше, чем подмножества (3*,6*), то ребро (3,6) включаем в маршрут.

В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (4,3) и (5,2).

В результате по дереву ветвлений гамильтонов цикл образуют ребра:

(2,1), (1,4), (4,3), (3,6), (6,5), (5,2),

Длина маршрута равна F(Mk) = 2606