論理関係図とダブルコードネットワーク図(python版)をもとに時間パラメータを書く

ヒント:これは人を助けるための宿題です. ここに置きます. 後で論理関係に変更があった場合は、リスト内の 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)

おすすめ

転載: blog.csdn.net/weixin_54627824/article/details/127503757