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

Глава 2. Решение прикладных задач коммивояжера

2.1. Задача-сказка про колобка.

Испекла бабка колобок и поставила его остывать на окошко. И решил колобок, что пока он остывает, он вполне может обежать лес, посмотреть на лесных жителей и снова вернуться к деду и бабке. Сказано – сделано. Спрыгнул колобок из окошка и покатился в лес. Помогите колобку найти кратчайший маршрут его движения по лесу, если расстояния между норами лесных жителей, а также домом деда и бабки даны в таблице 2.1. Для удобства присвоим сказочным персонажам номера:

Деду с бабкой – 1; Зайцу – 2; Волку – 3; Медведю – 4; Лисе – 5.

Таблица 2.1

Дед и бабка

Заяц

Волк

Медведь

Лиса

Дед и бабка

6

4

5

7

Заяц

6

3

2

10

Волк

4

3

9

11

Медведь

5

2

9

8

Лиса

7

10

11

8

Рис. 2.1. Граф-условие

2.1.1. Прямой алгоритм

;

;

;

;

;

;

;

;

;

;

;

.

Ответ: длина маршрута колобка 24, порядок обхода лесных жителей

Потраченное время: 10 минут

Сложность: низкая

Точность: метод дает хорошие результаты только в случае небольшого кол-ва вершин, если же вершин много, то решение может быть далеко не оптимальным, так как отсутствует возможность просчитывать шаги.

Алгоритм Литтла.

Таблица 2.2. Исходная

1

2

3

4

5

1

6

4

5

7

2

6

3

2

10

3

4

3

9

11

4

5

2

9

8

5

7

10

11

8

Шаг 1. Выполним зануление матрицы по строкам и по столбцам (табл. 2.3 - 2.4). Для этого находим наименьший элемент в строке (столбце) и вычитаем его из всех элементов строки (столбца). После зануления матрицы ее элементы должны содержать или положительные, или нулевые значения.

Таблица 2.3. Зануление по строкам

1

2

3

4

5

1

2

0

1

3

2

4

1

0

8

3

1

0

6

8

4

3

0

7

6

5

0

3

4

1

Сумма вычтенных значений по строкам равна: 4+2+3+2+7=18.

Таблица 2.4. Зануление по столбцам

1

2

3

4

5

1

2

0

1

0

2

4

1

0

5

3

1

0

6

5

4

3

0

7

3

5

0

3

4

1

Сумма вычтенных значений по столбцам равна: 3.

Общая сумма всех вычитаний: 18+3=21. Это и есть нижняя оценка.

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

Таблица 2.5. Расчет оценок клеток

1

2

3

4

5

1

2

1

2

4

1

5

3

1

6

5

4

3

7

3

5

3

4

1

Максимальная оценка 3 принадлежит двум клеткам 1-5 и 4-2. Поэтому за нулевое ребро принимается или ребро 1-5, или 4-2. Возьмем ребро 4-2.Из дальнейшего рассмотрения исключим четвертую строку и второй столбец.

Шаг 2.

Таблица 2.6. Исключение ребра.

1

3

4

5

1

1

3

1

6

5

2

4

1

5

5

4

1

Таблица 2.7. Зануление

1

3

4

5

1

0

3

0

4

4

2

3

0

4

5

4

0

Общая сумма зануления равна трем.

Таблица 2.8. Расчет оценок

1

3

4

5

1

3

4

4

2

3

4

5

4

Максимальная оценка 4 принадлежит 3-1 и 1-5. Выбираем ребро 3-1.

Шаг 3.

Таблица 2.9. Исключение ребер

3

4

5

1

2

4

5

4

Зануление невозможно. Максимальная оценка 4 принадлежит ребру 1-5.

Шаг 4.

Таблица 2.10. Исключение ребер

3

4

2

5

4

Оставшиеся не запрещенные ребра – 2-4 и 5-3.

Шаг 5.

Составим дерево ветвления алгоритма (Рис.2.2)

Рис.2.2. Дерево ветвления алгоритма

Построение оптимального маршрута выполним, используя рис. 2.2. На последнем шаге остались два свободных не запрещенных ребра 2-4 и 5-3.Оба ребра включаем в маршрут и добавляем ребра из левой ветви дерева.

Оптимальный маршрут будет состоять из ребер 2-4, 5-3, 1-5, 3-1, 4-2. После упорядочения получим: .

Ответ: длина оптимального маршрута колобка не менее 52, порядок объезда городов: .

Сложность: высокая

Затраченное время: 40 минут.

Точность: наиболее высока при большом кол-ве вершин