付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
加工时间依赖开工时间的排序问题的任务书任务:根据加工时间依赖开工时间的排序问题制定并实现一个算法,以最小化完成全部任务所需的总时间。问题背景:在工业生产中,任务通常具有不同的加工时间要求和依赖关系。特定任务可能需要在其他任务完成后才能开始加工,此外,有些任务对其他任务具有加工完成时间上的依赖关系,例如,任务A的完成时间可能取决于任务B是否已完成。问题描述:设有n个任务,每个任务的加工时间和依赖关系如下所示:任务加工时间依赖关系-------------------------------------162,523334--42--554,3614其中,依赖关系表示该任务需要等待哪些任务完成后才能开始加工。任务要求:根据以上问题描述,制定并实现一个算法,以最小化完成全部任务所需的总时间。算法实现过程:1.将任务按依赖关系分组,并将任务归类,形成有向无环图(DAG)。2.对DAG进行拓扑排序,得到一个合法的任务序列。3.根据任务序列依次计算最早开始时间和最晚开始时间。4.根据任务序列计算出每个任务的剩余耗时和关键路径。5.根据关键路径确定所有任务的最短完成时间。参考实现:1.对任务进行预处理,将任务变为拓扑结构。其中,每个任务分为三块,分别为前置任务项,耗时和后置任务项。前置任务项为一个数组,表示该任务还需要等待哪些任务完成;耗时是一个整数,表示该任务需要的时间;后置任务项也是一个数组,表示哪些任务需要等待该任务完成。2.进行拓扑排序得到可行的任务序列。首先,找到所有没有前置任务的任务,将它们放入待排序列表中。然后,对待排序列表中的任务进行遍历,将与之相关的任务的前置任务列表中移除该任务,当该任务的后置任务列表中不再有前置任务时,将该任务放入已排序列表中。重复此过程,直到所有任务都在已排序列表中。3.计算最早开始时间和最晚开始时间。依次遍历排序后的任务序列,在已经确定好时间的任务中,找出前置任务中最大的时间,并将其作为该任务的最早开始时间。然后,从现在开始,沿着后置任务列表逆推,找出最小的时间,作为该任务的最晚开始时间。最晚开始时间减去最早开始时间即为浮动时间。4.计算剩余耗时和关键路径。依次遍历排序后的任务序列,对于每个任务,先计算出其初始剩余耗时,即为该任务要求的时间,然后找到其后置任务列表中最小的剩余耗时,将其减去该任务的耗时即为该任务的剩余耗时。如果剩余耗时为0,则说明该任务已完成,将其加入关键路径中。5.根据关键路径,计算所有任务的最短完成时间。依次遍历关键路径上的任务,将它们的耗时相加即为最短完成时间。参考代码:```importheapqclassTask:def__init__(self,time):self.time=timeself.pred=[]#前置任务项self.succ=[]#后置任务项self.eet=0#最早完成时间self.let=0#最晚完成时间self.res=time#剩余耗时self.cp=False#是否为关键路径deftopological_sort(tasks):#Kahn算法,计算拓扑序列in_degree={task:len(task.pred)fortaskintasks}zero_in_degree=[taskfortaskintasksifin_degree[task]==0]queue=zero_in_degree.copy()result=[]whilequeue:task=heapq.heappop(queue)result.append(task)forsintask.succ:in_degree[s]-=1ifin_degree[s]==0:heapq.heappush(queue,s)returnresultdefcalc_time(tasks,seq):#根据拓扑序列计算最早开始时间,最晚开始时间,剩余耗时和关键路径fortaskinseq:eet=0forpintask.pred:eet=max(eet,p.eet+p.time)task.eet=eettask.cp=Trueiflen(task.succ)==0elseFalselast=seq[-1]last.let=last.eetfortaskinreversed(seq):let=float('inf')forsintask.succ:let=min(let,s.let-s.time)task.let=lettask.res=task.let-task.eetfortaskinseq:iftask.cp:task.done=task.eettask.color='green'else:task.done=task.let-task.restask.color='red'#测试tasks=[Task(6),Task(3),Task(4),Task(2),Task(5),Task(1)]tasks[0].pred=[tasks[3],tasks[4]]tasks[1].pred=[tasks[2]]tasks[2].pred=[]tasks[3].pred=[]tasks[4].pred=[tasks[3],tasks[1]]tasks[5].pred=[tasks[3]]foriinrange(6):forjinrange(6):iftasks[i]intasks[j].pred:tasks
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖艺师安全专项评优考核试卷含答案
- 水工土石维修工诚信品质评优考核试卷含答案
- 化妆品配方师班组安全知识考核试卷含答案
- 涂料合成树脂工岗前岗中考核试卷含答案
- 铁路机车车辆制动钳工操作安全考核试卷含答案
- 26年儿童靶向给药体重折算细则
- 医学26年:PET-CT淋巴瘤应用解读 查房课件
- 提高员工心理健康的重要性-心理健康专家
- 无人驾驶车辆终端设备运维保障管理方案
- 破局未来:氢燃料飞机-颠覆空旅重塑可持续未来
- 火灾现场触电应急处理方案
- 2023年广州市黄埔区中医医院招聘笔试真题
- 国家义务教育质量监测(2024年) 中小学生心理健康测试试卷
- 车险基础知识及常见问题
- 天津市建筑工程施工质量验收资料管理规程
- 4.5.4 预制柱生产及质量控制(装配式混凝土建筑构件生产与管理)
- 国家基本公共卫生服务项目规范培训课件
- 《中华-05》骨龄标准
- 【高中语文】《屈原列传》课件++统编版+高中语文选择性必修中册
- 创意简约PPT模板
- 《直播运营管理》课件全套 第1-6章 直播运营认知-直播运营复盘
评论
0/150
提交评论