EssayAI
Блог
Блог
Математика и алгоритмы

Полный резерв времени работы сетевого графика: формула

11 июня 2026Время чтения: 9 минут
#полный резерв времени#сетевой график#критический путь#спу#метод cpm

Полный резерв времени работы - это запас, на который можно сдвинуть начало или растянуть длительность конкретной работы сетевого графика, не отодвигая при этом срок завершения всего проекта. Понятие возникает в сетевом планировании и управлении (СПУ), когда график уже построен и посчитаны ранние и поздние времена событий: остаётся спросить не «когда наступит событие», а «сколько свободы есть у конкретной работы». Ниже разберём точную формулу полного резерва, отличие от свободного резерва той же работы и разберём числовой пример на сети из шести работ, где у одной из них резерв оказывается неожиданно большим. Чтобы сразу увидеть, как резерв меняется при других длительностях, покрутите калькулятор ниже - он выполняет прямой и обратный проход мгновенно и подставляет числа в формулу для выбранной работы.

Что такое полный резерв времени работы

Каждая работа (i,j)(i,j) сетевого графика соединяет начальное событие ii и конечное событие jj и занимает время t(i,j)t(i,j). Раннее время события ii - это tр(i)t_р(i), самый ранний момент, когда все предшествующие работы уже завершены и работа (i,j)(i,j) может начаться. Позднее время события jj - это tп(j)t_п(j), самый поздний момент, к которому событие jj обязано наступить, чтобы не сорвать срок всего проекта.

Полный резерв работы (i,j)(i,j) отвечает на вопрос: сколько времени есть у этой работы между самым ранним возможным стартом и самым поздним допустимым финишем сверх её собственной длительности. Если этот запас больше нуля, работу можно начать позже расчётного срока, растянуть, или разбить паузой - и на общий срок проекта это не повлияет. Если запас равен нулю, у работы нет свободы вообще: любая задержка немедленно сдвигает финиш проекта. Такие работы образуют критический путь - самую длинную по времени цепочку от старта к финишу.

Формула полного резерва

Полный резерв времени работы (i,j)(i,j) вычисляется по формуле:

Rп(i,j)=tп(j)−tр(i)−t(i,j),R_п(i,j) = t_п(j) - t_р(i) - t(i,j),

где tп(j)t_п(j) - позднее время конечного события работы, tр(i)t_р(i) - раннее время её начального события, а t(i,j)t(i,j) - длительность самой работы. Смысл вычитания прозрачен: из всего временного окна, доступного между ранним стартом tр(i)t_р(i) и поздним финишем tп(j)t_п(j), вычитается время, которое работа реально занимает, - остаток и есть резерв.

Отрезок работы (закрашенный) сдвигается внутри своего допустимого окна между ранним началом и поздним финишем конечного события; хвост окна - это и есть полный резерв. У критической работы окно совпадает с длительностью, сдвигать некуда

Прямой проход считает tр(i)t_р(i) для каждого события от старта к финишу: tр(i)=max⁡t_р(i) = \max по всем входящим работам от суммы раннего времени предшественника и длительности этой работы. Обратный проход считает tп(j)t_п(j) от финиша к старту: tп(i)=min⁡t_п(i) = \min по всем исходящим работам от разности позднего времени преемника и длительности работы, ведущей к нему. Оба прохода нужно выполнить один раз для всей сети, а дальше формула резерва подставляет уже готовые числа tрt_р и tпt_п для конкретной пары событий.

⚠️ Важное отличие полного резерва работы от резерва события: событие ii имеет собственный резерв R(i)=tп(i)−tр(i)R(i) = t_п(i) - t_р(i), но обнуление резервов ОБОИХ событий работы не гарантирует, что резерв самой работы тоже нулевой - подробный разбор этого нюанса и полный расчёт критического пути на графике из восьми работ есть в статье про расчёт критического пути сетевого графика. Здесь же формула Rп(i,j)=0R_п(i,j) = 0, применённая прямо к работе, - точный и достаточный критерий критичности без всяких оговорок.

Числовой пример на сети из шести работ

Возьмём сеть с пятью событиями (0 - старт, 4 - финиш) и шестью работами:

РаботаДугаДлительность, дни
A0→15
B0→23
C1→34
D2→38
E1→46
F3→45

Работа E нарочно проведена «в обход»: она ведёт из события 1 сразу в финишное событие 4, минуя событие 3. Такая диагональ - типичный источник большого резерва: у неё нет обязанности укладываться в цепочку через D и F.

