
Критический путь
Для анализа проекта существуют различные методы. Мы рассмотрим метод критического пути (CPM). Кроме того, распространен метод (PERT), который мы упомянем в конце.
Пусть в проекте про каждый процесс известно сколько времени он выполняется.[4]
Замечание.Мы рассматриваем идеальную ситуацию, когда время выполнения каждого процесса известно заранее, что, конечно, не совпадает с реальной ситуацией.
Каждому процессу w ∈W сопоставим положительное время его выполнения tw> 0, фиктивным процессам сопоставим время выполнения равное 0. Процесс не может начаться до окончания предшествовавших процессов.
Значит продолжительность выполнения проекта не может
превышать суммы продолжительностей работ по некоторому пути, соединяющему начальную и конечную вершины.
Определение.Длиной пути назовем сумму продолжительностей процессов входящих в путь.
Определение. Критическим путем назовем путь максимальной длины.
Критический путь для сетевого графика можно вычислить методом похожим на метод Дейкстры (модифицированным для поиска максимального пути).
Каждому событию (вершине графа) сопоставляется число Θi, называемое ранним наступлением события i. Это минимальное значение времени в которое событие i может произойти (процесс с началом в этой вершине должен начаться не раньше, момента Θi). Ранние начала событий определяются из соотношения
Θi= max{tj+ Θbeg j| endj = i)}
Иначе говоря, если для узла i узлы p,q, ..., v связаны с узлом i процессами w1= (p,i), w2= (q,i), ..., wk= (v,i), то
Θi= max{Θp+ tw1, Θq+ tw2, ... ,Θv+ twk}.
Причем Θi0= 0.
Рассмотрим алгоритм вычисления ранних наступлений событий. Множество вершин M разобьем на 3 подмножества M = M0∪M1∪M2, где M0– множество вершин с вычисленными, M1– с вычисляемыми ранними временами наступления событий, а множество M2– вершины еще не затронутые вычислительным процессом. Каждой вершине i сопоставим ri– число еще не просмотренных дуг с концом в i. Начальное состояние алгоритма следующее:
M0= ∅
M1= {i0}
M2= M \ M1
Θi= 0, ri= |{j|endj = i}|,
i ∈M
Θi0= 0
Шаг алгоритма:
(i) Если множество M1пусто, то завершить вычисления.
(ii) Если нет, то выбрать в M1произвольную вершину (обозначим ее i1). Перевести эту вершину в M0(M0:= M0∪{i1}, M1= M1\{i1}).
(iii) Для каждой дуги w выходящей из i1, и ее конца i2 = endw выполнить следующее Θi2= max{Θi2, Θi1+ tw}. После чего уменьшить ri2 на 1, и если ri2= 0 то перевести i2 из M2 в M1
(M0 :=M0∪{i1}, M1= M1\ {i1}).
Назовем поздним временем наступлением события i число ∆i– самое позднее возможное время наступления события i, то есть максимальное значение времени в которое событие i может произойти ( процесс с концом в этой вершине должен закончится не позже момента ∆i). Позднее время наступления события определяется исходя из соотношения
∆i= min{∆endj− tj| beg j = i}
Иначе говоря, если для узла i узлы p,q, ..., v связаны с узлом i процессами w1= (i,p), w2= (i,q), ..., wk= (i,v), то
∆i= min{∆p− tw1, ∆q− tw2, ... ,∆v− twk}.
В обоих соотношениях полагаем, что ∆id= Θid, полагая, что самое позднее и самое раннее время завершения проекта совпадают, где id– конечная (destination) вершина. Рассмотрим следующий пример:
С более подробным рассмотрением этого примера можно ознакомится в [2]. Здесь i0 = 1, id = 6.[3] Для данного графа справедливы следующие соотношения:
(i) Ранние наступления событий.
Θ1= 0
Θ2= Θ1+ t12= 5
Θ3= max{Θ1+ t13, Θ2+ t23} = Θ2+ t23= 8
Θ4= Θ2+ t24= 13
Θ5= max{Θ3+ t35, Θ4+ t45} = Θ4+ t45= 13
Θ6= max{Θ3+ t36, Θ4+ t46, Θ5+ t56} = Θ5+ t56= 25
(ii) Поздние наступления событий.
∆6= Θ6= 25
∆5= ∆6− t56= 13
∆4= min{∆6− t46, ∆5− t45} = ∆5− t45= 13
∆3= min{∆6− t36, ∆5− t35} = ∆5− t35= 11
∆2= min{∆4− t24, ∆3− t23} = ∆4− t24= 5
∆1= min{∆3− t13, ∆2− t12} = ∆2− t12= 0
Правильные вычисления должны были дать результат ∆i0= 0. Критический путь составляют процессы 1 → 2 → 4 → 5 → 6.