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

2. Пути максимальной длины

2.1. Основные задачи и методы их решения

Критическим путем в ориентированном графе G =(X, U) с источником s и стоком t называется самый длинный путь максимальной длины

[s, t] между этими вершинами. Если кратчайший путь в орграфе не существует при наличии контуров отрицательной длины, то критический путь не существует в ориентированном графе с контурами [1].

Таким образом, задача поиска критического пути в графе G =(X, U) имеет решение только в том случае, если этот граф является бесконтурным. Понятие "критический путь" является фундаментальным для методов PERT и CPM управления выполнением проекта и соответствует минимальному времени, необходимому для реализации проекта (см. раздел 1.5). Самый длинный путь [s, t] в сети PERT или CPM называется критическим, так как дуги (xi, xj )[s, t] отображают этапы операции проекта, для которых любая задержка начала выполнения приводит к увеличению срока завершения проекта в целом.

Совершенно очевидно сходство задачи поиска критического пути с задачей о кратчайшем пути между источником и стоком. Ее можно решить с помощью любого алгоритма построения кратчайшего пути из раздела 1. Для этого используется два подхода:

- модификация графовой модели задачи;

- модификация алгоритма поиска пути.

В первом случае изменяются веса l (xi, xj) всех дуг (xi, xj)  U исходного графа G =(X, U) на значения l'(xi , xj) = -l(xi, xj) или l'(xi , xj) = 1/(xi, xj). Затем применяется любой алгоритм поиска кратчайшего пути без каких-либо изменений. Результат будет определять критический путь в исходном графе G =(X, U).

Второй способ предполагает модификацию применяемого алгоритма. Для этого все операции min заменяются на max, а значения элементов dij =  матрицы весов D (cij =  для матрицы C в алгоритме Флойда), где (xi, xj)  U, заменяются на d'ij = - и c'ij = - соответственно. Необходимо отметить, что при поиске критического пути [s, t] изменяется смысл пометок *(xi) и *(xi) вершин графа. Значение *(xi) определяет длину максимального пути [s, xi] от источника s до вершины xi, а *(xi) - длину максимального пути [xi, t] от xi до стока t.

Учитывая различную трудоемкость алгоритмов поиска кратчайших путей и обязательное отсутствие контуров в графовых моделях, наиболее целесообразным для определения критического пути [s, t] является применение метода динамического программирования. В качестве примера модификации алгоритма ниже приводится процедура поиска критического пути методом динамического программирования, которая базируется на использовании пометок (xi) вершин графа.

Алгоритм 2.1 (поиск критического пути [s ,t] методом динамического программирования)

Данные: бесконтурный граф G = (X, U) с n вершинами, имеющими правильную нумерацию; выделенные источник s = x1 и сток t; произвольные веса дуг l( xi, xj).

Результат: длина *(t) критического пути [s, t].

Шаг 1 (присвоение начальных значений)

Задать пометки *(x1)= - вершинам xiX\s и *(x1)= 0 для s = x1. Присвоить j =1.

Шаг 2 (изменение пометок)

Присвоить j =j+1 и для вершины xj вычислить окончательное значение пометки

(2.1)

где T = Г-1( xj). При T =Ø пометка вершины xj не изменяется.

Шаг 3 (проверка условия окончания)

Если xj= t, то конец алгоритма. Иначе переход к шагу 2.

Очевидно, что выражение (2.1) обеспечивает корректный результат только при правильной нумерации вершин графа (см. раздел 1.5), для которой индексы вершин любой дуги (xi, xj)U удовлетворяют условию i < j. Построение критического пути [s, t] может быть выполнено на основе известного соотношения (1.2) или с помощью двойных пометок вида [*(xj), mj], где *(xj) - длина максимального пути от источника s до вершины xj.

Наиболее близким к задаче поиска критического пути на графе являются следующие задачи:

- определить пути [s, xj] максимальной длины от источника s = x1 до всех других вершин xjX\s;

- определить пути [s, t] максимальной длины от всех вершин xiX\t; до стока t = xn;

- определить пути максимальной длины [xi, xj] между всеми парами вершин xi, xjX.

Для решения первых двух задач успешно применяется метод динамического программирования (с пометками вершин (xi) и (xi) соответственно). Последняя задача может быть решена по алгоритму Флойда после необходимой модификации (см. выше).

У П Р А Ж Н Е Н И Я

2.1. Сформулировать задачу поиска критического пути в бесконтурном ориентированном графе в виде задачи целочисленного линейного программирования.

2.2. Почему при решении задачи поиска критического пути в графе не допускается существование контуров?

2.3. Перечислить основные методы определения путей максимальной длины в ориентированных бесконтурных графах.

2.4. Что показывают пометки (xi) и (xi), приписываемые вершинам графа в алгоритмах поиска путей максимальной длины?

2.5. Модифицировать алгоритмы Форда-Беллмана и Дейкстры для решения задачи поиска путей максимальной длины.

2.6. Составить программу для построения критичеcкого пути в ориентированном графе методом динамического программирования.

2.7.Определить по методу Дейкстры критический путь от источника s = x1 до стока t = x9 в графе, показанном на рис. 1.7.

2.8. Методом динамического программирования определить длину максимального пути от вершины x1 до вершины x8 для графа на рис. 1.8.

2.9. Разработать алгоритм построения путей максимальной длины между всеми парами вершин по методу Флойда.

2.10. Определить пути максимальной длины [xi, xj] для всех пар вершин xi и xj в графе, приведенном на рис. 1.9.