CN103729748A - 基于多级网络计划的进度计算方法及其算法实现 - Google Patents

基于多级网络计划的进度计算方法及其算法实现 Download PDF

Info

Publication number
CN103729748A
CN103729748A CN201410032701.3A CN201410032701A CN103729748A CN 103729748 A CN103729748 A CN 103729748A CN 201410032701 A CN201410032701 A CN 201410032701A CN 103729748 A CN103729748 A CN 103729748A
Authority
CN
China
Prior art keywords
task
function
late
calculating
deadline
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410032701.3A
Other languages
English (en)
Other versions
CN103729748B (zh
Inventor
王学敏
单承方
李琳
杨鸽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shenzhou Aerospace Software Technology Co.,Ltd.
Original Assignee
BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd filed Critical BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd
Priority to CN201410032701.3A priority Critical patent/CN103729748B/zh
Publication of CN103729748A publication Critical patent/CN103729748A/zh
Application granted granted Critical
Publication of CN103729748B publication Critical patent/CN103729748B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种基于多级网络计划的进度计算方法与算法实现,其特征在于:所述进度计算通常包含4个步骤,分别是:正向计算、反向计算、最终计算和计算关键路径;(1)正向计算;(2)反向计算;(3)最终计算;(4)计算关键路径,计算得到了每个任务最早开始、完成时间,最晚开始、完成时间,开始、完成时间,根据关键任务的定义计算得出关键任务,关键任务组成的路径即为关键路径。本发明包含任务依赖关系和任务限制类型约束的进度计算方法和易于计算机软件实现的算法描述,旨在解决用计算机软件编写进度计划、优化进度安排的技术问题。

Description

基于多级网络计划的进度计算方法及其算法实现
技术领域:
本发明涉及一种公开了基于多级网络计划模型的进度计算方法和算法实现。
背景技术:
航天型号工程是一项协作关系十分复杂、风险控制难度很大的群管理工程项目,其项目计划经常达到成千上万条,在这种情况下,如何合理、高效的编写和优化进度计划,使项目周密地控制在计划范围以内,保证项目“更快、更好”地实现目标,显得尤为重要。随着计算机技术的发展,用计算机软件进行进度安排的优势越发明显。举个例子,如果要完成一个由100个左右的活动组成的项目的编制,一个人至少需要1个星期的时间,而计算机只需要几秒钟的时间。
航天型号项目进度计划一般以研制的产品为中心,按集团公司-研究院-研究所(事业部、厂)层次将研制过程中所应完成的工作自上而下逐级细化分解。通过工作分解结构(WBS)将项目按照其内在结构或实施过程的顺序进行逐层分解,直至相对独立、内容单一、便于核算和检查的工作单元,并建立相互间的逻辑关系,从而形成多级网络计划模型。
目前,项目管理软件市场上,使用较多的是Oracle Primavera的P3,P6,微软公司的Project等。但在进度计算方面,P3,P6尚不支持多级网络计划模型(不能在摘要任务之间或摘要任务与作业任务之间设置依赖关系),Project只适合中小型项目管理,并且其进度计算算法尚未公开。因此,在某些方面并不能满足航天工程项目的应用需求。本发明基于多级网络计划模型,提出了一种进度计算方法,并给出了算法实现,它在项目管理软件AVPLAN5.0中得到了应用和验证,旨在满足航天工程项目的应用需求。
发明内容
为解决现有技术的不足,本发明的目的在于提供一种基于多级网络计划模型的进度计算方法和算法实现,包含任务依赖关系和任务限制类型约束的进度计算方法和易于计算机软件实现的算法描述,旨在解决用计算机软件编写进度计划、优化进度安排的技术问题。
为了实现上述目标,本发明采用如下的技术方案:
一种基于多级网络计划的进度计算方法,其特征在于:所述进度计算通常包含4个步骤,分别是:正向计算、反向计算、最终计算和计算关键路径;
(1)、正向计算
最早开始时间和最早完成时间是通过一个正向计算得出的;
(2)、反向计算
最晚开始时间、最晚完成时间是通过一个反向计算得出的;
(3)、最终计算
开始时间和完成时间是通过最终计算过程计算得出的;
(4)、计算关键路径
在(1)、(2)、(3)三个步骤中,计算得到了每个任务最早开始、完成时间,最晚开始、完成时间,开始、完成时间,根据关键任务的定义计算得出关键任务,关键任务组成的路径即为关键路径。
所述正向计算包括四个算法:正向计算算法、calculateTask函数、getTimeByFowardTasks函数和getTimeByParentFowardTasks函数;
正向计算算法用于根据项目中任务之间的依赖关系,由前向后正推,计算项目各个任务的最早开始时间和最早完成时间;calculateTask函数用于计算指定任务的最早开始时间;getTimeByFowardTasks函数用于根据指定任务的前置任务计算得出该任务的候选最早开始时间;getTimeByParentFowardTasks函数用于据指定任务的父任务或祖先任务的前置任务计算得出的该任务的候选最早开始时间。
所述反向计算包括反向计算算法、calculateLastTime函数、getTimeBySubsequenceTasks函数、getTimeByParentSubsequenceTasks函数;
反向计算算法用于根据项目中任务之间的依赖关系,由后向前逆推,计算项目各个任务的最晚开始时间和最晚完成时间;calculateLastTime函数用于计算指定任务的最晚开始时间和最晚完成时间;getTimeBySubsequenceTasks函数用于根据指定任务的后置任务计算得出该任务的候选最晚开始时间;getTimeByParentSubsequenceTasks函数用于根据指定任务的父或祖先的后置任务计算得出的该任务的候选最晚开始时间。
所述最终计算包括最终计算算法和calculateExpectTask函数;
最终计算算法用于根据项目中任务之间的依赖关系,由前向后正推,利用正向计算和反向计算的结果计算项目各个任务的最终的开始时间和完成时间;calculateExpectTask函数用于计算指定任务的开始时间、完成时间。
所述关键路径包括关键路径算法,关键路径算法用于根据项目中任务的最早开始、完成时间,最晚开始、完成时间,开始、完成时间来确定关键任务。
在计算过程中,本发明抽象出进度计算的规则如下:
(1)计算起点和终点的选择:在进度计算过程中寻找计算的起点和终点、对起点进行初始化的策略是非常重要的。
在正向计算过程中我们选择没有前置任务的作业节点为起点,用它们的计划开始时间初始化其最早开始时间,用它们的计划完成时间初始化最早完成时间,计算的终点是没有后置任务的节点。
在反向计算过程中我们选择没有后置任务的作业节点为起点,用正向计算过程中计算出来的最大的最早完成时间去初始化它们的最晚完成时间,并依据工期不变原则计算相应的最晚开始时间,计算的终点是没有前置任务的节点。
在最终计算过程中我们选择没有前置任务的作业节点为起点,用它们的最早开始时间或最晚开始时间初始化其开始时间(受限制类型的影响),计算的终点是没有后置任务的节点。
(2)依赖关系的继承和转换:父任务的依赖关系可以转换为其子任务的依赖关系,即如果父任务具有前置任务,则其所有子孙任务都具有相同的前置任务,如果父任务具有后置任务,则其所有子孙任务都具有相同的后置任务,这是一个递归的过程,关系的转换直至作业任务。
(3)依赖关系的继承和转换:父任务的依赖关系可以转换为其子任务的依赖关系,即如果父任务具有前置任务,则其所有子孙任务都具有相同的前置任务,如果父任务具有后置任务,则其所有子孙任务都具有相同的后置任务,这是一个递归的过程,关系的转换直至作业任务。
(4)摘要任务时间的计算:摘要任务(WBS)时间的计算是对其子任务的时间的汇总。摘要任务的开始时间取其子任务开始时间的最小值,完成时间取其子任务完成时间的最大值;最早开始时间取其子任务最早开始时间的最小值,最早完成时间取其子任务最早完成时间的最大值;最晚开始时间取其子任务最晚开始时间的最小值,最晚完成时间取其子任务最晚完成时间的最大值。
(5)作业任务时间的计算
进度计算中,对于作业任务来说,在保持作业任务工期不变的前提下,正向计算过程是通过前置任务的最早开始时间计算后置任务的最早开始时间,而反向计算是通过后置任务的最晚开始时间逆推前置任务的最晚开始时间,而最终计算是通过前置任务的开始时间计算后置任务的开始时间。通过总结不难发现,计算包含两种模式,一种是由前置任务的时间顺推后置任务的时间,另一种是通过后置任务的时间逆推前置任务的时间。这两种模式的计算策略在下面给出了说明,假设i是j的前置任务,我们用时间类型的代号加任务标识来表示任务该时间类型的值,比如ESj表示任务j的最早开始时间,时间类型代号参照开篇的术语解释。
由前置任务的时间顺推后置任务的开始时间的计算逻辑如表格2所示:
表格2顺推计算时间逻辑
关系类型 计算公式
FS(完成-开始) ESj=EFi+1天
SS(开始-开始) ESj=ESi
FF(完成-完成) ESj=EFi-Dj+1天
SF(开始-完成) ESj=ESi-Dj
由后置任务的时间逆推前置任务的开始时间的计算逻辑如表格3所示:
表格3逆推计算时间逻辑
关系类型 计算公式
FS(完成-开始) LSi=LSj-Di
SS(开始-开始) LSi=LSj
FF(完成-完成) LSi=LFj-Di+1天
SF(开始-完成) LSi=LFj+1天
给出了计算任务的开始时间的算法,还需要依据延搁时间对开始时间进行调整。设上述计算所得开始时间为T1,延搁时间为n天(n为正数、负数或零),则最终时间T的计算参见公式(1)。
Figure BDA0000461220370000061
一个任务可有多个前后置关系,即它既可以有多个前置任务,又可以有多个后置任务,所以要进行多次类似上述步骤的计算,我们究竟选取哪个计算结果呢,需要制定选择策略。一般的,在正向计算过程中,选择该任务计算得出的所有最早开始时间中最大的那个作为该任务的最早开始时间,即“取大不取小”原则;在反向计算过程中,选择该任务计算得出的所有最晚开始时间中最小的那个作为该任务的最晚开始时间,即“取小不取大”原则;在最终计算过程中,选择该任务计算得出的所有开始时间中最大的那个作为该任务的开始时间,由于最终计算过程也是顺推,所以采用“取大不取小”原则。
在计算过程中,限制类型和限制时间会影响到进度计算的结果,其中“越早越好”、“越晚越好”只是在最终计算过程考虑到,其它限制类型会在正向计算、反向计算和最终计算中考虑到,限制类型各种情况的含义和处理逻辑如下表:
表格4限制类型对计算结果的影响
Figure BDA0000461220370000071
在完成正向计算、反向计算和最终计算三个步骤后,得到了各任务最早开始、完成时间,最晚开始、完成时间,开始、完成时间,那么计算关键任务就非常简单,其规则为:该任务必须是作业任务;该任务的总浮时小于等于零,即任务的最晚开始时间小于或等于任务的开始时间。由关键任务组成的路径即为关键路径。
由于采用了上述技术方案,与现有技术相比较,本发明抽象出进度计算的规则:计算起点和终点的选择,依赖关系的继承和转换,四种依赖条件下作业任务时间的计算逻辑,对延搁时间的处理,作业任务开始时间的选择,根据限制类型调整任务时间。同时,进度计算算法的描述,包括正向计算、反向计算、最终计算和关键路径的算法描述。
本发明包含任务依赖关系和任务限制类型约束的进度计算方法和易于计算机软件实现的算法描述,旨在解决用计算机软件编写进度计划、优化进度安排的技术问题。
附图说明
图1为本发明一种实施例中calculateTask函数流程图。
图2为本发明一种实施例中getTimeByFowardTasks函数流程图。
图3为本发明一种实施例中getTimeByParentFowardTasks函数流程图。
图4为本发明一种实施例中calculateLastTime函数流程图。
图5为本发明一种实施例中getTimeBySubsequenceTasks函数流程图。
图6为本发明一种实施例中getTimeByParentSubsequenceTasks函数流程图。
具体实施方式
实施例数据结构表说明:
Figure BDA0000461220370000091
实施例
所述正向计算包括四个算法:正向计算算法、calculateTask函数、getTimeByFowardTasks函数和getTimeByParentFowardTasks函数。
正向计算算法用于根据项目中任务之间的依赖关系,由前向后正推,计算项目各个任务的最早开始时间和最早完成时间。
输入:项目的唯一标识projectid,项目的日历标识calendarid,nodeMap。
输出:计算后的项目任务对象的集合,它包括所有任务的最早开始时间、最早完成时间。
过程描述:
(1)通过项目的唯一标识,提取和收集数据,得到集合fRMap、childMap、parentMap、dataMap。
(2)遍历该项目所包含的所有任务。
(3)若nodeMap中不包含遍历的当前任务,执行函数calculateTask(nodeMap,fRMap,childMap,parentMap,dataMap,iid,calendarid),其中iid是指当前任务的唯一标识,其余参数含义参见数据结构表;否则,不做操作,继续下一个遍历。
(4)遍历过项目所有任务,结束遍历。返回计算结果。
calculateTask函数
函数名称:calculateTask(Map nodeMap,Map fRMap,MapchildMap,Map parentMap,Map dataMap,String dataId,Stringcalendarid)。
描述:本方法用于计算指定任务的最早开始、完成时间。
输入:即102的数据,其中nodeMap、fRMap、childMap、parentMap、dataMap含义参见数据结构表,dataId为指定任务的唯一标识,calendarid为项目的日历标识。
输出:指定的简单任务对象,它包括该任务的最早开始时间和最早完成时间。
函数过程描述:如图1所示。
(1)该组件由101开始,接受102的数据输入,进入判断块103,103作出判断,如果nodeMap包含dataId,进入块119,结束该过程;否则,继续执行(2)。
(2)进入判断块104,104作出判断,若指定任务是作业任务,继续执行步骤(3);否则,如果指定任务是摘要任务,转向步骤(9)。
(3)进入105块,执行函数getTimeByFowardTasks(nodeMap,fRMap,childMap,parentMap,dataMap,dataId,calendarid),根据当前任务的前置任务计算它的最早开始时间,返回候选最早开始时间s1。
(4)进入计算候选开始时间循环,此循环是根据当前任务的父任务和祖先任务的前置任务计算得到当前任务最早开始时间的结果集R,取其中的最大值,赋给s2,即MAX(R)→s2,s2即为候选的最早开始时间。块106是循环的开始,块110是循环的结束,循环终止的条件是遍历当前任务的父或祖先完毕。107块为获取当前任务的下一个父或祖先,108块以它的父或祖先唯一标识为输入参数执行函数getTimeByParentFowardTasks(nodeMap,fRMap,childMap,parentMap,dataMap,piid,dataId,calendarid),piid为它的父任务或祖先任务的唯一标识,获得返回值temp。块109用s2记录最大的最早开始时间。
(5)块111从候选的最早开始时间s1、s2中取较大的一个最为最早开始时间s,若s大于系统最小值MIN,则取s作为该任务的最早开始时间,否则,取该任务的计划开始时间作为它的最早开始时间。
(6)块112依据日历,以工期不变的原则,用最早开始时间计算最早完成时间。
(7)块112根据限制类型和限制日期对计算所得的最早开始时间、最早完成时间进行调整。
(8)块112用计算所得值更新其对应的任务对象,并将当前任务唯一标识dataId和该标识对应的任务对象作为名值对存入nodeMap。
(9)对于摘要任务而言,块113以dataId为键值在childMap检索其子任务唯一标识的集合childList。
(10)进入“计算最早开始时间和最早完成时间”循环,块114是循环的开始,块117是循环的结束,在该循环中,遍历childList集合,对于集合中的每一个值childIid,调用块115,执行函数calculateTask(nodeMap,fRMap,childMap,parentMap,dataMap,childIid,calendarid),计算其子任务的最早开始时间、最早完成时间,然后块116记录最小的最早开始时间,赋给s,即为该任务的最早开始时间,计算最大的最早完成时间,赋给f,即为该任务的最早完成时间。
(11)块118通过日历计算工期,用计算所得值更新其对应的任务对象,并将当前任务唯一标识dataId和该标识对应的任务对象作为名值对存入nodeMap。
(12)块119结束该过程。
getTimeByFowardTasks函数描述
函数名称:getTimeByFowardTasks(Map nodeMap,Map fRMap,Map childMap,Map parentMap,Map dataMap,String dataId,Stringcalendarid)。
getTimeByFowardTasks函数用于根据指定任务的前置任务计算得出该任务的候选最早开始时间。
输入:块202的数据,nodeMap、fRMap、childMap、parentMap、dataMap含义参见数据结构表,指定任务的唯一标识dataId,项目的日历标识calendarid。
输出:根据指定任务的前置任务计算得出的该任务的候选最早开始时间。
函数描述:如图2所示。
(1)由201开始,接受块202的输入,块203申请局部变量startTime,用系统的最小值MIN去初始化它。
(2)块204以dataId为键值对fRMap进行检索,得到该任务对应的前置任务的集合S。
(3)遍历集合S,判断块205作出判断,若集合S中还有元素未被遍历到,继续执行(4);否则,转到(7)。
(4)块206取出其前置任务唯一标识fiid,执行函数calculateTask(nodeMap,fRMap,childMap,parentMap,dataMap,fiid,calendarid),计算当前任务的前置任务的最早开始时间和最早完成时间。
(5)块207根据前置任务的最早开始、完成时间和相应的逻辑关系类型计算当前任务的最早开始时间,所得值记为time。
(6)块208做处理,如果time>startTime,startTime=time,转到(3)。
(7)结束遍历。
(8)块209返回startTime。
(9)块210结束该过程。
getTimeByParentFowardTasks函数描述
函数名称:getTimeByParentFowardTasks(Map nodeMap,MapfRMap,Map childMap,Map parentMap,Map dataMap,String piid,StringdataId,String calendarid)。
getTimeByParentFowardTasks函数用于根据当前任务的指定父或祖先的前置任务计算得出该任务的候选最早开始时间。
输入:块302数据,nodeMap、fRMap、childMap、parentMap、dataMap含义参见数据结构表,指定任务的父任务或祖先任务的唯一标识piid,指定任务的唯一标识dataId,项目的日历标识calendarid。
输出:根据当前任务的父或祖先的前置任务计算得出该任务的候选最早开始时间。
函数描述:如图3所示。
(1)块303接受数据输入,申请局部变量startTime,用系统的最小值MIN去初始化它。
(2)块304以piid为键值对fRMap进行检索,得到父任务或祖先任务对应的前置任务集合S。
(3)遍历集合S,判断块305作出判断,若集合S中还有元素未被遍历到,继续执行(4);否则,转到(7)。
(4)块306取出其前置任务唯一标识fiid,执行函数calculateTask(nodeMap,fRMap,childMap,parentMap,dataMap,fiid,calendarid),计算当前任务的父或祖先的前置任务的最早开始时间和最早完成时间。
(5)块307根据父或祖先的前置任务的最早开始、完成时间和相应的逻辑关系类型计算当前任务的最早开始时间,所得值记为time。
(6)块308做处理,如果time>startTime,startTime=time,转到(3)。
(7)结束遍历。
(8)块309返回startTime。
(9)块310结束该过程。
反向计算包括反向计算算法、calculateLastTime函数、getTimeBySubsequenceTasks函数、getTimeByParentSubsequenceTasks函数。
反向计算算法用于根据项目中任务之间的依赖关系,由后向前逆推,计算项目各个任务的最晚开始时间和最晚完成时间。
输入:项目的唯一标识projectid,项目的日历标识calendarid,lastMap。
输出:计算后的项目任务对象的集合,它包括所有任务的最晚开始时间、最晚完成时间。
过程描述:
(1)通过项目的唯一标识,提取和收集数据,得到集合sRMap、childMap、parentMap、dataMap。
(2)获得项目的完成时间,即正向计算算法中计算得出的所有任务中最早完成时间的最大值,记为maxTime。
(3)寻找最早完成时间等于maxTime的作业任务,并用其最早开始时间初始化其最晚开始时间,用最早完成时间初始化其最晚完成时间,将此计划对象放入lastMap。
(4)遍历该项目所包含的所有任务。
(5)若lastMap中不包含遍历的当前任务,执行函数calculateLastTime(lastMap,sRMap,childMap,parentMap,dataMap,iid,maxTime,calendarid),其中iid是指当前任务的唯一标识,maxTime为项目结束时间,calendarid为项目日历id;否则,不做操作,继续下一个遍历。
(6)遍历过项目所有任务,结束遍历。
(7)返回计算结果。
calculateLastTime函数描述
函数名称:calculateLastTime(Map lastMap,Map sRMap,MapchildMap,Map parentMap,Map dataMap,String dataId,longmaxTime,String calendarid)。
calculateLastTime函数用于计算指定任务的最晚开始时间和最晚完成时间。
输入:即402的数据,其中nodeMap、fRMap、childMap、parentMap、dataMap参见数据结构表,dataId为指定任务的唯一标识,calendarid为项目的日历标识,maxTime为项目的结束时间。
输出:指定的任务数据对象,它包括该任务的最晚开始时间和最晚完成时间。
过程描述:如图4所示。
(1)该组件由401开始,接受402的数据输入,进入判断块403,403作出判断,如果lastMap包含dataId,进入块419,结束该过程;否则,继续执行(2)。
(2)进入判断块404,404作出判断,若任务是作业任务,继续执行步骤(3);否则,如果指定任务是摘要任务,转向步骤(9)。
(3)进入505块,执行函数getTimeBySubsequenceTasks(lastMap,sRMap,childMap,parentMap,dataMap,dataId,maxTime,calendarid),根据当前任务的后置任务计算它的候选最晚开始时间s1,该函数在下边给出。
(4)进入计算候选最晚开始时间循环,此循环是根据当前任务的父任务和祖先任务的后置任务计算得到当前任务最晚开始时间的结果集R,取其中的最小值,赋给s2,即MIN(R)→s2,s2即为候选的最晚开始时间。块406是循环的开始,块410是循环的结束,循环终止的条件是遍历当前任务的父或祖先完毕。407块为获取当前任务的下一个父或祖先,408块以它的父或祖先唯一标识为输入参数执行函数getTimeByParentSubsequenceTasks(lastMap,sRMap,childMap,parentMap,dataMap,piid,dataId,maxTime,calendarid),piid为它的父任务或祖先任务的唯一标识,dataId为当前任务iid,获得返回值temp,该函数在下边给出。块409用s2记录最大的最早开始时间。
(5)块411从候选的最早开始时间s1、s2中取较小的一个最为最晚开始时间s,若s小于系统最大值MAX,则取s作为该任务的最晚开始时间,否则,取该项目的结束时间作为它的最晚完成时间。
(6)块412依据日历,以工期不变的原则,计算最晚开始时间或最晚完成时间。
(7)块412根据限制类型和限制日期对计算所得的最晚开始时间、最晚完成时间进行调整。
(8)块412用计算所得值更新其对应的任务对象,并将当前任务唯一标识dataId和该标识对应的任务对象作为名值对存入lastMap。
(9)对于摘要任务而言,块413以dataId为键值在childMap检索其子任务唯一标识的集合childList。
(10)进入“计算最晚开始时间和最晚完成时间”循环,块414是循环的开始,块417是循环的结束,在该循环中,遍历childList集合,对于集合中的每一个值childIid,调用块415,执行函数calculateLastTime(lastMap,sRMap,childMap,parentMap,dataMap,childIid,maxTime,calendarid),计算其子任务的最晚开始时间、最晚完成时间,然后块416记录最小的最晚开始时间,赋给s,即为该任务的最晚开始时间,计算最大的最晚完成时间,赋给f,即为该任务的最晚完成时间。
(11)块418通过日历计算工期,用计算所得值更新其对应的任务对象,并将当前任务唯一标识dataId和该标识对应的任务对象作为名值对存入lastMap。
(12)块419结束该过程。
getTimeBySubsequenceTasks函数描述
函数名称:getTimeBySubsequenceTasks(Map lastMap,MapsRMap,Map childMap,Map parentMap,Map dataMap,StringdataId,long maxTime,String calendarid)。
getTimeBySubsequenceTasks函数用于根据指定任务的后置任务计算得出该任务的候选最晚开始时间。
输入:块502的数据,lastMap、sRMap、childMap、parentMap、dataMap含义参见数据结构表,指定任务的唯一标识dataId,项目结束时间maxTime,项目的日历标识calendarid。
输出:根据指定任务的后置任务计算得出的该任务的候选最晚开始时间。
算法描述:如图5所示。
(1)由501开始,接受块502的输入,块503申请局部变量startTime,用系统的最大值MAX去初始化它。
(2)504以dataId为键值对sRMap进行检索,得到该任务对应的后置任务的集合S。
(3)遍历集合S,判断块505作出判断,若集合S中还有元素未被遍历到,继续执行(4);否则,转到(9)。
(4)块506取出其后置任务唯一标识siid,若lastMap包含siid,转到(5);否则,执行函数calculateLastTime(nodeMap,sRMap,childMap,parentMap,dataMap,siid,maxTime,calendarid),计算当前任务的后置任务的最晚开始时间和最晚完成时间。
(5)块507根据后置任务的最晚开始、完成时间和相应的逻辑关系类型计算当前任务的最晚开始时间,所得值记为time,然后根据工期不变计算其最晚完成时间,即为lastTime。
(6)块508判断,若lastTime>maxTime,转到(7);否则转到(8)。
(7)块509用maxTime作为当前任务的最晚完成时间,工期不变计算其最晚开始时间time,转到(8)。
(8)块510做处理,如果time<startTime,startTime=time,否则startTime不做改变;转到(3)。
(9)结束遍历。
(10)块511返回startTime。
(11)块512结束该过程。
getTimeByParentSubsequenceTasks函数描述
函数名称:getTimeByParentSubsequenceTasks(Map lastMap,MapsRMap,Map childMap,Map parentMap,Map dataMap,String piid,StringdataId,long maxTime,String calendarid)。
getTimeByParentSubsequenceTasks函数用于根据指定任务的父或祖先的后置任务计算得出的该任务的候选最晚开始时间。
输入:块602数据,lastMap、sRMap、childMap、parentMap、dataMap,它们的含义参见数据结构表,指定任务的父任务或祖先任务的唯一标识piid,指定任务的唯一标识dataId,项目的结束日期maxTime,项目的日历标识calendarid。
输出:根据指定任务的父或祖先的后置任务计算得出该任务的候选最晚开始时间。
算法描述:如图6所示。
(1)由601开始,接受块602的输入,块603申请局部变量startTime,用系统的最大值MAX去初始化它。
(2)604以piid为键值对sRMap进行检索,得到当前任务的父或祖先任务的后置任务的集合S。
(3)遍历集合S,判断块605作出判断,若集合S中还有元素未被遍历到,继续执行(4);否则,转到(9)。
(4)块606取出其后置任务唯一标识siid,若lastMap包含siid,转到(5);否则,执行函数calculateLastTime(lastMap,sRMap,childMap,parentMap,dataMap,siid,maxTime,calendarid),计算当前任务的父或祖先前置任务的最晚开始时间和最晚完成时间。
(5)块607根据后置任务的最晚开始、完成时间和相应的逻辑关系类型计算当前任务的最晚开始时间,所得值记为time,然后根据工期不变计算其最晚完成时间,即为lastTime。
(6)块608判断,若lastTime>maxTime,转到(7),否则转到(8)。
(7)块609用maxTime作为当前任务的最晚完成时间,工期不变计算其最晚开始时间time转到(8)。
(8)块610做处理,如果time<startTime,startTime=time,否则,startTime不做改变,转到(3)。
(9)结束遍历。
(10)块611返回startTime。
(11)块612结束该过程。
最终计算包括最终计算算法和calculateExpectTask函数算法。
最终计算算法用于根据项目中任务之间的依赖关系,由前向后正推,利用正向计算和反向计算的结果计算项目各个任务的最终的开始时间和完成时间。
输入:项目的唯一标识projectid,项目的日历标识calendarid,computeMap。
输出:计算后的项目任务对象的集合,它包括所有任务的开始时间、完成时间。
过程描述:
(1)通过项目的唯一标识,提取和收集数据,得到集合fRMap、childMap、parentMap、dataMap。
(2)遍历该项目所包含的所有任务。
(3)若computeMap中不包含遍历的当前任务,执行函数calculateExpectTask(computeMap,fRMap,childMap,parentMap,dataMap,iid,calendarid),其中iid是指当前任务的唯一标识,calendarid为项目日历id;否则,不做操作,继续下一个遍历。
(4)遍历过项目所有任务,结束遍历。
(5)返回计算结果。
calculateExpectTask函数描述
函数名称:calculateExpectTask(Map computeMap,Map fRMap,Map childMap,Map parentMap,Map dataMap,String dataId,Stringcalendarid)。
calculateExpectTask函数用于计算指定任务的开始时间、完成时间。
输入:computeMap、fRMap、childMap、parentMap、dataMap含义参见数据结构表,dataId为指定任务的唯一标识,calendarid为项目的日历标识。
输出:指定的任务数据对象,它包括该任务的开始时间和完成时间。
过程描述:
其算法描述过程与正向计算算法描述节的calculateTask函数基本一致,只存在几点差异:
(1)输入的nodeMap变为computeMap。
(2)参与计算和最后更新的属性为开始时间、完成时间。
(3)calculateExpectTask对calculateTask函数步骤(7)做了修改,即对根据限制类型和限制日期调整任务开始时间、完成时间的逻辑做了些修改。
关键路径算法包括关键路径算法。
关键路径算法用于根据项目中任务的最早开始、完成时间,最晚开始、完成时间,开始、完成时间来确定关键任务。
输入:项目所有简单任务对象集合dataMap。
输出:作了是否关键任务标记的简单任务对象集合。
过程描述:
(1)遍历指定项目简单任务对象集合dataMap。
(2)获得简单对象task,若task为作业任务,并且其最晚开始时间小于或等于开始时间,将它标记为关键任务;否则,将它标记为非关键任务。
(3)结束遍历
(4)返回做了标记的简单任务对象集合。

Claims (5)

1.一种基于多级网络计划的进度计算方法,其特征在于:
所述进度计算通常包含4个步骤,分别是:正向计算、反向计算、最终计算和计算关键路径;
(1)、正向计算
最早开始时间和最早完成时间是通过一个正向计算得出的;
(2)、反向计算
最晚开始时间、最晚完成时间是通过一个反向计算得出的;
(3)、最终计算
开始时间和完成时间是通过最终计算过程计算得出的;
(4)、计算关键路径
在(1)、(2)、(3)三个步骤中,计算得到了每个任务最早开始、完成时间,最晚开始、完成时间,开始、完成时间,根据关键任务的定义计算得出关键任务,关键任务组成的路径即为关键路径。
2.根据权利要求1所述的基于多级网络计划的算法实现,其特征在于:所述正向计算包括正向计算算法、calculateTask函数、getTimeByFowardTasks函数和getTimeByParentFowardTasks函数;
正向计算算法用于根据项目中任务之间的依赖关系,由前向后正推,计算项目各个任务的最早开始时间和最早完成时间;
calculateTask函数用于计算指定任务的最早开始时间;
getTimeByFowardTasks函数用于根据指定任务的前置任务计算得出该任务的候选最早开始时间;
getTimeByParentFowardTasks函数用于据指定任务的父任务或祖先任务的前置任务计算得出的该任务的候选最早开始时间。
3.根据权利要求1所述的基于多级网络计划的算法实现,其特征在于:所述反向计算包括反向计算算法、calculateLastTime函数、getTimeBySubsequenceTasks函数、getTimeByParentSubsequenceTasks函数;
反向计算算法用于根据项目中任务之间的依赖关系,由后向前逆推,计算项目各个任务的最晚开始时间和最晚完成时间;
calculateLastTime函数用于计算指定任务的最晚开始时间和最晚完成时间;
getTimeBySubsequenceTasks函数用于根据指定任务的后置任务计算得出该任务的候选最晚开始时间;
getTimeByParentSubsequenceTasks函数用于根据指定任务的父或祖先的后置任务计算得出的该任务的候选最晚开始时间。
4.根据权利要求1所述的基于多级网络计划的算法实现,其特征在于:所述最终计算包括最终计算算法和calculateExpectTask函数,
最终计算算法用于根据项目中任务之间的依赖关系,由前向后正推,利用正向计算和反向计算的结果计算项目各个任务的最终的开始时间和完成时间;
calculateExpectTask函数用于计算指定任务的开始时间、完成时间。
5.根据权利要求1所述的基于多级网络计划的算法实现,其特征在于:所述关键路径包括关键路径算法,关键路径算法用于根据项目中任务的最早开始、完成时间,最晚开始、完成时间,开始、完成时间来确定关键任务。
CN201410032701.3A 2014-01-24 2014-01-24 基于多级网络计划的进度计算方法及其算法实现 Active CN103729748B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410032701.3A CN103729748B (zh) 2014-01-24 2014-01-24 基于多级网络计划的进度计算方法及其算法实现

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410032701.3A CN103729748B (zh) 2014-01-24 2014-01-24 基于多级网络计划的进度计算方法及其算法实现

Publications (2)

Publication Number Publication Date
CN103729748A true CN103729748A (zh) 2014-04-16
CN103729748B CN103729748B (zh) 2017-03-29

Family

ID=50453810

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410032701.3A Active CN103729748B (zh) 2014-01-24 2014-01-24 基于多级网络计划的进度计算方法及其算法实现

Country Status (1)

Country Link
CN (1) CN103729748B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105677765A (zh) * 2015-07-28 2016-06-15 Tcl集团股份有限公司 给用户推荐期望的功能序列的方法及系统
CN106021296A (zh) * 2016-05-04 2016-10-12 中国银行股份有限公司 核心银行系统批量作业路径的检测方法及装置
CN107661112A (zh) * 2016-07-27 2018-02-06 上海联影医疗科技有限公司 Ct系统的扫查准备时间计算方法及扫查准备进程显示方法
CN109345135A (zh) * 2018-10-22 2019-02-15 华北电力大学 流水施工进度控制中确定关键工序的方法
CN110084482A (zh) * 2019-03-29 2019-08-02 江苏乐建网络科技有限公司 一种基于施工计划的关键工序推荐方法、设备及介质
CN110232465A (zh) * 2019-03-28 2019-09-13 济南森坤企业管理咨询有限公司 一种统筹法各类项目组织多级计划逐级资源均衡优化方法
CN110717613A (zh) * 2019-04-04 2020-01-21 济南森坤企业管理咨询有限公司 一种统筹法多级组织计划资源有限优化方案比较方法
CN111950924A (zh) * 2020-08-21 2020-11-17 成都希盟泰克科技发展有限公司 一种基于智能算法的核电厂进度计算方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5890134A (en) * 1996-02-16 1999-03-30 Mcdonnell Douglas Corporation Scheduling optimizer
US6115642A (en) * 1996-12-31 2000-09-05 Buildnet, Inc. Systems and methods for facilitating the exchange of information between separate business entities
CN102945516A (zh) * 2012-10-19 2013-02-27 北京神舟航天软件技术有限公司 多级网络计划的进度分析方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5890134A (en) * 1996-02-16 1999-03-30 Mcdonnell Douglas Corporation Scheduling optimizer
US6115642A (en) * 1996-12-31 2000-09-05 Buildnet, Inc. Systems and methods for facilitating the exchange of information between separate business entities
CN102945516A (zh) * 2012-10-19 2013-02-27 北京神舟航天软件技术有限公司 多级网络计划的进度分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
朱群雄 等: "基于约束的CPM动态优化算法", 《 控制与决策》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105677765A (zh) * 2015-07-28 2016-06-15 Tcl集团股份有限公司 给用户推荐期望的功能序列的方法及系统
CN105677765B (zh) * 2015-07-28 2019-10-11 Tcl集团股份有限公司 给用户推荐期望的功能序列的方法及系统
CN106021296A (zh) * 2016-05-04 2016-10-12 中国银行股份有限公司 核心银行系统批量作业路径的检测方法及装置
CN107661112A (zh) * 2016-07-27 2018-02-06 上海联影医疗科技有限公司 Ct系统的扫查准备时间计算方法及扫查准备进程显示方法
CN109345135A (zh) * 2018-10-22 2019-02-15 华北电力大学 流水施工进度控制中确定关键工序的方法
CN109345135B (zh) * 2018-10-22 2022-08-05 华北电力大学 流水施工进度控制中确定关键工序的方法
CN110232465A (zh) * 2019-03-28 2019-09-13 济南森坤企业管理咨询有限公司 一种统筹法各类项目组织多级计划逐级资源均衡优化方法
CN110084482A (zh) * 2019-03-29 2019-08-02 江苏乐建网络科技有限公司 一种基于施工计划的关键工序推荐方法、设备及介质
CN110717613A (zh) * 2019-04-04 2020-01-21 济南森坤企业管理咨询有限公司 一种统筹法多级组织计划资源有限优化方案比较方法
CN111950924A (zh) * 2020-08-21 2020-11-17 成都希盟泰克科技发展有限公司 一种基于智能算法的核电厂进度计算方法
CN111950924B (zh) * 2020-08-21 2023-06-02 成都希盟泰克科技发展有限公司 一种基于智能算法的核电厂进度计算方法

Also Published As

Publication number Publication date
CN103729748B (zh) 2017-03-29

Similar Documents

Publication Publication Date Title
CN103729748A (zh) 基于多级网络计划的进度计算方法及其算法实现
CN102945516B (zh) 多级网络计划的进度分析方法
CN105069524B (zh) 基于大数据分析的计划调度优化方法
CN104346143B (zh) 一种由ebom到mbom的数据转换方法
CN103995882A (zh) 基于MapReduce的概率频繁项集挖掘方法
CN103488537A (zh) 一种数据抽取、转换和加载etl的执行方法及装置
Liao et al. Long-term generation scheduling of hydropower system using multi-core parallelization of particle swarm optimization
CN107909344A (zh) 基于关系矩阵的工作流日志重复任务识别方法
CN105205052A (zh) 一种数据挖掘方法及装置
Chen Integrated optimization model for production planning and scheduling with logistics constraints
CN106934539A (zh) 一种带有期限和费用约束的工作流调度方法
CN114416325B (zh) 基于智能分析的批量任务计算系统
CN105139161A (zh) 一种基于Petri网的虚拟企业建模与调度方法
CN109857937A (zh) 一种基于Sine映射和分段式并行连续禁忌搜索数据处理方法
CN103810304A (zh) 一种基于规则的不锈钢合同组批方法和系统
Melnikov et al. Parallel algorithm for solving large-scale dynamic general equilibrium models
Ongpeng et al. Sustainable project schedule management using pinch analysis
Haroun et al. Scheduling problem under constrained resources: a historical review of solution methods and computer application
CN111311037A (zh) 一种对自定义施工计划编制、进度汇总与数据分析的方法
Azimi et al. FUZZY MULTI OBJECTIVE PROJECT SCHEDULING UNDER INFLATIONARY CONDITIONS.
CN106503944A (zh) 基于规则的船体分段物流调度方法
CN111915067B (zh) 一种基于可拓网络计划模型的工期计算及优化方法
Aggarwal Exploring the possibility of using a gpu while implementing pipelining to reduce the processing time in the etl process
Groppen Experimental verification of efficiency of some composite algorithms
Shan et al. A case study of whale optimization algorithm for scheduling in C2M model

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information

Inventor after: Dan Chengfang

Inventor after: Wang Zhiqing

Inventor after: Li Lin

Inventor after: Yang Ge

Inventor before: Wang Xuemin

Inventor before: Dan Chengfang

Inventor before: Li Lin

Inventor before: Yang Ge

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100094 No. 28, Yongfeng Road, Beijing, Haidian District

Patentee after: Beijing Shenzhou Aerospace Software Technology Co.,Ltd.

Address before: 100094 No. 28, Yongfeng Road, Beijing, Haidian District

Patentee before: BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co.,Ltd.