Прямой проход: tр(0)=0t_р(0)=0, tр(1)=5t_р(1)=5 (через A), tр(2)=3t_р(2)=3 (через B), tр(3)=max⁡(5+4, 3+8)=max⁡(9,11)=11t_р(3)=\max(5+4,\,3+8)=\max(9,11)=11 (через D), tр(4)=max⁡(5+6, 11+5)=max⁡(11,16)=16t_р(4)=\max(5+6,\,11+5)=\max(11,16)=16 (через F). Значит, срок проекта Tкр=16T_{кр}=16 дней, и на финиш ведёт цепочка B-D-F.

Обратный проход от tп(4)=16t_п(4)=16: tп(3)=16−5=11t_п(3)=16-5=11, tп(1)=min⁡(11−4, 16−6)=min⁡(7,10)=7t_п(1)=\min(11-4,\,16-6)=\min(7,10)=7, tп(2)=11−8=3t_п(2)=11-8=3, tп(0)=min⁡(7−5, 3−3)=0t_п(0)=\min(7-5,\,3-3)=0 - совпало с tр(0)t_р(0), значит расчёт согласован.

Сетевой график с шестью работами: критический путь B-D-F выделен, у диагональной работы E показано окно полного резерва между ранним стартом и поздним финишем
Сетевой график с шестью работами: критический путь B-D-F выделен, у диагональной работы E показано окно полного резерва между ранним стартом и поздним финишем

Теперь подставим числа в формулу резерва для работы E: Rп(E)=tп(4)−tр(1)−t(E)=16−5−6=5R_п(E) = t_п(4) - t_р(1) - t(E) = 16 - 5 - 6 = 5 дней. Для сравнения, у работы A: Rп(A)=tп(1)−tр(0)−t(A)=7−0−5=2R_п(A) = t_п(1) - t_р(0) - t(A) = 7 - 0 - 5 = 2 дня, у работы C: Rп(C)=tп(3)−tр(1)−t(C)=11−5−4=2R_п(C) = t_п(3) - t_р(1) - t(C) = 11 - 5 - 4 = 2 дня. А у работ B, D и F резерв равен нулю - это и есть критический путь длиной 16 дней.

Что означает резерв в 5 дней для работы E

Резерв Rп(E)=5R_п(E) = 5 дней не означает «работа E не важна» - он означает конкретную управленческую свободу: работу E можно начать на 5 дней позже расчётного раннего срока, или растянуть её длительность на те же 5 дней, или разбить паузой суммарно в 5 дней - и ни один из этих вариантов не сдвинет финиш проекта. Это ценный ресурс при нехватке людей или оборудования: если исполнитель работы E нужен ещё где-то, его можно временно перебросить на критическую работу, а к E вернуться позже, оставаясь в пределах резерва.

Гант-диаграмма работы E с измерением: скобка отмечает полный резерв 5 дней между ранним окончанием работы и поздним временем конечного события 4
Гант-диаграмма работы E с измерением: скобка отмечает полный резерв 5 дней между ранним окончанием работы и поздним временем конечного события 4

Здесь же скрыта ловушка: резерв в 5 дней принадлежит РАБОТЕ E целиком, а не событию 1, из которого она выходит. Из события 1 выходит ещё работа C со своим резервом (2 дня), рассчитанным по той же формуле, но с другим tпt_п конечного события. Если задержать само событие 1 (а не одну работу), это «съедает» резерв сразу обеих исходящих работ одновременно - за этим нужно следить отдельно.

Полный резерв vs свободный резерв

Полный резерв Rп(i,j)=tп(j)−tр(i)−t(i,j)R_п(i,j) = t_п(j) - t_р(i) - t(i,j) отвечает на вопрос «на сколько можно сдвинуть работу, не срывая срок всего проекта». Рядом с ним существует свободный резерв:

Rсв(i,j)=tр(j)−tр(i)−t(i,j),R_{св}(i,j) = t_р(j) - t_р(i) - t(i,j),

который использует РАННЕЕ время конечного события tр(j)t_р(j) вместо позднего tп(j)t_п(j). Свободный резерв отвечает на более осторожный вопрос: «на сколько можно сдвинуть работу, не сдвигая ранний срок ни одного последующего события». Поскольку tр(j)≤tп(j)t_р(j) \le t_п(j) всегда, свободный резерв никогда не превышает полный: Rсв(i,j)≤Rп(i,j)R_{св}(i,j) \le R_п(i,j). Для работы E в нашем примере событие 4 - финишное, поэтому tр(4)=tп(4)=16t_р(4) = t_п(4) = 16 и оба резерва совпадают: Rсв(E)=16−5−6=5R_{св}(E) = 16 - 5 - 6 = 5. А вот для работы C, ведущей в промежуточное событие 3, Rсв(C)=tр(3)−tр(1)−t(C)=11−5−4=2R_{св}(C) = t_р(3) - t_р(1) - t(C) = 11 - 5 - 4 = 2 - тоже совпадает с полным здесь, потому что в событие 3 сходятся C и D, и обе используют его целиком. Расхождение между резервами становится заметным на более разветвлённых сетях - иногда полный резерв большой, а свободный равен нулю, потому что растягивание работы, даже не срывая общий финиш, всё равно сдвигает ранний старт следующей.

