- •Министерство образования и науки республики казахстан
- •А.У. Калижанова, н.И. Аманжолова, а.И. Ерзин, ю.А. Кочетов методы оптимизации и исследование операций Учебное пособие
- •Оглавление
- •Введение
- •1. Методы оптимизации
- •Общая задача линейного программирования
- •1.2. Графический метод решения задач линейного программирования.
- •1.3. Симплексный метод решения задачи линейного программирования
- •1.4. Отыскание оптимального плана. Условия оптимальности
- •1.5. Решение задач линейного программирования симплекс-методом.
- •1.6. Решение задач линейного программирования методом искусственного базиса
- •1.7. Двойственность в лп. Понятие двойственности
- •1.8. Транспортная задача линейного программирования
- •2. Построение остовных деревьев
- •2.1. Минимальное остовное дерево. Алгоритмы Прима, Краскала, Борувки
- •2.2. Остовные деревья и их приложения
- •2.3. Примеры и упражнения
- •3. Задачи построения кратчайших путей
- •3.1. Алгоритм Дейкстры
- •3.2. Алгоритм Беллмана – Форда
- •3.3. Алгоритм Флойда – Уоршелла
- •3.4. Примеры и упражнения
- •4. Задача штейнера
- •4.1. Постановки задачи Штейнера и ее сложность
- •4.2. Приближенные алгоритмы
- •4.3. Некоторые задачи синтеза сетей, использующие деревья Штейнера
- •4.4. Примеры и упражнения
- •5. Задача коммивояжера
- •5.1. Вычислительная сложность
- •5.2. Конструктивные алгоритмы
- •5.3. Нижние оценки
- •5.3.1. Примитивная нижняя оценка
- •Оценка линейного программирования
- •5.3.4. Задача о назначениях
- •Локальный поиск
- •5.4.1. Основные определения
- •5.4.2. Окрестности на перестановках
- •5.4.3. Окрестности Лина – Кернигана
- •5.4.4. Экспоненциальные окрестности
- •Метаэвристики
- •5.5.1. Алгоритм имитации отжига
- •5.5.2. Поиск с запретами
- •5.5.3. Локальный поиск с чередующимися окрестностями
- •5.5.4. Генетические алгоритмы
- •Упражнения
- •Библиографический список
- •А.У. Калижанова, н.И. Аманжолова, а.И. Ерзин, ю.А. Кочетов. Методы оптимизации и исследование операций
2.3. Примеры и упражнения
Пример 2.1. Построить МОД в графе, изображенном на рис. 2.1a (рядом с ребрами указаны их веса), с помощью алгоритма Прима.
Решение.
Положим
Тогда
метки вершин
,
,
остальные
.
Вершины 2 и 3, ближайшие к T, добавим,
например, вершину 2, получив
,
и пересчитаем метки для вершин 3, …, 7.
Получим
,
,
,
Теперь ближайшая к T вершина 4, добавим
ее:
.
Продолжая процесс, добавим последовательно
вершины 5, 3, 7 и 6 вместе с ребрами (4 ,5),
(1, 3), (5, 7) и (3, 6). МОД изображено
на рис. 1.1b, и его вес равен 14.
Рисунок-2.1.a) граф; b) МОД
Пример 2.2. Найти количество остовных деревьев графа, изображенного на рис. 2.1a, степени которых не превосходят 2.
Решение. Перенумеруем ребра. Очевидно, ребро 1 = (5, 7) войдет во все остовные деревья. Можно построить двоичное дерево решений, начиная с ребра 1, включая (если это не приводит к циклу или превышению допустимой степени вершин) или не включая очередное ребро. В результате получим три гамильтоновых пути. Один из них изображен на рис. 2.1b, два других – на рис. 2.2.
Рисунок-2.2. Два остовных дерева степени 2
Упражнение 2.1. Доказать, что алгоритмы Прима, Краскала и Борувки строят МОД.
Упражнение 2.2. Показать, что в дереве, имеющем две и более вершины, существует как минимум две вершины степени 1.
Упражнение 2.3. Найти такое остовное дерево графа, показанного на рис. 2.1a, в котором максимальный вес ребра минимален.
Упражнение 2.4. Найти МОД графа, показанного на рис. 2.1a, используя алгоритмы Краскала и Борувки.
Упражнение 2.5. Найти все МОД графа, показанного на рис. 2.3.
Рисунок-2.3. Взвешенный граф (рядом с каждым ребром указан его вес)
3. Задачи построения кратчайших путей
Пусть
задан ориентированный (или неориентированный)
граф
в котором
– множество вершин, а
– множество дуг. Припишем каждой дуге
«длину»
.
Определение
1.
Путь
из
вершины
в вершину
определим как последовательность дуг,
которая начинается в
и заканчивается в
,
в которой конец предшествующей дуги
является началом следующей. Сумму длин
дуг, входящих в путь, назовем длиной
пути.
Задачи построения кратчайших путей естественно возникают во множестве приложений. Например, если в сети связи информация из источника должна достичь получателей за минимальное время, то, построив граф, в котором длина дуги совпадает с временем прохождения сигнала по этой дуге, мы сведем проблему к задаче построения дерева кратчайших путей (ДКП) из источника к приемникам сигнала.
Если требуется построить сеть дорог, связывающих заданное множество городов, таким образом, чтобы время поездки из одного города в другой было минимальным, то нужно найти кратчайшие пути между всеми парами городов.
3.1. Алгоритм Дейкстры
Алгоритм изобретен нидерландским ученым Э. Дейкстрой в 1959 г. [4] и строит ДКП из начальной вершины (корня) графа во все остальные вершины при неотрицательных длинах дуг (ребер).
Пусть
– начальная вершина (источник). Алгоритм
на каждом шаге добавляет к частично
построенному дереву
с корнем в
одну ближайшую к
вершину, не принадлежащую
.
Если требуется найти кратчайший путь
до некоторой вершины
,
то алгоритм останавливается после
добавления этой вершины. Иначе, строится
остовное дерево, связывающее все вершины
графа кратчайшими путями с
,
т. е. ДКП.
Обозначим
через
– множество вершин, из которых есть
дуги в вершину
в графе
.
Положим начальное строящееся дерево
.
Припишем каждой вершине
метку
,
соответствующую (текущей) минимальной
длине пути из
в
.
Метка источника
не меняется в процессе работы алгоритма.
Сначала
для всех
.
На каждом шаге алгоритма ищется дуга
которая
добавляется в
,
и обновляется метка j-ой вершины
.
После этого (с константной трудоемкостью)
обновляется метка каждой не включенной
в
вершины
Алгоритм останавливается, когда все вершины графа включены в дерево (после выполнения шагов). Трудоемкость одного шага (выбор вершины для включения в ) равна . Следовательно, общая трудоемкость алгоритма Дейкстры – .
