ヒント:これは人を助けるための宿題です. ここに置きます. 後で論理関係に変更があった場合は、リスト内の dict を変更するだけです. これは基本的にすべての論理関係図に適用されます.
目次
結果(早番開始時刻、最早終了時刻、最遅開始時刻、最遅終了時刻、トータルタイム差、フリータイム差)
論理関係図
ダブルコードネットワーク図
時間パラメータの計算式
①最早開始時刻:前のタスクがすべて完了した後、作業ijを開始できる最も早い時刻を ES(ij) で表します。
IS(ij)=0(i=1)
②最早完了時間:前のタスクがすべて完了した後、作業ijが完了する可能性が最も高い時間をEF(ij)で表します。EF(ij)=ES(ij)+D(ij)
③最遅開始時刻: LS(ij)で表される、タスク全体のスケジュール通りの完了に影響を与えることなく、作業ijが開始されなければならない最も遅い時刻を指します。
LS(ij)=LF(ij)+D(ij)
④最遅完了時間: LF(ij) で表される、タスク全体のスケジュール通りの完了に影響を与えずに作業ijを完了しなければならない最も遅い時間を指します。
LF(ij)=最小{LS(ij)}
⑤総時間差:総工期 に影響を与えずに作業ijに使用できる操船時間を TF(ij) で表す。
TF(ij)=LF(ij)+EF(ij)
⑥空き時間差:直近の作業 の開始時刻に影響を与えずに作業ijで使用できる操船時間をFE(ij) で表す。
FE(ij)=分{ES(ij)-EF(ij)}
結果(早番開始時刻、最早終了時刻、最遅開始時刻、最遅終了時刻、トータルタイム差、フリータイム差)
コード
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)