根据逻辑关系图以及双代号网络图编写求时间参数(python版)

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)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

獜洛橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值