Частые ошибки

  • Подстановка позднего времени начального события вместо раннего. В формуле Rп(i,j)=tп(j)−tр(i)−t(i,j)R_п(i,j) = t_п(j) - t_р(i) - t(i,j) для события ii берётся именно РАННЕЕ время tр(i)t_р(i), а не позднее tп(i)t_п(i) - перепутав их, получите заниженный или отрицательный резерв.
  • Путаница полного резерва со свободным. Полный резерв использует tп(j)t_п(j) конечного события, свободный - tр(j)t_р(j). Это разные числа и разный управленческий смысл, подменять одно другим нельзя.
  • Резерв работы через резервы обоих её событий. Обнуление резервов событий ii и jj - необходимое, но не всегда достаточное условие критичности самой работы; надёжнее считать Rп(i,j)R_п(i,j) напрямую по формуле, а не выводить его из резервов событий.
  • Забытый обратный проход. Без вычисленного tп(j)t_п(j) полный резерв найти невозможно - обратный проход от финишного события к стартовому обязателен, даже если интересует только одна работа в середине сети.
  • Отрицательный резерв как «нормальный» результат. Если расчёт даёт Rп(i,j)<0R_п(i,j) < 0, это признак ошибки в построении сети или в длительностях, а не законный случай - при корректных данных полный резерв не бывает отрицательным.

FAQ

Может ли полный резерв работы быть больше резерва события, из которого она выходит? Нет, для работы, выходящей из события ii, резерв работы ограничен резервом события: Rп(i,j)≤R(i)+(tп(j)−tп(i))R_п(i,j) \le R(i) + (t_п(j) - t_п(i)) , а на практике полный резерв работы всегда согласован с резервами обоих её событий - он не может «превысить» свободу, доступную сети в целом.

Что происходит с полным резервом при увеличении длительности критической работы? Ничего не остаётся нулевым - весь проект удлиняется на ту же величину, потому что у критической работы Rп=0R_п = 0 и расти ей некуда: любое увеличение t(i,j)t(i,j) немедленно сдвигает tрt_р следующих событий и финишный срок.

Зачем вообще считать полный резерв, если известен критический путь? Критический путь показывает, ГДЕ нет свободы, а полный резерв - ЧТО делать с оставшимся временем: перераспределять ресурсы между некритическими работами, сдвигать их без риска для срока и находить дополнительный запас на случай накладок.

Коротко

Полный резерв времени работы сетевого графика вычисляется по формуле Rп(i,j)=tп(j)−tр(i)−t(i,j)R_п(i,j) = t_п(j) - t_р(i) - t(i,j): из окна между ранним стартом и поздним финишем работы вычитается её собственная длительность. Резерв, равный нулю, означает критическую работу без права на задержку; резерв больше нуля - управленческий запас, который можно расходовать на сдвиг сроков или перераспределение ресурсов. Полный резерв отличается от свободного тем, что использует позднее, а не раннее время конечного события, и потому никогда не меньше свободного резерва той же работы.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также

Расчёт критического пути сетевого графика: формулы

Расчёт критического пути сетевого графика: формулы

Как посчитать критический путь сетевого графика: прямой и обратный проход, резерв события, полный и свободный резерв работы - разбор формул CPM на числовом примере с калькулятором.

11 июня 20269 минут
Сетевое планирование: построение сетевого графика

Сетевое планирование: построение сетевого графика

Как построить сетевой график проекта: прямой и обратный проходы, ранние и поздние времена событий, критический путь и резервы работ - с примером расчёта и калькулятором.

11 июня 20268 минут
Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Как работают агрегатные функции SQL: COUNT, SUM, AVG, MIN и MAX, группировка GROUP BY, порядок выполнения запроса, разница HAVING и WHERE и поведение NULL внутри агрегата.

24 сентября 20269 минут
Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): почему интеграл sin t / t не берётся в элементарных функциях, разложение в ряд, предел π/2, максимум Si(π) и выброс Гиббса. С калькулятором.

24 сентября 202610 минут
Куча как структура данных: массив и просеивание

Куча как структура данных: массив и просеивание

Куча как структура данных: свойство кучи, хранение в обычном массиве и индексы 2i+1 и 2i+2, просеивание sift-up и sift-down, построение за O(n) и приоритетная очередь.

24 сентября 202610 минут
Линейная зависимость векторов: критерии и примеры

Линейная зависимость векторов: критерии и примеры

Что такое линейная зависимость векторов, как проверить её определителем и рангом матрицы, чем коллинеарность отличается от компланарности и как всё это связано с базисом.

24 сентября 202610 минут