单代号网络图(Activity-on-Node,AON)是一种项目管理工具,用于展示项目活动之间的依赖关系和时间顺序。在项目管理中,单代号网络图可以帮助项目经理识别关键路径、计算项目工期和资源分配。以下是一些关键步骤和技巧,帮助您破解单代号网络图计算难题。
1. 理解单代号网络图的基本概念
1.1 活动和节点
在单代号网络图中,每个活动用一个节点表示,节点之间的箭头表示活动之间的依赖关系。
1.2 事件和时间
事件是活动开始或结束的瞬间,用圆圈表示。事件编号通常比活动编号小1。
2. 创建单代号网络图
2.1 确定活动
列出所有项目活动,并确定它们之间的依赖关系。
2.2 绘制节点和箭头
根据活动列表,绘制节点和箭头,确保箭头指向后续活动。
2.3 编号节点和活动
为每个节点和活动分配唯一编号。
3. 计算最早开始时间(ES)和最早完成时间(EF)
3.1 从起点开始
从网络图的起点(通常是最左边的节点)开始,计算每个活动的最早开始时间和最早完成时间。
3.2 公式
- ES = 前一个活动的EF
- EF = ES + 活动持续时间
3.3 示例代码(Python)
def calculate_es_ef(activities):
es = [0] * len(activities)
ef = [0] * len(activities)
for i in range(1, len(activities)):
for j in range(i):
if activities[i]['dependencies'].count(j) == 0:
es[i] = max(es[i], ef[j])
ef[i] = es[i] + activities[i]['duration']
return es, ef
activities = [
{'id': 0, 'duration': 3, 'dependencies': []},
{'id': 1, 'duration': 2, 'dependencies': [0]},
{'id': 2, 'duration': 4, 'dependencies': [0]},
{'id': 3, 'duration': 3, 'dependencies': [1, 2]}
]
es, ef = calculate_es_ef(activities)
print("ES:", es)
print("EF:", ef)
4. 计算最晚开始时间(LS)和最晚完成时间(LF)
4.1 从终点开始
从网络图的终点(通常是最右边的节点)开始,计算每个活动的最晚开始时间和最晚完成时间。
4.2 公式
- LS = LF - 活动持续时间
- LF = min(后续活动的LS)
4.3 示例代码(Python)
def calculate_ls_lf(activities, es, ef):
ls = [0] * len(activities)
lf = [0] * len(activities)
for i in range(len(activities) - 1, -1, -1):
for j in activities[i]['dependencies']:
if ls[i] > ls[j]:
ls[i] = ls[j]
if lf[i] > lf[j]:
lf[i] = lf[j]
ls[i] = max(ls[i], lf[i] - activities[i]['duration'])
return ls, lf
ls, lf = calculate_ls_lf(activities, es, ef)
print("LS:", ls)
print("LF:", lf)
5. 计算总浮动时间(TF)和自由浮动时间(FF)
5.1 总浮动时间(TF)
TF = LF - EF
5.2 自由浮动时间(FF)
FF = LS - ES
6. 确定关键路径
关键路径是网络图中所有活动的浮动时间都为0的路径。
7. 总结
掌握单代号网络图计算的关键步骤和技巧,可以帮助您更好地进行项目管理。通过理解基本概念、创建网络图、计算时间参数和确定关键路径,您可以有效地管理项目进度和资源。
