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

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

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

Таким образом, задача поиска критического пути в графе G =(X, U) имеет решение только в том случае, если этот граф является бесконтурным. Понятие "критический путь" является фундаментальным для методов PERT и CPM управления выполнением проекта и соответствует минимальному времени, необходимому для реализации проекта (см. раздел 1.5). Самый длинный путь m[ s, t ] в сети PERT или CPM называется критическим, так как дуги (xi, xj)Îm[ 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 (c ij = ¥ для матрицы C в алгоритме Флойда), где (xi, xj) Ï U, заменяются на d ' ij = -¥ и c ' ij = -¥ соответственно. Необходимо отметить, что при поиске критического пути m[ s, t ] изменяется смысл пометок l*(xi) и g*(xi) вершин графа. Значение l*(xi) определяет длину максимального пути m[ s, xi ] от источника s до вершины xi, а g*(xi) - длину максимального пути m[ xi, t ] от xi до стока t.

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

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

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

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

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

Задать пометки l*(x 1)= -¥ вершинам xi Î X \ s и l*(x 1)= 0 для s = x 1. Присвоить j =1.

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

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

(2.1)

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

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

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

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

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

- определить пути m[ s, xj ] максимальной длины от источника s = x 1 до всех других вершин xj Î X \ s;

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

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

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

У П Р А Ж Н Е Н И Я

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

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

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

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

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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: