Tips:这是帮人做的作业,这里放上来,如果遇到后面逻辑关系有变化,只要修改list中的dict,基本上就适用于所有的逻辑关系图。
目录
逻辑关系图编辑
双代号网络图
时间参数计算公式
结果(分别是最早开始时间,最早完成时间,最迟开始时间,最迟完成时间,总时差,自由时差)
代码
①最早开始时间:是指各紧前工作全部完成之后,工作i-j有可能开始的最早时间,用ES(i-j)表示。
ES(i-j)=0(i=1)
②最早完成时间:指在各紧前工作全部完成后,工作i-j有可能完成的最早时间,用EF(i-j)表示。EF(i-j)=ES(i-j)+D(i-j)
③最迟开始时间:指在不影响整个任务按期完成的前提下,工作i-j必须开始的最迟时间,用LS(i-j)表示。
LS(i-j)=LF(i-j)+D(i-j)
④最迟完成时间:指在不影响整个任务按期完成的前提下,工作i-j必须完成的最迟时间,用LF(i-j)表示。
LF(i-j)=min{LS(i-j)}
⑤总时差:指在不影响总工期的前提下,工作i-j可以利用的机动时间,用TF(i-j)表示。
TF(i-j)=LF(i-j)+EF(i-j)
⑥自由时差:指在不影响其紧后工作最早开始的前提下,工作i-j可以利用的机动时间,用FE(i-j)表示。
FE(i-j)=min{ES(i-j)-EF(i-j)}
dictA = {'工作名称':'A','紧前工作':'-','持续时间':3}
dictB = {'工作名称':'B','紧前工作':'A','持续时间':3}
dictC = {'工作名称':'C','紧前工作':'A','持续时间':3}
dictD = {'工作名称':'D','紧前工作':'B','持续时间':8}
dictE = {'工作名称':'E','紧前工作':'B,C','持续时间':5}
dictF = {'工作名称':'F','紧前工作':'C','持续时间':4}
dictG = {'工作名称':'G','紧前工作':'D,E','持续时间':4}
dictH = {'工作名称':'H','紧前工作':'E,F','持续时间':2}
dictI = {'工作名称':'I','紧前工作':'H,G','持续时间':2}
list = [dictA,dictB,dictC,dictD,dictE,dictF,dictG,dictH,dictI]
# 最早开始时间
list1 = []
for i in range(len(list)):
listtmp = {'index':'','value':0}
if list[i]['紧前工作'] == '-':
list1.append(0)
continue
tmp = list[i]["紧前工作"].split(',')
for x in tmp:
index = ord(x)-ord('A')
if listtmp['index'] == '':
listtmp['index']=index
listtmp['value'] = list1[index]
else:
if list1[ord(x)-ord('A')] > listtmp['value']:
listtmp['index'] = index
listtmp['value'] = list1[index]
list1.append(list[listtmp['index']]['持续时间'] + listtmp['value'])
print(list1)
# 最早完成时间
list2 = []
for i in range(len(list1)):
list2.append(list1[i] + list[i]['持续时间'])
print(list2)
# 计算工期
Tp = list2[len(list2)-1]
# 最迟开始时间
list3=[]
# 最迟完成时间
list4=[]
for i in range(len(list)-1,-1,-1):
if i==len(list)-1:
list4.append(Tp)
list3.append(Tp-list[i]['持续时间'])
continue
else:
min_value = 100
for j in range(len(list)-1,i,-1):
tmp = list[j]["紧前工作"].split(',')
if list[i]['工作名称'] in tmp:
if min_value > list3[len(list)-j-1]:
min_value = list3[len(list)-j-1]
list4.append(min_value)
list3.append(list4[len(list)-i-1]-list[i]['持续时间'])
list3.reverse()
list4.reverse()
print(list3)
print(list4)
# 总时差
list5 = []
for i in range(len(list)):
list5.append(list3[i]-list1[i])
print(list5)
# 自由时差
list6 = []
for i in range(len(list)-1,-1,-1):
if i==len(list)-1:
list6.append(Tp-list2[i])
continue
else:
min_value = 100
for j in range(len(list) - 1, i, -1):
tmp = list[j]["紧前工作"].split(',')
if list[i]['工作名称'] in tmp:
if min_value > list1[j]:
min_value = list1[j]
list6.append(min_value-list2[i])
list6.reverse()
print(list6)