
- •Министерство образования и науки российской федерации
- •2004 Г.
- •§2. Деревья, остовы, разрезы
- •§3. Ориентированные графы
- •§4. Уравнения и графы
- •§5. Правила упрощения орграфов для систем уравнений
- •§6. Построение нормализованного графа
- •§7. Задача о кратчайшем пути на графе. Алгоритм Дейкстры
- •§8. Сетевое планирование
- •§9. Задачи для самостоятельной работы
- •Математика. Основы дискретной математики Методические указания по изучению курса
- •193171, Г. Санкт-Петербург, ул. Седова, 55/1
§8. Сетевое планирование
Теория графов оказалась мощным инструментом решения задач сетевого планирования. Сетевое планирование применяют для организации и составления календарных планов реализации больших комплексов работ. Это, например, научно-исследовательские работы с участием нескольких институтов, разработка автоматизированной системы бухгалтерского учета, строительство большого объекта и т. д. Управление всеми этими работами можно осуществлять с помощью метода критического пути. Использование этого метода позволяет сравнительно просто выяснить, когда необходимо начинать и заканчивать выполнение отдельных операций, как задержка хода выполнения некоторой операции влияет на время завершения всего проекта.
Для использования метода критического пути нужно, прежде всего, разбить крупный проект на отдельные операции и составить перечень операций. Некоторые из них могут выполняться одновременно, другие – только в определенном порядке. Например, при строительстве дома нельзя возводить стены раньше, чем сделан фундамент. Необходимо выяснить очередность выполнения всех операций. Для этого составляют список операций, непосредственно предшествующих каждой операции. После этого нужно запланировать время, необходимое для выполнения каждой операции. Полученные данные обычно помещаются в таблицу.
Пример 1. В следующей таблице приведены данные для проекта, состоящего из шести операций. Для каждой из них задана продолжительность и указаны непосредственно предшествующие ей операции.
Таблица 1.
Операция |
Предшествующие операции |
Время выполнения |
a1 |
– |
10 |
a2 |
– |
5 |
a3 |
– |
15 |
a4 |
a1, a2 |
18 |
a5 |
a2, a3 |
19 |
a6 |
a4, a5 |
18 |
Взаимосвязь отдельных работ проекта удобно задавать с помощью ориентированного графа, называется сетевым графиком. Каждой операции соответствует дуга графа. Связи между операциями также представляются в виде дуги. Дугу-связь проводят из конца дуги, соответствующей предшествующей операции, в начало следующей операции. Чтобы отличить операции от связей, операции изображают сплошными линиями, а связи – пунктирами.
Каждая вершина графа называется событием и соответствует некоторому моменту времени. Временем наступления события считают время, когда завершено выполнение всех операций, входящих в соответствующую вершину.
Пример 2. Сетевой график для проекта, заданного таблицей 1, изображен на рис. 45.
Рис. 45.
Большое количество дуг в сети усложняет решение задачи. Поэтому, прежде всего, нужно упростить полученную сеть. Для этого можно выбросить некоторые дуги-связи. Начало и конец выбрасываемой дуги объединяют в одну вершину. При этом нужно проверять, не нарушится ли порядок выполнения операций после выбрасывания дуги. Проверку проводят по таблице, задающей проект.
Пример 3. Упростить сетевой график некоторого проекта, изображенный на следующем рисунке.
При упрощении выброшены дуги α, β, γ. Последовательность выполнения работ при этом не изменилась. Дугу δ выбросить нельзя, так как после этого дуги – работы a4 и a7 будут неразличимы (рис. 46).
Рис. 46.
Сетевой график не может содержать циклов. Действительно, если предположить, что имеется некоторый цикл (a1, a2, …, an-1, an, a1), то операция a1 может быть выполнена только после завершения операции an , операция an только после завершения операции an-1, ..., операция a2 – только после завершения операции a1. В этом случае проект никогда не может быть выполнен.
Сеть может содержать несколько начальных вершин (таких вершин, в которые не входит ни одна дуга). В этом случае можно добавить еще одну вершину и провести из нее дуги во все начальные вершины. Тогда сеть будет иметь одну начальную вершину. Аналогично вводят конечную вершину (вершина, из которой не выходит ни одна дуга).
После построения сетевого графика нумеруют его вершины. Нумерацию, при которой номер начала любой дуги меньше номера ее конца, называют правильной. Алгоритм получения правильной нумерации вершин следующий:
Нумеруют все начальные вершины.
Вычеркивают все дуги, выходящие из начальных вершин. При этом получают новые начальные вершины. Если не все вершины перенумерованы, переходят к шагу 1.
Конечная вершина получает при этом наибольший номер.
Рассмотрим временные параметры сетевого графика. Предположим, что выполнение работы начато в момент времени t=0. Пусть tij – заданная продолжительность работы (vi, vj), которая соответствует ребру, соединяющему вершины vi и vj. Величины tij записывают на соответствующих дугах сетевого графика и считают их длинами.
Ранним сроком начала работы называют наименьшее допустимое время, когда работа может быть начата.
Если
из вершины vi
выходит несколько работ, то ранние сроки
начал этих работ совпадают и называются
ранним сроком наступления события vi.
Ранний срок начала работы (vi,
vj)
обозначают через
,
а ранний срок наступления события vi
– через
.
Для удобства величины
записывают в верхней трети каждой
вершины (рис. 47).
Рис. 47.
Если
работа начата в ранний срок начала, то
время ее окончания называется ранним
сроком окончания работы.
Ранний срок окончания работы (vi,
vj)
обозначается
.
Будем считать, что нумерация вершин является правильной, и вместо vi будем указывать только номер i этой вершины.
Для вычисления ранних сроков наступления событий используют следующий алгоритм, называемый алгоритмом Форда.
Полагают
.
Для i=2, 3, ..., п вычисляют
, гдеBi – множество вершин, из которых выходят ребра, входящие в вершину i.
Номер
k
той вершины, для которой получено
значение
,
заносят в
левую треть вершины i
(рис. 47).
После
нахождения величин
рассчитывают
ранние сроки начал и окончаний работ
по формулам:
=
,
=
+
tij
.
Пример 4. Найти ранние сроки начал и окончаний работ для сети, изображенной на рис. 48.
Рис. 48.
Полагаем
.
После этого рассматриваем вершины в
порядке их номеров:
.
В левую треть
вершиныv2
ставим номер вершины v2;
далее,
.
В левую треть вершины v3
записываем номер вершины v2
(так как при движении из v2
получено
значение
).
Аналогичным образом вычисляем, что
и
.
После этого находим ранние сроки начал
и окончаний работ:
,
,
,
,
,
,
,
,
,
,
,
.
Результаты вычислений вносим на сетевой
график (рис. 49).
Рис. 49.
Критическое
время и критический путь.
Ранний срок наступления конечного
события называется критическим
временем и
обозначается
.
Весь проект не может быть завершен
раньше момента времени
,
т. е. критическое время – это минимальный
срок окончания всего комплекса работ.
На сетевом графике
– это длина пути наибольшей длины из
начальной вершины в конечную.
Всякий
путь длины равной
из начальной вершины в конечную называетсякритическим
путем. Для
его построения используется следующий
алгоритм. Начинают построение с конечной
вершины. В ее левой трети стоит номер
той вершины, при движении из которой
определялся ранний срок наступления
события. Критический путь идет из
конечной вершины в вершину с этим
номером; затем в вершину, номер которой
стоит в левой трети полученной при
движении вершины, и так до начальной
вершины.
Пример 5. Для сети, изображенной на рис. 49, критический путь выделен жирной линией.
Если в какой-то вершине стоят два номера, то критический путь распадается на два. Таким образом, критических путей может быть несколько.
Всякий некритический путь короче критического. Поэтому при выполнении работ, лежащих на этом пути, можно допустить задержку времени, которая не превышает разности между критическим временем и длиной пути. Такая задержка не влияет на срок выполнения всего проекта. Любая задержка выполнения работ, лежащих на критическом пути, вызывает такую же задержку выполнения всей работы.
Поздние
сроки начал и окончаний работ.
Заметим, что каждое событие должно
произойти не слишком поздно, чтобы
обеспечить последовательное выполнение
всех операций некоторого пути от этого
события до конечного. С учетом этого
всем событиям удобно сопоставить второе
множество чисел, называемых поздними
сроками наступления
этих событий. Они аналогичны ранним
срокам наступления, но их измерение
производится относительно конечного
события, а не начального. Дадим формальное
определение. Зададим время Т
выполнения всего комплекса работ.
Очевидно, что должно выполняться
неравенство Т≥. Обычно берутТ=
,
что и предполагается в дальнейшем.
Поздним
сроком окончания
работы называется наибольшее допустимое
время окончания работы без нарушения
срока завершения всего проекта. Поздний
срок окончания работы (vi,
vj)
обозначается
.
Можно определить поздний срок начала
работы (vi,
vj)
по формуле
=
–
tij
.
Поздним
сроком
наступления
события vj
называется наиболее поздний срок
окончания всех работ, входящих в
соответствующую вершину. Для вычисления
поздних сроков наступления событий
используется следующий алгоритм.
Полагают
.
Для j=n-1, n-2, ...,2, 1 вычисляют
, гдеAj – множество вершин, в которые входят ребра, выходящие из вершины j.
Таким
образом, для конечной вершины поздний
срок наступления событий совпадает со
временем выполнения всего проекта.
Затем просматривают все вершины в
порядке убывания их номеров. Для каждой
вершины рассматривают множество всех
выходящих работ. Из поздних сроков
наступления их концов вычитают
продолжительность этих работ. Минимальная
из этих разностей и равна
.
Величину
записывают для удобства вычислений в
правой трети вершины vj
(рис. 47).
Пример
6. Положим
для сети, изображенной на рис. 48, время
окончания всего комплекса работ Т==15
и поставим это значение в правую треть
вершины v5.
Перейдем к событию v4:
.
Аналогично находим
.
Из вершины v2 выходят две работы, поэтому
.
Аналогично
получаем
.
Результаты вычислений приведены на
рис. 50.
Рис. 50.
Из алгоритма вычисления поздних сроков следует, что увеличение позднего срока окончания проекта Т на t единиц ведет к увеличению поздних сроков наступления всех событий также на t единиц.
После
определения
можно
вычислить поздние сроки начала и
окончаний всех работ проекта:
=
,
=
–
tij
.
Резервы
времени.
Рассмотрим некоторую работу (vi,
vj).
Найдем время, которое можно выделить
для выполнения этой работы без задержки
срока окончания всего проекта. Работа
(vi,
vj)
не может быть начата раньше срока
и должна
быть закончена не позднее времени
.
Для выполнения этой работы можно
затратить не более
–
единиц
времени. По плану эту работу можно
сделать за tij
единиц времени.
Максимально допустимое время, на которое можно увеличить продолжительность выполнения работы (vi, vj) или отложить начало так, что это не вызовет задержки выполнения всего проекта, называется полным резервом времени.
Полный резерв времени работы (vi, vj) обозначают Rij, он равен
Rij=–
–
tij
Если полный резерв времени некоторой работы равен нулю, то задержка ее выполнения вызовет такую же по времени задержку выполнения всего проекта.
Если на некоторой работе использовать ее полный резерв, то путь, проходящий через эту работу, станет критическим. Полный резерв времени любой работы на этом пути станет равным нулю.
Найдем
время, которое можно дополнительно
выделить для выполнения работы (vi,
vj)
без введения дополнительных ограничений
на время выполнения последующих работ.
Для этого выполнение работы должно быть
закончено к моменту времени
.
Таким образом можно выделить
–
единиц времени на выполнение работы
(vi,
vj).
Величина
rij=–
–tij
называется свободным
резервом времени работы (vi,
vj).
Если использовать свободный резерв на
некоторой операции, то последующие
работы могут быть по-прежнему начаты в
свои ранние сроки.
Резервы
времени удобно рассчитывать по сетевому
графику, так как величины
,
записаны в его вершинах. Полученные
значения резервов записывают около
соответствующих дуг сетевого графика.
Сначала ставят полный резерв, а затем
свободный.
Отметим,
что если поздние сроки найдены при Т=,
то для любой работы (vi,
vj),
лежащей на критическом пути,
=
,
=
+tij,
и следовательно, Rij=rij=0.
Пример 7. Для сети, изображенной на рис. 50, имеем:
R24=–
–
t24=14–2–5=7,
r24=
–
–
t24=7–2–5=0,
R45=–
–
t45=15–7–1=7,
r45=
–
–
t45=15–7–1=7,
R13=–
–
t13=8–0–4=4,
r13=
–
–
t13=8–0–4=4.
Для остальных работ резервы времени равны нулю, так как они лежат на критическом пути. Результаты вычислений показаны на рис. 51.
Рис. 51.