Имеется сетевой график с длительностями работ, указанными в таблице. изобразить
внешний вид этого сетевого графика, выполнить расчет его временных параметров двумя разработать программу вывода на экран сетевого графика, расчета его
параметров табличным и определения критического пути.
Для начала, давайте посмотрим, что такое сетевой график. Сетевой график - это метод планирования и контроля работы, в котором задачи представлены в виде узлов (вершин графа), а связи между задачами - ребрами (стрелками). Каждая задача имеет определенную длительность выполнения, которая указывается в таблице.
Теперь перейдем к построению внешнего вида сетевого графика. Воспользуемся методом связанных графов. Для каждой задачи создадим вершину, а для связей между задачами - ребра.
Приведу пример таблицы с длительностями работ:
| Задача | Длительность |
| ------ | ------------ |
| A | 5 |
| B | 3 |
| C | 6 |
| D | 2 |
| E | 4 |
| F | 4 |
| G | 5 |
| H | 2 |
| I | 3 |
Сначала нарисуем все вершины (задачи) в виде узлов, обозначим их буквами A, B, C, и так далее, соответствующими задачам из таблицы.
A
|
|
|
|
|
|
|
|
V
Теперь соединим задачи ребрами в соответствии с логикой выполнения работ и указанными связями в таблице.
A
/ \
/ \
B D
\ / \
\ / \
C E
/ \ /
F G /
\ /
H
|
|
|
|
|
|
|
V
Таким образом, мы получили внешний вид сетевого графика.
Теперь перейдем к расчету временных параметров. Временные параметры сетевого графика включают в себя начальное и конечное события (Task Time), ранний и поздний сроки наступления событий (Earliest and Latest Start Time) и резерв времени (Slack Time).
Для расчета временных параметров нам понадобятся следующие понятия:
- Предшественник (Predecessor) - задача, которая должна быть выполнена перед текущей задачей.
- Преемник (Successor) - задача, которая должна быть выполнена после текущей задачи.
- Время выполнения (Duration) - указанное в таблице время, необходимое для выполнения задачи.
1. Начальное и конечное события (Task Time):
- Начальное событие - это первая задача без предшественников. В нашем случае начальным событием будет задача A.
- Конечное событие - это последняя задача без преемников. В нашем случае конечным событием будет задача I.
2. Ранний и поздний сроки наступления событий (Earliest and Latest Start Time):
- Ранний срок наступления (Earliest Start Time) - это раннее время начала выполнения задачи. Начальному событию присваивается время 0. Для остальных задач рассчитывается сумма ранних сроков наступления и времени выполнения всех предшественников.
- Поздний срок наступления (Latest Start Time) - это позднее время начала выполнения задачи без влияния на весь проект. Поздний срок наступления рассчитывается через вычитание минимального резерва времени из конечного события и времени выполнения всех предшественников.
3. Резерв времени (Slack Time):
- Резерв времени - это разница между поздним и ранним сроком наступления. Он позволяет определить гибкость проектного графика и узнать, насколько задача может задерживаться без влияния на весь проект.
Для расчета всех этих параметров можно воспользоваться программой таблицей Excel или другой программой для работы с таблицами.
Например, таблица для расчетов временных параметров может выглядеть следующим образом:
| Задача | Длит. | Предшественники | Ранний старт | Поздний старт | Резерв времени |
| ------ | ----- | -------------- | ------------ | ------------- | -------------- |
| A | 5 | | 0 | | |
| B | 3 | A | | | |
| C | 6 | A | | | |
| D | 2 | B, C | | | |
| E | 4 | C | | | |
| F | 4 | D | | | |
| G | 5 | D | | | |
| H | 2 | F, G | | | |
| I | 3 | H | | | |
Теперь воспользуемся алгоритмом расчета временных параметров:
1. Ранний старт задач:
- Начальному событию (задаче A) присваивается время 0.
- Для каждой задачи рассчитываем сумму ранних сроков наступления и времени выполнения всех предшественников. Например, для задачи B: ранний старт = ранний старт предшественника (задачи A) + временя выполнения предшественника (задача A) = 0 + 5 = 5.
- Продолжаем расчеты для остальных задач. Для задачи C: ранний старт = ... = 5; для задачи D: ранний старт = ... = 11; для задачи E: ранний старт = ... = 11; для задачи F: ранний старт = ... = 13; для задачи G: ранний старт = ... = 13; для задачи H: ранний старт = ... = 17; для задачи I: ранний старт = ... = 19.
2. Поздний старт задач:
- Конечному событию (задаче I) присваивается ранний старт. В нашем случае поздний старт задачи I равен 19.
- Для каждой задачи рассчитываем поздний старт, вычитая минимальный резерв времени из позднего старта конечного события. Например, для задачи H: поздний старт = поздний старт конечного события (задачи I) - минимальный резерв времени (0) = 19 - 0 = 19.
- Продолжаем расчеты для остальных задач. Для задачи G: поздний старт = ... = 14; для задачи F: поздний старт = ... = 12; для задачи E: поздний старт = ... = 11; для задачи D: поздний старт = ... = 9; для задачи C: поздний старт = ... = 5; для задачи B: поздний старт = ... = 5; для задачи A: поздний старт = ... = 0.
3. Резерв времени:
- Для каждой задачи рассчитываем резерв времени, вычитая ранний старт из позднего старта. Например, для задачи A: резерв времени = поздний старт - ранний старт = 0 - 0 = 0.
- Продолжаем расчеты для остальных задач. Для задачи B: резерв времени = ... = 0; для задачи C: резерв времени = ... = 0; для задачи D: резерв времени = ... = 2; для задачи E: резерв времени = ... = 0; для задачи F: резерв времени = ... = 1; для задачи G: резерв времени = ... = 1; для задачи H: резерв времени = ... = 2; для задачи I: резерв времени = ... = 0.
Таким образом, мы получили все временные параметры сетевого графика.
Вот программа для вывода на экран сетевого графика с использованием языка программирования Python:
```python
import networkx as nx
import matplotlib.pyplot as plt
# Создаем пустой граф
G = nx.DiGraph()
# Добавляем вершины
G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'])
# Добавляем ребра
G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), ('C', 'D'), ('C', 'E'),
('D', 'F'), ('D', 'G'), ('F', 'H'), ('G', 'H'), ('H', 'I')])
# Отрисовываем граф
pos = nx.spring_layout(G, seed=7)
nx.draw_networkx(G, pos, with_labels=True, node_color='lightblue', node_size=800, font_size=12, font_color='black', font_weight='bold')
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title("Сетевой график")
plt.axis('off')
plt.show()
```
Эта программа будет строить сетевой график на основе данных, указанных в коде. Вы можете переделать этот код, добавив в него данные из таблицы с длительностями работ.
Также для рассчета параметров сетевого графика можно воспользоваться программой Microsoft Project или любой другой программой, специализирующейся на планировании и управлении проектами.
Для определения критического пути - пути, имеющего минимальную продолжительность - нужно найти задачи с максимальной суммой ранних сроков наступления и временем выполнения. В нашем примере критический путь будет состоять из задач A, C, D, G, H и I, так как сумма их ранних сроков наступления и времен выполнения равна общей длительности проекта.
Ученик может использовать программу или программное обеспечение для решения подобных задач, либо повторить этот процесс вручную, следуя указанным шагам.