具体实施方式
图1示出了用来实现这里所公开的系统和方法的示例性系统。该系统包括传统计算环境20形式的通用计算设备(如个人计算机),包括处理单元22、系统存储器24、和用来连接不同系统组件的系统总线26,包括把系统存储器24连接至处理单元22。处理单元22通过存取系统存储器24可执行算数、逻辑和/或控制操作。系统存储器24可存储信息和指令,用于与处理单元22相结合使用。系统存储器24可包括易失性和非易失性存储器,如随机存取存储器(RAM)28和只读存储器(ROM)30。用来帮助个人计算机20内的元件之间传送信息的、包含有基本例程的基本输入/输出系统(BIOS)可存储在ROM 30中。系统总线26可以是几种总线结构中的任何一种,包括使用任何总线体系结构的存储器总线或存储器控制器、外围总线和局部总线。
个人计算机20还可包括硬盘驱动器和外部盘驱动器34,用于从可移动盘36读取或向其写入。可移动盘可以是用于磁盘驱动器的磁盘或用于光盘驱动器的光盘,如CD ROM。硬盘驱动器32和外部盘驱动器通过硬盘驱动器接口38和外部盘驱动器接口40分别连接到系统总线26。这些驱动器及其相关联的计算机可读介质提供了计算机可读指令、数据结构、程序模块和用于个人计算机20的其他数据的非易失性存储。数据结构可包括该资源分配方法实现的相关数据,如下面将详细说明的。相关的数据可组织到数据库中,例如关系数据库或对象数据库。
尽管这里所描述的示例性实施例采用了硬盘和外部盘36,本领域的技术人员应该理解,可由计算机存取的其他类型的可存储数据的计算机可读介质,如磁带、闪存卡、数字视频盘、随机存取存储器、只读存储器等,也可用在该示例性环境中。
多个程序模块可以储存在硬盘、可移动盘36、只读存储器(ROM)30或随机存储器(RAM)28,包括操作系统、一个或多个应用程序44、其它程序模块和程序时间46。应用程序可包括至少如图2、3所示功能的一部分。
用户可以照如下所述的那样,通过输入设备,如键盘48和鼠标50向个人计算机20输入命令或信息。其它输入设备可包括麦克风(或其它传感器)、游戏手柄、游戏面板、扫描仪等。这些或其它输入设备可通过连接于系统总线26的串行端口接口52连接至处理单元22,或通过其它接口连接,如并行端口接口54、游戏端口或通用串行总线(USB)。另外,信息可通过打印机56打印出来。打印机56和其它并行输入/输出装置可通过并行端口接口54连接至处理单元22。显示器58或其它显示装置同样可以通过接口,如视频输入/输出60,连接到系统总线26。除显示器之外,计算环境20可包括其它外围输出装置,如音箱或其它音频输出。
计算环境20可与其他电子装置,如计算机、电话(有线或无线)、个人数字助理、电视机等进行通信。为了通信,计算环境20可通过连接至一个或多个电子装置的方式在网络环境中运行。图1示出了计算环境与远程计算机62联网。远程计算机62可以是其它计算环境,如服务器、路由器、网络PC、对等装置(peer device)或其它普通网络节点,并且该计算环境可以包括许多或所有上述关于计算环境20的要素。图1示出的逻辑连接包括了局域网(LAN)64和广域网(WAN)66。这些网络环境在办公室、企业范围的计算机网络、内联网和因特网中十分普遍。
在LAN网络环境中使用时,计算环境20可通过网络输入/输出68连接到LAN 64。在WAN网络环境中使用时,计算环境20可包括调制解调器70或其它在WAN 66中建立通讯的方式。调制解调器70即可内置于计算环境20,又可外置于计算环境20,它通过串行端口接口52连接到系统总线26。在网络环境中,与计算环境20,或其部分的相关描述的程序模块可储存在远程存储装置内,该远程存储装置位于远程计算机62上,或可接入远程计算机62。上述网络连接方式仅为示例,其他在电子装置间建立通信链路的方式用样可以使用。
上述计算系统仅为可以用来实现将多个工序分配到多个资源的方法的计算系统的一个示例。
图2为示出将多个工序分配至多个资源的方法的流程图。在第一步ST1,从数据库、用户界面等接收工序规范(process specification)。例如,工序规范定义至少一个工序,在另外的示例中,可定义多个工序,如即将在汽车制造厂的生产车间内进行的生产工序。例如,其中至少一些工序可以是特定车辆或其部分的生产工序。另外或除此之外,至少其中一些工序可代表车辆或其部分的服务和/或修理要求。至少其中一些工序可以是流水线上进行的标准生产工序。其它工序可代表客户订单、构件配送中的备件配送。
每个工序包括至少一项任务,其中每项任务都属于某任务类别。例如,至少某些工序包含有多项任务。例如,生产汽车挡泥板的工序包括多项任务,如切割和/或冲压金属;将金属弯曲/折叠成特定形状;打孔或钻孔以便线缆从中通过,或在挡泥板上固定其它部件;焊接;喷漆等等。每项任务都属于某任务类别,如钻孔、打磨、弯曲、焊接、将金属切割到预设厚度、切割金属厚度超过预设厚度、打孔、清理、喷漆、粘连、组装、模拟、冲撞测试、风洞测试等等。例如,至少这些任务中的一些,至少要部分由机器来完成,特别是由机器人和/或计算机来完成。其它任务可由工人来完成,如操作各种机器,包括电钻、抛光机、计算机等等。每个单独的机器、机器人、计算机、工作场所等都代表了用来执行至少一个任务类别的资源。
每个资源都有用来执行至少一个类别中的任务的资源容量(resource capacity)。资源容量可定义成该资源在单位时间内执行的最大任务量,如每分钟钻孔的数量、每小时焊接缝隙的长度,或每小时喷漆的平方米数等等。至少某些资源可以有标准的使用时间,如每天12或24小时、每星期特定天数、或每小时60分钟等。示例地,至少一些资源还另外具有非调度时间预留参数(non-scheduled timereserve parameter),该参数例如由标准使用时间的百分数,如20%来定义。为某资源定义的非调度时间预留可用来为资源的保养和检修和/或为执行附加非调度任务来预留时间。示例地,某资源的标准使用时间和非调度时间预留参数至少部分储存在数据库中和/或由用户输入。储存的数据也可由用户来编辑。
例如,至少对于任务中的一些来说,从用户接收到的或从数据库检索的工序规范定义了处理时间,其中某项任务的处理时间例如定义为总时间,在该总时间中,相应的资源处于在用(in use)状态和/或被占用来执行该项任务。处理时间可定义在分配给该任务的容量要求参数中。在一示例中,用于一项或多项任务的处理时间存储在数据库中,和/或由用户输入。作为替换或附加,可至少对某些任务定义任务量参数(task volume parameter),其中任务量参数定义了任务的量,如要钻多少孔、喷漆的面积多大等等。例如,某项工作的处理时间由该任务量参数确定,其中,例如,考虑特定资源的资源容量和/或使用标准资源容量值来分别确定处理时间和/或标准处理时间。
对于至少一些任务可定义时帧参数。至少一些任务没有通过处理时间来充分定义,但是它们可能需要附加时间来执行。例如,喷漆除了需要喷漆工序外,还需要油漆干燥的时间。特别,当喷漆任务需要多层漆时,每层油漆会要求相当量的干燥时间,其中喷漆资源并没有直接用到该喷漆任务中,并且可能用于属于不同工序的不同任务。相应地,至少一些任务具有分配至该任务的时帧参数,其中时帧参数(timeframe parameter)定义了完成该任务所需的最少时间,包括了例如处理时间和额外需要的闲置时间。相应地,至少对某些任务,可定义两个时间参数,即处理时间和时帧参数。
例如,时帧参数定义了该时帧参数所包含的总时间的分割,即时帧参数例如定义了多个时间段或时间间隔或时隙。例如,时帧参数可以定义三小时,其中每小时都被认为是单独的时帧间隔(时隙),尽管这三小时可直接连续调度。就其它任务而言,可定义时帧间隔(时隙)如分钟、天,或星期等。在另一例中,任意时间段可被定义为时帧间隔(时隙)。在一例中,相同时帧间隔用在所有工序的所有任务中。时帧参数可定义成应该对相应任务的总处理时间分配的时帧间隔的最小数量。例如,当执行任务时,处理时间备分布在各时帧间隔中,或者可超出时帧间隔。例如,确定待分配到单独时帧间隔(时隙)的最小和最大的处理时间。在一例中,所述最小和最大值可分别通过计算处理时间和时帧间隔数的比率来确定,即通过确定每时帧间隔的处理时间的平均值,并且加上或减去其相应的比率。相应地,分配至单独时帧间隔的最小处理时间可设置成平均值的50%,而最大值可设置成平均值的150%。这可以使资源在时帧间隔中完成多项任务。
例如,在工序中,至少一些任务互相依赖,即技术上会要求一项任务在其他任务之前执行。例如,焊接要在喷漆之前执行。例如,工序规范根据任务定义了工序的组合。在另外的例子,工序规范定义了任务之间的依赖性,例如,它对每个任务定义了在执行该任务之前要执行的其他任务。例如,这种依赖性说明在依赖参数(dependencyparameter)中定义,而依赖参数被分配到至少某些任务,在另一例子中,依赖参数被分配到每项任务中。
例如,至少一些任务相对其他任务要在不同的地点执行。例如,模拟需要在远程计算机系统中执行,而喷漆则要在远离焊接机器人的喷漆车间内执行。相应地,要对资源进行分布。例如,资源通过图1示的网络相互联接,和/或与资源控制单元连接。
例如,资源控制单元在步骤ST1接收工序规范。在一个例子中,工序规范与至少一些工序相关,或者包含至少一些工序。在另一例子中,对于每一工序来说,工序标识参数(工序ID)被存储与数据库100,工序的详细定义与说明可通过工序标识参数来识别。工序规范可进一步包括每一工序的权重参数。例如,数据库100存储有每个工序的估价参数(assessment parameter),估价参数可在步骤ST2中从数据库100检索。作为替换,对至少部分工序的估算参数可根据用户及工序标识参数(工序ID)接收到。例如估价参数定义了所分配工序关于所需处理时间和/或所需容量和/或资源能力相关的有效程度。例如,相应地,估价参数代表了工序执行期间资源有效利用的衡量。作为替换或另外,可考虑其他标准赖评价工序和建立估价参数。在一例中,工序的估价参数基于分配到该工序的工序量参数和效率参数来确定。工序量参数(process volume parameter)可定义成在该工序中要处理的单元总量或产品零部件总量。效率参数可定义关于所需处理时间和/或所需容量和/或资源能力的效率值,如对于待处理单独单元或产品的单独零部件定义。
例如,工序在工序管理模块中管理。该管理模块可接收至少一个工序的工序规范,在另一包括有多个工序的例子中,管理模块从如数据库和/或工序规范接口接收至少一个工序的工序规范。
每个工序的工序规范可包括该工序所包含任务的清单和/或任务的详细定义,该工序的关键参数(criticality parameter)和/或执行该工序或至少部分任务的优选位置,其中优选的位置可由如任务位置参数(task location parameter)来定义。工序规范可进一步包含所要求的工序开始时间、所要求的工序结束时间和/或工序量参数。
在一例中,至少一个工序的工序规范可通过任务标识参数(任务ID)包括每项任务的唯一任务标识。根据任务标识参数识别的任务的详细定义或规范可从数据库检索。从数据库检索到的任务规范可包括容量需求参数(capacity requirement parameter),例如,该参数初始被设置为储存在数据库中的标准处理时间。例如,一项或多项任务的时帧参数被初始设置为储存在数据库中的标准时帧。一项或多项任务的任务规范可进一步定义任务位置和/或任务类别。
在一例中,工序规范和/或任务规范可对一个或多个工序和/或任务包括所述工序或任务对特定资源的强制资源分配。例如,强制资源分配定义了用来执行所述工序或任务的资源,其中强制资源例如在建立第一和/或一个或多个另外的资源-任务分配集合期间不改变。强制资源分配例如从用户接收和/或通过工序规范接口从数据库检索。
至少一个任务的任务规范可进一步包括依赖参数,该依赖参数定义相同工序中该至少一个任务所依赖的其他任务。例如,至少被一项任务所依赖的任务在以下被称作前驱(predecessors)或前驱任务。例如,可对至少一个任务分配捆绑参数(bundle parameter),在另外的例中,捆绑参数可分配到每项任务。例如,捆绑参数定义了特定工序中的一组任务,其中,具有相同捆绑参数的的任务属于相同任务组。例如,任务的分组对于分配到相同资源的任务来说特别有益处。
在一实施例中,具有相同捆绑参数的一组任务必须由相同资源执行。这确保了任务执行的连续性。例如,捆绑中的所有任务被分配到相同资源,这样资源可对后继任务(successor tasks)使用前驱任务的输出结果。类似地,如果没有依赖关联,捆绑的任务可共享用来执行的相同材料,因而将这些任务分配到相同的资源会有益处。
在步骤ST3中,对于每一工序来说,依据分配给相应工序的估价参数来确定权重参数102。例如,权重参数为内部参数(内部权重参数)。例如,内部参数用作内部处理,如工序排名。例如,内部参数对于用户不可见。在步骤ST3中的权重参数102对工序的初始分配中,例如,权重参数设置成与估价参数相同。相应地,在一例中,对于所有工序,在任何手工优先级调整之前,内部权重参数备初始设置为估价参数。例如,手工优先级调整是通过手工修改工序排名参数来完成的,如下所述。
例如,最初根据各自的估价参数对各工序进行排序,然后按工序量参数进行次排序,然后再按工序关键参数进行进一步次排序。步骤ST4中的后续排序按如权重参数102来执行,然后按工序量参数进行次排序,再按工序关键参数进行进一步的次排序。此外,工序的初始排序也可按权重参数102为基础,而不是按估价参数来进行。然而,由于权重参数102在上述例子中最初与估价参数相同,这样工序的排序是相同的。一旦内部权重参数被确定,工序的排序会依据内部权重参数,而非估价参数。
分配给工序的关键参数可作为工序规范的一部分来接收,或从数据库100检索。关键参数可由用户依照其喜好分配给工序。例如,各工序依其权重参数102(或估价参数)按降序排列,这意味着具有最大权重参数(或估价参数)的工序排在第一位,具有第二大权重参数(或估价参数)的工序排在第二位,依此类推。具有相同权重参数(或估价参数)的工序例如依照其工序量参数按降序排列。甚至再进一步,具有相同的权重参数(或估价参数)以及相同的工序量参数的工序例如依照其工序关键参数按升序排列。一旦工序排序完成后,例如为整数的排名参数(ranking parameter)被分配给各工序。
不同种类的工序可使用相同资源,但是它们对组织的益处可有不同衡量指标。例如,生产两种不同种类的产品,其生产或处理的优先级是按不同参数驱动的,该生产可由相同资源组来执行,如在同一工厂制造两款不同型号的汽车。两款不同的汽车在很大程度上至少在一些部件的生产上共享共同的生产线,因而共同的任务由相同的资源来执行。这里所公开的方法提供了以组合的方法解决评价两种不同工序组的优先级的问题。
在一实施例中,该方法至少区分两个不同组的工序,并且分别使用权重参数和量参数来确立不同两组的优先级,并且衡量两不同组的益处。其他类型的工序,例如对组织来说没有可以衡量的益处,则被认为是“其他”的工序组,并且用来衡量优化算法成功的指标即为控制其完成的时间,并防止任何延迟。
对于“量”类型的工序,作为“内部量参数”的参数可以用同样的方式或者可类比的方式作为内部权重参数,例如对于新工序来说,内部权重参数初始设置为量参数。如果某工序的排名被某工序超过,则可交换按一个名次被提升的工序和要被降级的工序的“内部量参数”。相应地,对于“量”类型的工序,可以理解内部量参数,并且类比地按权重参数来使用,即对于“量”类型的工序,权重参数可被内部量参数替换。
表1A-1I展示了工作分配处理的排序与排名步骤。表中的每一行(表的表头行除外)代表了由工序标识参数(工序ID)所识别的一个工序。进一步地,每个工序的工序量参数、估价参数、关键参数和内部权重参数102都在表中显示。另外,在步骤ST4中分配的每个工序的排名参数同样在表中表示出来。最后,在一例中工序状态参数被分配给每个工序。表1A表示了步骤ST4后的例子情况。工序(100、200、……1000)依据上述描述的例子排序标准进行排序,并且根据所得到到的顺序来排列,其中排名由排名参数(优先级排名参数)来定义,排名参数取整数值,从1到表示被排列工序总数的数量,在表1A的例中,被排列工序总数是10。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
100 |
1000 |
1000 |
25000 |
1 |
未调度 |
2 |
200 |
800 |
800 |
20000 |
2 |
未调度 |
3 |
300 |
500 |
500 |
15000 |
1 |
未调度 |
4 |
400 |
500 |
500 |
10000 |
3 |
未调度 |
5 |
500 |
300 |
300 |
12000 |
2 |
未调度 |
6 |
600 |
200 |
200 |
10000 |
1 |
未调度 |
7 |
700 |
200 |
200 |
7000 |
3 |
未调度 |
8 |
800 |
0 |
0 |
17000 |
2 |
未调度 |
9 |
900 |
0 |
0 |
12000 |
1 |
未调度 |
10 |
1000 |
0 |
0 |
12000 |
3 |
未调度 |
表1A
接着,步骤ST5中确定是否需要增加进一步的工序。这种确定可以依据用户相应的输入,该用户可确定在这个阶段不增加进一步的工序。在这种情况下,该方法进入步骤ST6,步骤ST6确定用户是否要手动修改工序的排名。在这种情况中,至少一个工序的修改的排名参数可由用户接收到。例如,用户可手动将工序ID为900的工序的排名参数设置为2,即用户可手动将排名参数由先前的值由9变为2,将该工序定义为排名第二的工序。相应地,在先前的排名参数(已排除)和新的排名参数(已包括)之间的带有先前排名参数的工序被移向该修改工序的先前排名参数值。各工序的新排名参数结果通过以下表1B显示。
紧接着,在步骤ST7中,调整被修改工序的权重参数102以适合新的排名。在一例中,权重参数102做如下改变:当被修改的工序具有新的排名参数N,N大于1且小于被排列工序的总数,根据具有排名参数N-1和N+1的工序(即相邻的工序)的权重参数102来确定改变的权重参数102。例如,当相邻的权重参数,即排名参数为N-1和N+1的工序的权重参数102不同时,被修改工序的改变的权重参数102设置为相邻权重参数之间的值,例如,两相邻权重参数的平均值。否则,当相邻权重参数相同时,被改变的权重参数102可设置为相同的值。
当被修改的工序具有新的排名参数1时,它的权重参数102例如依照具有新的排名参数2的工序的权重参数102来改变。例如,修改的权重参数102设置为某一值,该值比排名参数为2的工序的权重参数102高出预定的数或增量值,如1或100。当被修改工序的新排名参数同排序工序的总数相同时,即当被修改工序被分配到最低的排名时,它的权重参数102例如可设置为零。
基于改变的权重参数102,图2所示的方法进入步骤ST4,其中工序再一次由上述那样进行排序。表1B表示了步骤ST5至ST7和步骤ST4执行后的情况。在该例中,用户已在步骤ST6中将工序(900)的排名参数修改为2。在步骤ST7中,工序(900)的权重参数102被修改为900,即相邻权重参数800和1000的平均值。在步骤ST4中,各工序已按以上描述的方法进行排序。例如,所有新增加的工序的工序状态参数都被设置为“未调度”,这可以定义直到该步对于这些工序来说还没有被调度。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
100 |
1000 |
1000 |
25000 |
1 |
未调度 |
2 |
900 |
900 |
0 |
12000 |
1 |
未调度 |
3 |
200 |
800 |
800 |
20000 |
2 |
未调度 |
4 |
300 |
500 |
500 |
15000 |
1 |
未调度 |
5 |
400 |
500 |
500 |
10000 |
3 |
未调度 |
6 |
500 |
300 |
300 |
12000 |
2 |
未调度 |
7 |
600 |
200 |
200 |
10000 |
1 |
未调度 |
8 |
700 |
200 |
200 |
7000 |
3 |
未调度 |
9 |
800 |
0 |
0 |
17000 |
2 |
未调度 |
10 |
1000 |
0 |
0 |
12000 |
3 |
未调度 |
表1B
该方法由步骤ST4再进入步骤ST5,其中确定是否增加进一步的工序。表1C示出了可从用户接收的对于三个进一步的工序的定义。为此,该方法进到步骤ST1,如图2所示。例如,该新工序可最长不具有对其分配的排名参数。这三个新工序可通过三个连续的由步骤ST1-ST5定义的循环接收,或者它们可在同一循环中同时被接收。新工序被加到先前的工序中,并与先前工序一起排序和排名,如上所述。在新工序被排名后,它们的初始工序状态参数自动由“新工序”变为“未调度”。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
NA |
1100 |
500 |
500 |
20000 |
2 |
新工序 |
NA |
1200 |
900 |
900 |
10000 |
1 |
新工序 |
NA |
1300 |
0 |
0 |
20000 |
1 |
新工序 |
表1C
如果在步骤ST6不需要修改排名参数,该方法根据图2所示的例子进入步骤ST8,其中,确定用户是否欲手动修改至少其中一个工序的状态参数。相应地,用户可在需要的时候手动修改至少一个工序的工序状态参数,其中在步骤ST9中,新状态被分配给修改的工序。例如,每个工序的工序状态参数可以为“新工序(new process)”、“未调度(Unscheduled)”、“已调度(Scheduled)”、“稳定(Firm)”、“保持(On-hold)”、“处理中(In-progress)”、“已完成(Completed)”、“已取消(Cancelled)”或对应于这些值的状态。在一例中,用户可只将工序状态参数变为“保持”和“已取消”或者对应于这些值的状态,而工序状态参数的其他值由示例系统自动分配。
该方法接着可进入调度各工序的步骤ST10。根据一实施例,调度循环ST10的细节在后面参照图3进行描述。在步骤ST10中,对多个资源106分析每个可用资源容量104,其中被分析的每一资源106可有能力执行在至少一个任务类别中的任务,这些任务包含在先前步骤所接收和排序的工序中。根据对已排序工序所定义的任务类别分析的资源容量,建立属于特定工序的所有任务的第一调度,并且依照所建立的属于相应工序的任务的调度来估算每一工序的第一调度参数。所有任务的第一调度代表了将多个任务分配到多个资源的第一资源-任务分配集合(resource-task assignment set)。进一步地,当第一资源-任务分配集合已被建立,根据多个参数对来估算第一控制参数,其中每个参数对分配到多个工序中每个的权重参数和调度参数构成。第一控制参数可同第一资源-任务分配集合一同存储。
进一步地,建立不同于第一资源-任务分配集合的第二资源-任务集合。第二资源-任务分配集合同第一资源-任务分配集合的不同点在于:不是如在第一资源-任务分配集合那样,所有任务都分配到相同的资源。根据在第二资源-任务分配集合中建立的任务调度估算每个工序的第二调度参数,并且根据多个参数对来估算第二控制参数,每个参数对由为多个工序中每一工序所定义的权重参数和调度参数构成。第二控制参数可同第二资源-任务分配集合一同储存。
更进一步地,可建立一个或多个附加的资源-任务分配集合,它们与第一和第二资源-任务分配集合不同,和/或相互不同。这些附加的资源-任务分配集合可按相同的方式建立,并且对每个附加的资源-任务集合,可估算附加的控制参数。每个附加的控制参数可同各自的资源-任务分配集合共同存储在数据库中,如数据库100。
依照控制参数的选择标准,步骤ST10可选择储存的控制参数之一。选择标准可定义来选择具有最高或最低的控制参数的资源-任务分配集合。或者,选择标准可对控制参数定义任何其他条件。根据控制参数的选择,步骤ST10可从数据库检索相应的资源-任务分配集合。在一个实施例中,所有已建立的资源-任务分配集合可同控制参数一起储存。在步骤ST10中,该方法可通过将各工序的各任务根据所选择的资源-任务分配集合分配到资源的方法,进一步将至少一些工序分配到多个资源106。
使得通过该方法可达到最佳效率和/或时间效率的标准可因工序的类型不同而不同。对于某些工序来说,在到期日保持需求十分重要,因此该方法可选择允许最小延迟的资源分配。然而对某些工序来说,仅仅分析延迟还不够,除了延迟量还要考虑延迟情况下造成的可能损失。与上述示例不同,一些工序会要求更早的传送,并且会要求选择对“早”有利的估算标准。
在步骤ST11中,该方法可进一步确定分配循环是否已完成。该判定根据用户输入来定义。例如,用户可能决定增加另外的工序或手动编辑一个或多个已调度或未调度的工序。这同样包括对各工序进行手工排序或再排序。在这种情况下,该方法可进入步骤ST5,该步骤已描述过。如果在步骤ST11判定分配循环已完成,该方法可进一步包括步骤ST12,根据已建立的任务资源分配来控制至少一些资源106。例如,控制单元通过网络与至少一些资源连接起来;并且,例如,该方法进一步包括根据已建立的调度直接或间接控制至少一些资源的步骤。特别,与其相对应的操作调度或控制信号或信息可通过网络传送至各资源。相应资源的操作可自动开始或终止,也可通过资源的用户依照传送的操作来开始或终止。
表1D示出了上述所描述的多个工序的示例,其中工序1100、1200和1300在其他工序已调度之后被添加。添加的工序未被调度。这由各工序的工序状态参数指示。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
100 |
1000 |
1000 |
25000 |
1 |
已调度 |
2 |
900 |
900 |
0 |
12000 |
1 |
已调度 |
3 |
1200 |
900 |
900 |
10000 |
1 |
未调度 |
4 |
200 |
800 |
800 |
20000 |
2 |
已调度 |
5 |
1100 |
500 |
500 |
20000 |
2 |
未调度 |
6 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
7 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
8 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
9 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
10 |
700 |
200 |
200 |
7000 |
3 |
已调度 |
11 |
1300 |
0 |
0 |
20000 |
1 |
未调度 |
12 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
13 |
1000 |
0 |
0 |
12000 |
3 |
已调度 |
表1D
在由表1D示出的例子中,工序1100排列在工序300前,因为二者具有相同的内权重参数,但工序1100的工序量参数更高。工序1200的排名位于工序900之下,因为二者虽然具有相同的权重参数,但工序1200的工序量参数低。工序1300排名位于工序800之上,因为虽然二者的权重参数相同,但工序1300的工序量参数更高。
在表1E展示的示例中,工序1300在图2示出的步骤ST6中被手动调整为的排名最高的工序。相应地,(内部)权重参数被设置为与排名第2的工序(工序ID100)的权重参数(值为1000)相对应的值加1,即设置为值1001。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
1300 |
1001 |
0 |
20000 |
1 |
未调度 |
2 |
100 |
1000 |
1000 |
25000 |
1 |
已调度 |
3 |
900 |
900 |
0 |
12000 |
1 |
已调度 |
4 |
1200 |
900 |
900 |
10000 |
1 |
未调度 |
5 |
200 |
800 |
800 |
20000 |
2 |
已调度 |
6 |
1100 |
500 |
500 |
20000 |
2 |
未调度 |
7 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
8 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
9 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
10 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
11 |
700 |
200 |
200 |
7000 |
3 |
已调度 |
12 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
13 |
1000 |
0 |
0 |
12000 |
3 |
已调度 |
表1E
对于已经开始的工序,工序状态参数可被设置为表示“处理中”的值,或其他类似的值。这同样可以适用于这样的工序,其中至少一项任务已开始被至少一个资源操作。任务状态参数(任务状态)被分配给每个工序中的至少一个任务,并且单独的任务状态参数可分配到每一工序中的每个任务。每个任务的任务状态参数可以为如下值,“未调度”、“已调度”、“稳定”、“保持”、“早开始”、“处理中”、“已完成”和“已取消”,或者与这些值相符的状态。对于已开始的任务来说,任务状态参数被设置为表示“处理中”的值或类似的值。对于被调度在特定时间(死定期间freezefirm period)内开始的工序来说,工序状态参数被设置为表示“稳定”的值或相似的值,而这段时间可以通过死定期间持续参数来定义。这提高了为由稳定期间参数(firm period parameter)定义的最近将来的建立和控制调度的可靠性。相应地,这便于提前安排执行任务所需的材料和资源。在表1F所示的例子中,新调度已被生成,并且工序200和900是在死定期间内被调度的,这样已分配的工序状态参数被设置为“稳定”。工序1300和100已开始,所以工序状态参数现在更新为“处理中”。具有“处理中”和“稳定”状态的工序在调度循环ST10中不改变。这些工序可在工序优先级表中保留其地位,直到工序被完成,即直到工序状态参数的值设置为“完成”或与其相应的状态。在另一实施例中,这些工序的排名参数可自动和/或手动进行改变。例如,这种改变可在工序调度被执行前发生。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
1300 |
1001 |
0 |
20000 |
1 |
处理中 |
2 |
100 |
1000 |
1000 |
25000 |
1 |
处理中 |
3 |
900 |
900 |
0 |
12000 |
1 |
稳定 |
4 |
1200 |
900 |
900 |
10000 |
1 |
已调度 |
5 |
200 |
800 |
800 |
20000 |
2 |
稳定 |
6 |
1100 |
500 |
500 |
20000 |
2 |
已调度 |
7 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
8 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
9 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
10 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
11 |
700 |
200 |
200 |
7000 |
3 |
已调度 |
12 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
13 |
1000 |
0 |
0 |
12000 |
3 |
已调度 |
表1F
例如,工序状态参数是“处理中”或是“稳定”的工序可以手动地被分配带有预先设定或预先可设定的用户定义重新开始日期的“保持”状态。例如,这些过程将保留它们原始优先级排名(排名参数),并且在重新开始日期后被例如分配至第一可用资源。在不同的实施方式中,“恢复”的工序的排名参数可自动和/或手动地改变。
表1G示出了一例,其中工序900被手工分配了带有工序重新开始ASAP(越快越好)日期的工序状态参数“保持”,以便为新的紧急工序1400释放容量。工序900按排名参数在工序优先级表中保持其先前位置。例如,工序900只要在合适的资源容量104可用时就在步骤ST10中重新调度。此外,工序700被手动分配“已取消”工序状态参数。例如,带有状态“已取消”的工序在步骤ST10的资源分配时没有被考虑。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
1300 |
1001 |
0 |
20000 |
1 |
处理中 |
3 |
900 |
900 |
0 |
12000 |
1 |
保持 |
4 |
1200 |
900 |
900 |
10000 |
1 |
已调度 |
5 |
1400 |
700 |
700 |
20000 |
1 |
未调度 |
6 |
200 |
800 |
800 |
20000 |
2 |
稳定 |
7 |
1100 |
500 |
500 |
20000 |
2 |
已调度 |
8 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
9 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
10 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
11 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
12 |
700 |
200 |
200 |
7000 |
3 |
已取消 |
13 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
14 |
1000 |
0 |
0 |
12000 |
3 |
已调度 |
表1G
如表1H所示,在表1G中添加的工序1400经手动调整,其排名参数为3,这说明该工序排列在工序900之上。相应地,工序1400例如在工序900之前被调度。例如,工序1400的权重参数自动地设置为(1000+900)/2=950,如上文所述。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
1300 |
1001 |
0 |
20000 |
1 |
处理中 |
2 |
100 |
1000 |
1000 |
25000 |
1 |
处理中 |
3 |
1400 |
950 |
700 |
20000 |
1 |
未调度 |
4 |
900 |
900 |
0 |
12000 |
1 |
保持 |
5 |
1200 |
900 |
900 |
10000 |
1 |
已调度 |
6 |
200 |
800 |
800 |
20000 |
2 |
稳定 |
7 |
1100 |
500 |
500 |
20000 |
2 |
已调度 |
8 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
9 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
10 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
11 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
12 |
700 |
200 |
200 |
7000 |
3 |
已取消 |
13 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
14 |
1000 |
0 |
0 |
12000 |
3 |
已调度 |
表1H
表1I示出了在步骤ST10生成新的主资源(master resources)调度之后的示例情况。工序1400至少部分地被分配到先前已分配给工序900的资源。这从所示表格中看不出来。例如,工序1400的工序状态参数已自动地被设置为“稳定”。当合适资源106接下来变为可用,并且分配工序状态参数“已调度”时,工序900被重新调度。现在,工序100已完成,并且分配“已完成”状态或相应值。例如,完成的和/或取消的工序的排名参数自动地被设置成为定义的状态,如“X”值,用来指示这些工序在排序或调度时不应被考虑。例如,具有排名参数(如X)的工序对用户来说不可见。
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
1300 |
1001 |
0 |
20000 |
1 |
处理中 |
5 |
1400 |
950 |
700 |
20000 |
1 |
稳定 |
3 |
900 |
900 |
0 |
12000 |
1 |
已调度 |
4 |
1200 |
900 |
900 |
10000 |
1 |
已调度 |
6 |
200 |
800 |
800 |
20000 |
2 |
稳定 |
7 |
1100 |
500 |
500 |
20000 |
2 |
已调度 |
8 |
300 |
500 |
500 |
15000 |
1 |
已调度 |
9 |
400 |
500 |
500 |
10000 |
3 |
已调度 |
10 |
500 |
300 |
300 |
12000 |
2 |
已调度 |
11 |
600 |
200 |
200 |
10000 |
1 |
已调度 |
13 |
800 |
0 |
0 |
17000 |
2 |
已调度 |
14 |
1000 |
0 |
0 |
12000 |
3 |
已取消 |
X |
100 |
1000 |
1000 |
25000 |
1 |
已完成 |
X |
700 |
200 |
200 |
7000 |
3 |
已取消 |
表1I
当排名参数被手动修改后,内部权重参数另外可由不同方式来确定。另一个示例的选择如下参照表1B’进行描述。例如,用户可手动将工序ID=900的工序的排名参数设置为2,即他可以手动将排名参数由以前的9设置为2,将该工序定义为排列第2高的工序。相应地,该手动修改工序的先前排名参数(已排除)和新排名参数(已包括)之间的带有先前排名参数的各工序排名被向该修改工序的先前排名参数做移位。各工序的新排名参数结果在如下的表1B’中示出。
接着,在步骤ST7中,该修改工序的权重参数102要调整以适应新排名。在该例中,权重参数102按如下方式进行调整:当被修改工序具有新的排名参数N(N大于1,且小于所排列工序的总数),被修改工序的权重参数102按之前具有排名参数N的工序的权重参数102来确定。例如,被修改工序的调整权重参数102被设置为之前具有排名参数N的工序的先前权重参数。例如,修改每一被移位工序的权重参数,即修改每个其新的排名参数向该被修改工序的先前排名参数值做移位的工序的权重参数,使得所述新排名参数对应于先前具有对应于该被移位工序的新排名参数的排名参数的工序的先前排名参数。例如,被移位工序200的新排名参数对应于工序300的先前排名参数。相应地,工序200的新内部权重参数被设置为工序300的先前权重参数的值,如图1B’例如所示:
优先级排名参数 |
工序ID |
内部权重参数 |
估算参数 |
工序量参数 |
关键参数 |
工序状态 |
1 |
100 |
1000 |
1000 |
25000 |
1 |
未调度 |
2 |
900 |
900 |
0 |
12000 |
1 |
未调度 |
3 |
200 |
800 |
800 |
20000 |
2 |
未调度 |
4 |
300 |
500 |
500 |
15000 |
1 |
未调度 |
5 |
400 |
500 |
500 |
10000 |
3 |
未调度 |
6 |
500 |
300 |
300 |
12000 |
2 |
未调度 |
7 |
600 |
200 |
200 |
10000 |
1 |
未调度 |
8 |
700 |
0 |
200 |
7000 |
3 |
未调度 |
9 |
800 |
0 |
0 |
17000 |
2 |
未调度 |
10 |
1000 |
0 |
0 |
12000 |
3 |
未调度 |
表1B’
步骤ST10的示例调度循环参照图3进行描述。例如,调度循环包括了初始调度的步骤ST20。步骤ST20可包括接收工序规范以及工序的排名和上述示例描述的至少部分参数和状态。在步骤ST20中,数据可从数据库检索,如数据库100,和/或从资源106检索。调度循环例如至少在中央调度和/或控制单元部分地执行。例如,调度和/或控制单元通过网络同数据库100和/或资源通信,并且特别通过该网络接收工序规范。
示例调度方法进一步包括了用来至少对可用资源106部分进行排序的步骤ST21。排序可根据任意排序条件产生。排序可根据各资源的容量和/或能力产生,例如容量最大的资源排至该排序的开始,而容量最小的资源排至排序的末尾。在不同的实施方案中,资源的排序可根据资源标识代码或按资源名称的字母顺序来产生。例如,已建立的资源排序用作良好定义的基础,用来向资源分配任务,或者按良好定义的排序来分析资源的可用容量。资源或108可存储在数据库中,如数据库110或数据库100。在一实施例中,数据库110和100可为同一数据库。
在步骤ST22中,调度循环可从第一工序开始。例如,带有最高排名的工序,即具有最小的排名参数,并且具有不同于“处理中”或“稳定”的工序状态参数的工序被选择来开始调度循环。在另一实施例中,如下文更详细的描述,具有工序状态参数“处理中”或“稳定”的工序首先被选择。
被选择的工序在步骤ST23中分析。例如,分析工序的步骤ST23包括根据属于工序的任务来分析工序的组成。例如,必要的数据从数据库110和/或数据库100检索。例如,至少如上描述的的工序规范的部分在步骤ST23中分析。附加的或另外的步骤可包括在步骤ST23,这些附加的或另外的步骤如下结合图4A、4B以及表2A、2C进行更详细的描述。在步骤24中,选择工序的第一任务用于进一步调度。例如,至少部分地按该工序规范中定义的各任务的时间依赖性来进行选择。
被选择的任务属于某个任务类别,该任务类别例如被认为是步骤ST25的基础,步骤ST25用来分析执行被选任务的可用资源容量。例如,在步骤ST25中,按资源排序108的顺序来查询有能力执行该被选任务的任务类别中任务的资源,并分析可用资源容量。例如,根据总资源容量和该资源已调度的容量为基础来确定资源的可用资源容量。如上描述的那样,总资源容量可由标准使用时间和非调度时间预留参数来得出。如果找到对应于被选任务所要求容量的可用资源容量,该任务可在步骤ST26中被分配至相应的资源。被选任务到资源的该分配被添加到资源-任务分配集合112(112’,112”,……),如第一资源-任务分配集合112。该资源-任务分配集合112定义了已经通过将把任务分配到资源而被调度的资源容量。该资源-任务分配集合同样还定义任务对资源的分配,即任务和资源之间的联系,以及通过资源执行任务的调度,即时序参数。该时序参数可以基于处理时间和上述的任务的时帧参数。
接着,步骤ST27判定当前分析的工序中是否包含还没有被分配至资源的任务。若肯定,在步骤ST28中选择该工序中下一个任务,并且该方法进至步骤ST25,其中分析用来执行新选择工序的可用资源容量,如以上所描述。在工序中所有任务都被分配到资源的情况下,步骤ST27中判定没有另外的任务,并且例如,该方法进至步骤ST26,其中根据工序内部各任务的调度估算该工序的调度。根据该估算的调度,为该工序建立调度参数114,并且储存于数据库,例如数据库110和/或数据库100。该调度参数可定义时间段,直到依照由资源-任务分配集合112定义的任务完成该工序中的最后一项任务。另外,调度参数114可定义工序开始和完成之间的时间段,即根据在资源-任务分配集合112中定义的调度执行该工序所持续的时间。在一例中,调度参数定义了从当前时间到该工序的调度结束时间的持续时间或该持续时间的倒数(reciprocal)。
在步骤ST30确定是否存在另外的应该被调度而尚未调度的工序。如果是肯定的,在步骤ST31中,选择该工序,并且该方法如上所述进至步骤ST24。当待调度的所有工序的各任务都被分配至资源时,在步骤ST30判定没有更多的工序要调度。因此,所有任务至资源的分配完成,并且可以储存在数据库中,如数据库100和/或数据库110。该方法进一步包括了用来估算该资源-任务分配集合的步骤ST32。在步骤ST32中,根据调度参数114和权重参数102为该完成的资源-任务分配集合建立控制参数116。例如,根据为每个工序定义的调度参数140和权重参数102来估算控制参数116。特别,在一例中,对于每个工序,调度参数114和权重参数102相乘,并且利用该资源-任务分配集合把对所有工序的这种乘积的总和定义元素配给相应资源-任务集合的控制参数,并且连同该资源-任务分配集合一起存储在数据库中,例如数据库110。
进一步,在步骤ST33判定调度是否应当完成。在该实施例中,至少当第一次执行步骤ST32时,该调度被认为没有完成,并且在改变资源排序108和/或建立不同于第一资源排序108的第二资源排序108’的步骤ST34继续该方法。接着,该方法又进至步骤ST22,并且利用第一工序再次开始循环。在步骤ST34改变资源排序和/或建立第二资源排序确保了在以下的调度循环中建立的至少一个另外的资源-任务分配集合112’、112”,如第二资源-任务分配集合112’和/或第三资源-任务分配集合112”,与在上述第一调度循环中建立的第一资源-任务分配集合112不同,因为用来将任务分配至资源的步骤ST26(以及用来分析资源容量的步骤ST25)至少部分地基于资源排序108、108’、108”。该完整的调度循环接着可以为多个不同资源排序108、108’、108”重复,产生多个不同的资源-任务分配集合112、112’、112”,每个集合都具有分配至其中的各自的控制参数116。多个资源-任务分配集合112、112’、112”的汇集可定义和/或构成解决方案集合122。
在步骤ST33中,在调度被认为完成的情况下,该方法进入步骤ST35,该步骤根据控制参数的选择条件选择一个已建立的资源-任务分配集合,并且根据所选择的资源-任务分配集合将各工序118分配至各资源106。相应地,在步骤ST35中,建立分配120,该分配120定义了各工序118的精确调度以及它们对各资源106的分配。
用来将各工序分配至多个资源的该方法一示例实施例描述如下。在示例实施例中,各种参数,尤其是各种时间参数和/或调度参数按如下定义和/或设置。与定义和/或设置这些参数有关的步骤可作为参数初始化步骤的一部分被执行。
例如,工序所需开始时间参数(Process_RequestStart)被设置为在所需开始时间的时帧段(或时隙)内最早的可用时间,这可在工序规范中被定义。依照时帧参数的定义和比例,这可以是所需小时内的第一分钟,或所需日中第一个小时,或所需开始的星期的第一个工作日(如星期一)。例如,该参数指示了工序可以开始的最早时间。如该工序可立即开始,该参数可被设置成尽可能快的时间和/或代表“ASAP”(越快越好)的值。
例如,某工序的所需停止时间参数(Process_RequestEnd)被设置为工序所需停止时间的时帧段(时隙)期间内的最晚的时间。与开始时间类似,所需停止时间可被设置为所需停止时间的所需小时中的最后一分钟,或所需日的最后一小时,或一星期内的最后一工作日(如星期五)。例如,该参数指示了工序必须被完成的的最晚时间。对于没有分配停止时间的工序来说,该参数可被设置为表示“ASAP”和/或“不可用”和/或“调度停止时间参数”的值。
例如,同所需开始时间参数类似,工序重新开始时间参数(Process_Restart)被设置为所需重新开始时间的时帧段(时隙)内的最早可用时间。例如,该参数指示了一旦工序被置于保持(on hold)状态时,该参数指示了该工序能重新开始的最早时间。在工序被置于保持状态来释放资源容量时,该参数可被设置为表示“ASAP”的值。在一实施例中,如果被置于保持状态的工序可以重新开始,该工序重新开始时间参数将被设置为表示“ASAP”的值。在发生延迟或者重新开始时间不详的情况下,该参数可以由例如表示“不定”(“indefinite”)的值来表示。
例如,如果某工序的状态为“保持”,同工序重新开始时间参数类似,任务重新开始参数(Task_Restart)被设置为某任务的所需重新开始时间的时帧段(或时隙)内的最早可用时间。例如,该参数指示了一旦任务已被置于保持状态时,任务可被重新开始的最早的时间。例如,所有依赖该置于保持状态的前驱任务将根据分配给该延迟任务的最早重新开始时间来重新调度。在包含该任务的工序被置于保持状态以释放资源容量的情况下,该参数可被设置为例如表示“ASAP”的值。在发生延迟并且开始时间不详的情况下,该参数可设置为例如表示“不定”的值。
例如,用来完成某任务(Task_EDC)的估计时间点(Task_EDC)被设置为时帧段(或时隙)内的最迟可用时间点,在该时间点该估计任务要完成。例如,该参数指示了任务至此完成的估计时间点。在一例中,该参数由用户输入,并且表示了用来完成某任务的估计时间点,当用户输入实际时间和/或当资源在执行该任务时进行估算。
例如,用来完成任务的估计时间段(Task_ETC)由用户输入,并且表示了完成任务估计所需时间段,当用户输入实际数据和/或当资源运行以执行任务时进行估算。
例如,调度的任务开始参数(Task_ScheduledStart)被设置为在为任务开始调度的时帧段(或时隙)期间内最早的可用时间,例如,与工序所需开始时间参数相似。例如,该参数指示了某任务经调度要开始的时间。在一例中,该参数可作为选择的资源-任务分配集合内调度的一部分而估算。
例如,调度任务终止参数(Task_ScheduledEnd)被设置为任务调度终止时间的时帧段(或时隙)内的最晚时间,该时间与工序所需终止时间参数相似。例如,该参数指示了任务调度开始的时间。在一例中,该参数可在选择资源-任务分配集合中作为调度的部分而被估算或者处理。
例如,任务实际开始参数(Task_ActualStart)被设置为任务已经被开始执行的时帧段(或时隙)内最早的可用时间。例如,任务实际终止参数(Task_ActualEnd)被设置为任务被资源实际完成的时帧段(或时隙)内的最晚可用时间。
调度开始时间参数定义了时间点,由该时间点开始任务将被分配到资源。调度终止时间参数定义了时间点,该时间点定义了任务可被分配至资源的最后时间点。这可以是日、月、年或其他晚于调度开始的任意时间段。
在一实施例中,如果任务不能被分配到资源,该任务会被标记为“未调度”。其原因如下:没有用来执行该任务的可用、有能力的资源,和/或有能力的资源不能在调度开始实际参数和调度终止时间参数间开始并且完成该任务,和/或向所有有能力的资源进行可能的分配没有符合在任务/工序定义中指明的要求,例如地点限制、捆绑限制等等。
另外,如任务在稳定(Firm)期间被调度,如果该任务开始(资源已开始执行任务),任务状态将是“处理中”。另外,如前驱任务状态不是“处理中”,那么任务状态将被设置为“稳定”。
如果该任务在稳定时间段外,并且开始执行该任务的资源在当前状态报告时间段,或者如果任务状态在先前调度期间为“早开始”(Early-Start),那么该状态将会被设置为“早开始”。另外,如果任务先前已设置为“处理中”,该状态将维持在“处理中”;另外如果任务执行没有开始,该状态将是“已调度”。
在另一实施例中,对于每一工序来说,工序状态参数根据包括在该工序中的任务的任务状态参数(Task_Status)来更新。例如,如果工序中的任何任务具有“保持”状态,该工序将接收“保持”状态。
不然,如果该工序中的任何任务具有“未调度”状态,该过程将接收“未调度”状态。最好突出该工序为“未调度”来表示在工序规范或者资源容量中存在问题。
不然,如果该工序中任何任务具有“处理中”状态,或者如果工序中任何任务具有“完成”状态,并且在该工序中至少另一项任务具有“稳定”或“已调度”状态,那么该工序将接收“处理中”状态。
不然,如果该工序中的任何任务具有“稳定”状态,该工序将接收“稳定”状态。
不然,如果该工序中任何任务具有“早开始”状态,该工序将会接收“早开始”状态。
不然,如果该工序中的所有任务具有“已调度”状态,那么该工序会接收“已调度”状态。
不然,如果该工序中所有任务都具有“已完成”状态,那么该工序的状态将会为“已完成”。
在另一实施例中,更新过程可依照如下实施:
IF Task_Status=′Onhold′and Task_Restart=′Unknown′for ANY
TASK in Process THEN
Process_Status=′Onhold′
Process_Restart=′Unknown′
Task_Status=′Onhold′for all Task_Status<>′Complete′;
or′Cancelled′in entire process
ELSE IF Task_Status=′Onhold′for all process tasks THEN
Process_Status=′Onhold′
ELSE IF Task_Status=′In-Progress′for ANY TASK in process
THEN
Process_Status=′In-Progress′
ELSE IF Task_Status=′Complete′for ALL TASKS(excluding those
marked as′Cancelled′)in process THEN
Process_Status=′Complete′
ELSE IF Task_Status=′Cancelled′for ALL TASKS in process
THEN
Process_Status=′Cancelled′
在该实施例中,分析包含在工序中的任务。判定工序中的任何任务是否将状态信息(工序状态参数)设置为表示“保持”的值,以及重新开始信息是否被设置为表示“未知”的值。在工序中发现这样任务的情况下,工序状态参数被设置为表示“保持”的值,工序重新开始值被设置为表示“未知”的值,并且对于所有没有在工序内表示“完成”或“取消”的值的任务的状态被设置为表示“保持”的值。相应地,如果某任务的重新开始时间未被输入,所有已完成或取消的任务以及整个工序可被定义为表示“保持”的状态。
在工序中没有发现任务表示“保持”的任务状态参数和表示“未知”的重新开始值任务的情况下,例如,判定是否工序内的所有任务具有表示“保持”的状态值。若是肯定的,例如,工序状态可设置为表示“保持”的值。另外,在上述提到的条件都没有被满足的情况下,例如,判定是否工序中任何任务具有表示“处理中”值。如果在工序中发现这样的任务,工序状态参数可被设置为表示“处理中”的值。
更进一步地,如果先前的条件都没有被满足,判定工序中所有任务是否具有表示“已完成”状态值。在这种情况下,工序状态被设置为表示“已完成”的值。相应地,例如在所有任务被完成的情况下,整个工序的状态可被设置为表示该任务已完成的值。例如,如果该工序包含了至少一项具有表示“完成”状态的的任务,并且如果工序中所有任务没有表示“完成”的状态,而是表示“已取消”的状态,工序的状态同样被设置为表示“完成”的值。相应地,整个工序的状态,即工序状态参数,可被设置为表示该工序已完成的值,例如如果至少一项任务已完成,并且工序中没有未完成的任务保持未取消的状态。
最后,如果以上提到的条件都没有被满足,判定工序中的所有任务是否具有表示“已取消”的值。在这种情况下,该工序的状态被设置为表示“已取消”的值。相应地,在工序中所有任务被取消的情况下,工序本身被标记为“已取消”。
如果工序中任何任务都有“稳定”状态,而其他任务没有“保持”、“未调度”或“处理中”的状态,工序的状态可以被设置为“稳定”。在一例中,工序的状态被设置为表示“稳定”的值,如果工序已被调度在给定时间段(稳定时间段)内,如给定分钟、小时、天,或星期内开始。该方面可依照下例所示执行:
IF Process_ScheduledStart<>NULL AND Process_Status
<>′Onhold′;′Complete′;′Cancelled′THEN
IF Process_ScheduledStart<=
(CURRENT_TIME+FIRM_PERIOD)THEN
Process_Status=′Firm′
Task_Status=′Firm′for all tasks associated with the process
ELSE
Process_Status=′Scheduled′
Task_Status=′Scheduled′for all tasks associated with
the process
END
END
另外,当使用调度开始时间参数而不是CURRENT_TIME时,该方面可由如上所示来执行。
相应地,例如,判定已调度的开始时间是否被分配给与“NULL”不同的工序,以及工序状态参数是否具有不同于“保持”、“完成”或“取消”的工序状态参数。在两种情况都被满足的情况下,进一步判定工序开始时间是否调度到不迟于当前时间加已给定的稳定时间段。在这种情况下,该工序的状态被设置为表示“稳定”的值。对于进一步的例子来说,所有包含在工序中的任务的状态都被设置为表示“稳定”的值。在后一个条件未满足的情况下,即在工序被调度在稳定期间期满后开始的情况中,工序状态和工序中所有任务的状态被设置为表示“已调度”的值。
以下描述调度任务至资源的实施例。该部分基于任务现状(actual)更新调度,并且基于优先级,即排名参数,和/或地点和/或可用资源来调度任务。
在第一步中,利用输入的实际数据,根据工序现状调整那些已被处理的、其相应的数据被储存在相应数据库中的工序的调度。例如,利用具有最高优先级(即最小的排名参数)并且已输入所有未完成或取消任务的实际值的工序来开始。任务的剩余和/或总处理时间基于已开始的任务的估计完成时间并且基于未被开始任务的标准值(如标准处理时间)而更新。Task_ScheduleEnd参数基于已开始任务的任务完成估计时间而更新,并且,例如,即将被完成任务的以时隙表示的总耗费时间基于标准值(如未开始任务的标准处理时间)被更新。确定每时帧段(时隙)的可以基于剩余和/总处理时间和Task_ScheduledEnd参数被分配到资源的最小和最大的处理时间。
例如,如果任务被调度的实际时隙数比最小耗费时间大,那么在最后时隙的每时隙处理时间的最小限制不适用。资源的可用容量基于(标准使用时间×非调度预留参数)-(已分配给更新现状的处理时间)来确定。每时隙的任务处理时间(Task_Processing)在最大最小限制内按时隙的桶(bucket)分配给资源,直到所有处理时间被分配。进一步地,基于对已开始被处理的任务的按时隙桶的处理时间分配,来检查任务是否将会在Task_ScheduledEnd时隙中完成。更进一步地,例如,基于对还未开始处理任务的按时隙桶分配的处理时间,检查是否满足最小耗费时间。基于所分配的处理时间被调度至开始或结束的时隙来分别分配Task_ScheduledStart和Task_ScheduledEnd参数。例如,根据任务依赖性,上述操作对过程中的所有任务重复,直到所有的任务被更新。一旦所有任务被调度,对于在该工序中调度的所有任务,Process_ScheduledEnd参数被设置为最大Task_ScheduledEnd参数。例如,对于所有带有输入的实际值的工序,即已经通过至少一个资源来开始执行的工序,重复第一步骤中所有操作。
例如,在第二步骤中,类似的操作对具有“稳定”状态的工序执行。
例如,在第三步骤中,生成主资源调度(mater resource schedule)。第一,对于带有具有“未调度”或“已调度”值的任务状态参数的所有任务,或者具有对应于这些值的状态的任务,以及具有大于零的权重参数工序,根据工序优先级即排名参数和任务依赖性参数来进行调度。所有与具有工序状态参数“处理中”或“稳定”的工序相关的任务将会在调度中保持锁定状态。所有与具有工序状态参数“已取消”或“已完成”的工序相关的任务将不被考虑调度。根据工序的排名参数和任务依赖性参数来选择任务。根据任务标识和/或任务地点和/或任务种类来查询或检索用来完成任务的合适资源集合。确定工序内部的任务必须捆绑至单个资源。根据已开始任务的估计完成时间,并且基于标准值,如未开始任务的标准处理时间来更新剩余和/或总处理时间。根据已开始任务的任务完成估计时间以及任务完成的总耗费时间更新Task_ScheduledEnd参数,该参数例如通过时隙,基于标准值,如标准处理时间为未开始任务来更新。确定每时隙最小和最大处理时间,这样可基于剩余和/或总处理时间和Task_ScheduledEnd参数分配给资源。例如,如果某任务被调度的实际时隙数量大于最小耗费时间,那么在最后时隙中不应用每时隙处理时间的最小限制。
例如,以下操作在合适资源识别的集合中对所有可能的资源组合而重复:基于(标准使用时间×非调度时间预留参数)-(已为其他调度任务分配的处理时间)确定可用资源容量。“现状(actual)”可以定义在任务和/或工序上执行的活动和/或操作,特别地与按资源执行至少一部分任务和/或工序相联系。每时隙的任务处理时间在最大和最小限制之间按时隙的桶分配给各资源,直到所有处理时间被分配。进一步地,根据对已开始任务处理时间按时隙桶分配来检查任务是否将在由Task_ScheduledEnd参数定义的时隙内完成。甚至更进一步地,根据对未开始任务处理时间按时隙桶分配来检查最小耗费时间是否被满足会被检查。根据被分配的处理时间被调度至开始或终止的时隙类分配Task_ScheduledStart和Task_ScheduledEnd参数。例如,根据任务依赖性参数对工序中所有任务重复上述操作,直到所有任务被更新。
一旦所有任务被调度,对于该工序中被调度的所有任务,Process_ScheduledEnd参数被设置为Process_ScheduledEnd参数的最大值。对于工序中被调度的所有任务,Process_ScheduledStart参数被设置为Process_ScheduledStart参数的最小值。计算当前时间和Process_ScheduledEnd参数之间的持续时间(即Process_ScheduledEnd-CURRENT DATE)或调度开始时间参数和Process_ScheduledEnd参数之间的持续时间(即Process_ScheduledEnd-调度开始时间参数)。例如,其结果表示了相应工序的调度参数。进一步地,计算(内部)权重参数和调度参数之间的比率。依照工序组,可计算内部权重参数或(内部)量参数和调度参数以对刚刚按当前资源-任务分配集合一部分来调度的工序提供分数参数(score parameter)。
例如,对于所有带有大于零的权重因数的工序重复上述操作,并且计算相应权重参数和调度参数的比值。例如,所有这些比值相加,其总和被标识为调度的控制参数。
这些操作可施加到多个不同的资源-任务分配集合,并且比较所得到的控制参数。例如,重复这些操作,直到得到的控制参数的最大值。可选择相应的资源-任务分配集合,以此未基础,将工序分配至资源,并且特别根据所建立的调度来控制资源,并且最后用于所有其他的量参数为零的工序。
例如,对于带有任务状态参数“未调度”或“已调度”并且权重参数为0的所有任务,执行类似的操作,其中在估算控制参数的步骤中,可使用工序量参数而非权重参数。
工作分配系统初始可根据每项任务的标准值如任务的容量需求参数的标准处理时间来调度工序。然而,工序可因复杂程度和持续时间而不同。在一些情况中,最初猜测完成某任务的总工作量和持续时间的标准估计并不是百分之百精确。一旦工序开始,每项任务的时间耗费可能与所估计的初始标准值不符。相应地,例如,系统包括了状态跟踪模块,该模块从至少一个资源接收(在另外例子中从多个资源接收)指示至少一个任务的实际状态的任务报告数据。任务报告数据可包括完成该任务的估计的时间点(Task_ECT),和/或完成该任务的估计的时间段(Task_EDT)。作为替换或附加,任务报告数据可包含在特定时帧段(时隙)内执行任务的实际时间花费,和/或用来执行任务的每时帧段(时隙)的实际时间的平均值。例如,任务报告数据包括了任务状态参数。至少任务报告数据的部分会自动地从例如资源日志数据来检索。至少部分任务报告数据可由用户手动输入。在一实施例中,这些方面可在结合图5描述的步骤ST3000中实现。
例如,基于接收的任务报告数据,系统可更新每项任务的计划时间和/或计划持续时间值。例如,容量要求参数和/或一项或多项任务的时帧参数可根据已接收的报告数据被置换和/或更新。
在一例中,计算定义了所有可能的把多个任务向多个资源的分配的所有可能的资源-任务分配集合,并且估算相应的每个已建立的资源-任务分配集合的控制参数。依照控制参数的选择标准,选择资源-任务分配集合中的一个。例如,控制参数表示成数字值,并且选择标准规定选择具有最高或最低的控制参数的资源-任务分配集合。
优化调度的过程可包含一个或多个下述调度步骤:例如,第一调度步骤包括为工序和任务建立和/或检索优先级列表的步骤。该列表可对应于作为当前调度阶段的一部分而降被处理的工序和任务。第二调度步骤可包含用来识别资源适合度集合的步骤。例如,第三调度步骤包含了将任务调度到可用资源容量。进一步地,第四调度步骤可包含优化调度的步骤。最后,例如,第五调度步骤包括更新工序状态参数和/或任务状态参数的步骤。一个或多个这些步骤可至少部分在步骤ST5000和/或步骤ST6000和/或步骤ST7000中实现或包括在其中,具体描述结合图5至7在下文中进行。例如,对所有工序依照当前工序状态参数、权重参数和/或工序量参数按优先级的顺序重复以上五个步骤中的每一步骤。然而在该关系中需要注意以下问题,上述调度步骤的列举不必与这些步骤在次列举的时间顺序相同,虽然在一例中这些步骤可以按这里列举的顺序被执行。
在为工序和任务建立和/或检索优先级列表的步骤中,以下两方面可被考虑。第一,工序优先级列表可依次在排序步骤中通过依照(内部)权重参数、工序量参数和工序关键参数排序工序来建立,如上所述。得到的工序优先级列表可定义为随后调度步骤的工序的调度优先级。
第二,对工序中至少一些任务,在另外例子中对工序内的所有任务,可基于分配至任务的依赖性参数建立任务优先级列表。例如,对于每一工序,建立任务优先级列表用来定义至少一些任务的优先级排名,在另一例中对相应工序中包含的所有任务定义优先级排名。所得到的这些任务优先级列表可定义在随后步骤使用的任务调度优先级。在一例中,工序的任务优先级列表只根据依赖参数来建立。
一个或多个这些方面和/或为工序和任务建立和/或检索优先级列表的步骤的进一步细节可至少部分地在步骤ST2000中实现或包括在其中。步骤ST2000结合图5在下文中更细致地描述。
例如,在分配给任务的依赖性参数中定义了该任务对一项或多项其他任务依赖性。例如,该依赖性定义了在该任务的依赖性参数中所标示的其前驱任务开始和/或完成前不能执行该任务。因此,任务优先级列表的规定,可对工序中每一任务,确保在执行该任务之前调度执行该任务所依赖的所有其他任务。
图4A和4B为任务依赖性图和任务级分配。图4A示出多项任务1-8和其依赖,例如,其中所有任务包含在相同工序中。每两项任务之间的箭头表示了该两项任务间的依赖,其中箭头由其开始的任务依赖箭头所指向的任务。例如,任务6依赖任务2和任务5。
在一例中,建立任务优先级列表的步骤包括了一个或多个步骤:
1)对工序中每项任务检索分配给该任务的依赖参数。
2)确定不依赖该工序中其他任何任务的所有任务,并且向所确定的任务分配任务级参数,该参数表示了值“1级任务”或“1”或与该值相对应的状态。
3)把带有任务级参数为“1级任务”或“1”(或相应值)的任务的最早任务开始时间设置为该工序的请求开始时间参数的值。
4)通过为每项任务确定其前驱任务的最大任务级(最大前驱任务级),以及将表示该表示该值(最大前驱任务级+1)的任务级参数分配给该任务来为所有任务建立任务级。例如,重复该步骤,直到所有任务级被确定。例如,如果对于一项任务,其前驱任务确定具有最高任务级参数属于由值“2级任务”或“2”或相应值表示的任务级,那么该任务的任务级参数被设置为表示“3级任务”或“3”或相应的值。在一例中,所有任务的任务级参数首先被设置为表示“1级任务”或“1”或相应值的值。
5)从1级任务开始,并且逐级地向排序的任务列表中增加任务,由此在工序中建立排序的任务列表。
在该例中,确定与该工序相关的任务中不依赖任何其他任务的所有任务,即没有任何前驱任务的任务,即“任务1”和“任务5”。例如,这些任务的最早任务开始时间被设置为包含这些任务的工序的所需开始时间参数。这些任务的任务级参数被设置为表示“1级任务”或“1”或相应值的值。在一例中,该最低任务级参数首先被分配给工序内的所有任务。在更进一步的步骤中,对于所有任务,其前驱任务被确定,例如定义在每项任务相应任务依赖参数中。对于每项任务,确定前驱任务级的最大值,即前驱任务的任务级,并且所述任务的任务级被设置为具有下一个排名的值,例如,该值比被确定的最大前驱任务级高出“1”。
表2A示出了结果值。例如,任务3依赖任务1和任务5,因此任务1和任务5是任务3的前驱任务,而任务1和任务5不依赖其他任何任务。相应地,任务3的最大前驱任务级被确定为“1”,并且任务3的任务级参数被设置为值“2”。
任务 |
前驱任务 |
最大前驱任务级 |
任务级 |
1 |
无 |
无 |
1 |
2 |
1 |
1 |
2 |
3 |
1,5 |
1 |
2 |
4 |
7 |
1 |
2 |
5 |
无 |
无 |
1 |
6 |
2,5 |
1 |
2 |
7 |
5,6 |
1 |
2 |
8 |
5 |
1 |
2 |
表2A
重复为每项任务确定其前驱任务的任务级最大值的集合,这样最终任务级被相继地建立。例如,表2B和表2C表示了在所述确定步骤分别第三次和第四次执行后的情况。
任务 |
前驱任务 |
最大前驱任务级 |
任务级 |
1 |
无 |
无 |
1 |
2 |
1 |
1 |
2 |
3 |
1,5 |
1 |
2 |
4 |
7 |
2 |
3 |
5 |
无 |
无 |
1 |
6 |
2,5 |
2 |
3 |
7 |
5,6 |
3 |
4 |
8 |
5 |
1 |
2 |
表2B
任务 |
前驱任务 |
最大前驱任务级 |
任务级 |
1 |
无 |
无 |
1 |
2 |
1 |
1 |
2 |
3 |
1,5 |
1 |
2 |
4 |
7 |
4 |
5 |
5 |
无 |
无 |
1 |
6 |
2,5 |
2 |
3 |
7 |
5,6 |
3 |
4 |
8 |
5 |
1 |
2 |
表2C
图4B示出了依照表2C示出的结果将图4A的任务分配至不同的任务级。
例如,基于表2C示出的结果,可依据已建立的任务级赖建立任务优先级列表。所得到的任务优先级列表可为如下:任务1、任务5、任务2、任务3、任务8、任务6、任务7和任务4。
例如,在该任务优先级列表中,任务例如首先按其任务级排序,然后按任务ID以数字和/字母的升序进行次排序。然而。对于具有相同任务级的任务来说,其相互次序无关紧要,可以是任意次序。一旦工序优先级列表和任务优先级列表(一个或多个)被建立,所有工序的所有任务的完整排序列表可被建立。例如,任务的完整排序列表用于下面的调度步骤。
对资源合适度集合的识别做更为详细描述。该步骤或至少一些方面可至少部分的在步骤ST5220中实现,该步骤如下结合图7更加详细地描述。一旦建立工序优先级列表和任务优先级列表(一个或多个),可识别有能力执行这些任务的完整的资源集合。例如通过将该任务的优选的任务地点和任务类别与资源容量和地点进行匹配,从而获得可能用来执行这些任务的资源的识别。例如,当任务特征与相应资源特征匹配时可考虑地理和任务捆绑的规则。例如,优选的任务地点被设置为表示“任何国内”(Any Onshore)、“任何国外”(Any Offshore),或“任何地点”(Any Location)的状态,或表示这类状态的值,则考虑分别来自所有国内地点、所有国外地点或全部所有地点的资源用作对应于所需任务类别。并且,例如,在同一工序中具有相同捆绑参数的任务由相同的资源来执行。这意味着对于将被考虑的资源来说,为了完成捆绑中的所有任务,该资源必须具有执行该捆绑中所涉及的所有任务类别的任务的能力。
总之,资源合适度集合代表了对于每一项任务的基于任务类别和/或任务地点有能力执行所有任务的所有资源的完整列表。接着,解决方案集122提供了组合的总数,当试图识别多项任务至多个资源的最佳分配时将试验这些组合。表3示出了具有工序ID 0100、1200、1400和1500的四项工序的资源合适度集合的示例,其中每个工序包含了多项任务。“资源”(Resource)列为每项任务指出了当考虑任务类别“类别”(Category)和优选的任务地点“地点”(Location)时所有有能力执行该任务的资源。可能的任务资源分配组合的总数由下式表示:
2×1×1×1×3×1×2×1=12
其中,在同一工序中具有相同的捆绑参数(捆绑ID,Bundle ID)的任务被认为分配到相同的资源,如下面的表6所示。
工序ID |
任务ID |
捆绑ID |
地点 |
类别 |
资源合适度集 |
0100 |
0103 |
1 |
场点2 |
类别03 |
R1,R2 |
0100 |
0111 |
2 |
场点1 |
类别09 |
R3 |
0100 |
0109 |
2 |
场点1 |
类别09 |
R3 |
0100 |
0110 |
2 |
场点1 |
类别09 |
R3 |
1200 |
1201 |
1 |
未定义 |
类别09 |
R3,R8,R9 |
1200 |
1211 |
1 |
未定义 |
类别09 |
R3,R8,R9 |
1200 |
1222 |
1 |
未定义 |
类别09 |
R3,R8,R9 |
1400 |
1404 |
1 |
场点1 |
类别09 |
R3 |
1400 |
1413 |
1 |
场点1 |
类别09 |
R3 |
1500 |
1502 |
1 |
场点1 |
类别02 |
R3,R4 |
1500 |
1505 |
1 |
场点1 |
类别02 |
R3,R4 |
表3
例如,对每一任务来说,可基于任务类别和/或优选的地点确定执行该任务的资源列表。如果一共有m项任务(任务1至任务m),并且每项任务可被分配至ni个资源,那么组合的总数例如为
在没有捆绑限制时可使用该公式。然而在一例中,为了达到12的结果,捆绑限制已被考虑,因为工序1200和1500的任务只能被调度至同一资源,并因为它们分别是同一捆绑的部分。例如,给定示例的组合总数实际为2×1×1×1×3×3×3×1×1×2×2=216。然而,该系统可在ST5240中检查无效组合,并只考虑调度的有效选择。
在将任务调度给可用资源容量的过程中,在调度中可考虑定义至少两个时间参数:1)容量要求参数,例如,表示对于将被资源执行的任务的所需处理时间。2)时帧参数,例如,定义执行该任务所需的最小时间段。时帧参数可定义几个时帧段或时隙。该过程可至少部分在步骤ST5260中实现,在下面结合图7更详细地描述。
同样,对调度还可考虑第三时间参数。调度时间段参数可为每项任务定义执行该任务所需的调度时间块的最小数量。例如,某项任务的调度时间段参数根据分配给任务的时帧参数来确定。例如,调度时间块表示了大于时帧段(时隙)的时间段单位。例如,复杂的喷漆任务的时帧参数可定义最小数目为10的时隙,其中每个时隙表示一小时。调度时间块可被定义为工作轮班(如每班持续八小时)。相应地,调度时间段参数可被设置为表示“二班”或“2”或与该值相应的状态,因为它例如由时帧参数和调度时间块定义来确定,这样所述复杂喷漆任务至少部分延续到两个工作班。例如,该复杂喷漆任务的容量需求参数可表示为50分钟的所需处理时间。相应地,该50分钟的处理时间可分布在10个小时,例如,平均每小时内处理时间为五分钟。
一般地,调度时间段参数例如根据时帧参数按如下确定:在时帧参数中定义的时帧时间段的数量(如10小时)除以每调度时间块的时帧时间段的数量(如每班8小时、每天24小时、每小时60分中、每星期5天工作日等),并且其结果(所示例子为1.25)舍入为整数(所示例子中的2)。
进一步地,在一例中,每调度时间块的平均处理时间通过例如在容量需求参数中定义的总处理时间除以例如在调度时间段参数中定义的所需调度时间块的最小数量来确定。在所示例中,其结果为每班25分钟。该值可被分配和/或处理成平均时间桶参数(mean time bucketparameter)。在进一步的示例中,例如,还可定义时间桶差异参数,表示当调度任务时,每调度时间块中实际处理时间与平均时间桶参数的相对偏离。桶差异参数可被设置为例如50%,指出每星期实际调度的处理时间应至少为平均时间桶参数定义的值的50%,至多为该值的150%。这些值定义了最小桶处理时间和最大桶处理时间。另外,根据特定的要求,任何其他值可用作桶变化参数。
根据进一步的例子,为了使资源完成复杂的喷漆任务,资源可能需要用不同材料来为相同部分喷漆,然而为了开始喷第二层漆,资源可能需要等待一天让第一层漆变干。喷漆任务的净持续时间可为四小时,其中各有两小时的时间块分布到两个工作班中。因此,不同任务类别可需要资源的不同时间使用因素。不要求时间桶差异参数(时间使用)对所有任务都一样。定义由平均时间桶参数的值的50%的最小时间桶处理时间参数和由平均时间桶参数定义的值的150%的最大值可不必是对所有任务类别的最佳值。因此,例如,可提供最小和最大的参数,并且它们可以根据任务类型改变。当将任务分配至可用资源时,下列一项或多项可被考虑:
1)如果任务被分散至多个调度时间块,调度时间块应为连续的调度时间块,即中间没有间断。
2)最小桶处理时间将首先被分配至每个调度时间块,因而在主要块中发生。
3)一旦最小块处理时间被插入主块,则插入剩余处理时间,直到利用在增量桶处理时间参数中定义的增量达到最大桶处理时间和/或总处理时间单位完全被分配。
4)如果仍有待调度的处理时间,那么开始所谓的尾块,并且任务的分配持续期间将逐个按调度时间块地延长,直到所有剩余处理时间被分配至相应资源的可用容量。
在下列例子中,计划在16工作日内的32小时完成的任务被添加至调度。调度时间块可被定义为具有五个工作日的星期。相应地,确定调度时间段参数来定义四星期(16/5舍入成整数的结果)。平均时间桶参数定义了每周八小时,其中最小和最大的桶处理时间可分别设置为每周四小时和每周12小时。总资源容量可被确定为每周20小时。
在调度该特定任务之前,每周可用资源容量(以小时计)在各周(调度时间块STB1至STB6)的情况如下:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
10 |
10 |
表4
相应地,第一周(STB1)的可用资源容量为6小时等,如表4所示。
用于该任务的主块是四周长的块。由于该块是调度的有效块,它必须使得该算法可调度每周最少四小时的时间。如果我们由第一周(STB1)到第四周(STB4)来看可用容量,可以看出可以对相应于最小桶处理时间的每周分配4小时。主块中的分配处理时间(以小时计)的结果如下:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
4 |
4 |
4 |
4 |
|
|
图5A
在下一步骤中,分配的处理时间按0.5小时的增量桶处理时间来增加,直到达到最大桶处理时间(该例为12小时),或者可用容量被用完。这些步骤的后续迭代示出在表5B至5E中。
迭代1:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
4.5 |
4 |
4 |
4.5 |
|
|
表5B
迭代2:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
5 |
4 |
4 |
5 |
|
|
表5C
迭代3:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
5.5 |
4 |
4 |
5 |
|
|
表5D
迭代4:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
|
|
表5E
在迭代4的末尾,主块(由调度时间段参数定义,如本例中的四周)通过将处理时间分配给块内所有可用容量而完全填满。现在,任务持续时间将按星期为单位来延续,直到所有剩余处理时间被分配。
迭代5:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
4 |
|
表5F
迭代6-13:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
8 |
|
表5G
在重复13的末尾,第五周(STB5)的可用容量同样已被完全使用,并且仍然还有尚未分配的五小时处理时间。该时间被分配至迭代14至16中的第六周(STB6),如图5H至5K所示。
迭代14:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
8 |
4 |
表5H
迭代15:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
8 |
4.5 |
表5I
迭代16:
STB1 |
STB2 |
STB3 |
STB4 |
STB5 |
STB6 |
6 |
4 |
4 |
5 |
8 |
5 |
表5K
在16个迭代后,该任务的所有处理时间被分配。任务持续时间现在变成六周。这意味着给定资源的当前加载量,该任务可在六周内完成,而不是在调度时间段参数中定义的最小四周的数量。
如果在上述示例中第三周的可用容量仅为三小时,则直到第四周才有能力调度新任务,因为每有带有四小时最小容量的连续的星期。
在如上所述检验资源合适度集中的所有组合中的单个组合的同时,根据工序优先级列表和任务优先级列表随着任务的调度继续使用资源的可用容量。
优化调度的过程可包括三个工序类别:估价工序(assessmentprocess)、量工序(volume process)和其他工序。估价工序具有大于零的估价参数。量工序具有大于零的量参数,但是要么没有估价参数,要么估价参数被设置为零。其余的工序属于其他工序类型。
为不同工序组优化调度的益处不同。对估价工序来说,工序的益处通过估价参数来衡量,而量参数向组织提供由例如量参数衡量的益处。因此不同工序组的分数计算可基于这些参数。相似地,初始工序排名用样可基于这些参数。
例如,一旦其所有任务被分配至资源集合,调度算法为每个工序估算分数值。例如,分数值的计算依据上述定义的不同工序组而对每一工序有所不同。对于估价工序来说,分数值可基于内部权重参数和直到该工序完成的已耗费时间来确定。对于量工序来说,分数值可基于量参数和/内部量参数和直到该工序完成的耗费时间来确定。对于其他工序的种类来说,分数值可基于直到完成该工序的耗费时间来确定。该调度算法的一个或多个步骤或至少其方面中的一些可至少被部分在步骤ST5200中实现,如下面结合图6和7被更加详细地描述。
例如,直到工序完成的耗费时间被定义为从执行估算的当前时间直到当工序根据已建立的调度计划完成的时间点的时间间隔。
在一例中,估价工序的分数值通过内部权重参数除以用来完成该工序的计划时间点和当前时间点之间的时间间隔来计算。量工序的分数值例如通过量参数除以当前时间点和完成该工序的计划时间点之间的时间间隔来计算。对于其他工序来说,例如,分数值可作为当前时间点和用来完成工序的计划时间点之间的时间间隔的倒数来计算。
估价参数或者量参数除以耗费时间可帮助计算每单位时间提供给组织的潜在利益。这提供了一个简单却强大的指标来评价调度的最佳利益。如果基于资源任务分配,对于需花费大量时间来完成的工序,通过调度该工序来更早地完成,但是对于组织的产出的利润较少,那么这不是最优的资源分配集合。然而,最后对于整个解决方案集,即根据在调度集中给定的资源分配,对于所有工序的调度的总体利益来说,可能会更加有利。因此,所有工序的分数的和同其他资源-任务分配集合的结果分数进行比较。
在以上结合表3的例子中,解决方案集122有基于所定义的任务参数和资源配置文件的12个可能的资源-任务分配集合。表6A显示了所有能发生的可能的资源-任务分配集合(Opt 1至Opt 12)。多个资源-任务分配集合,如所有可能的资源-任务分配集合一起形成解决方案集122,例如表6A所示。
工序ID |
任务ID |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt 7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
0100 |
0103 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
0100 |
0111 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
0100 |
0109 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
0100 |
0110 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
1200 |
1201 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
1200 |
1211 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
1200 |
1222 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
1400 |
1404 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
1400 |
1413 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
1500 |
1502 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
1500 |
1505 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
表6A
对于每个资源-任务分配集合中的各工序来说,估算调度参数,例如,调度参数基于估算调度参数时的当前时间和根据已建立的资源-任务分配集合(Opt1至Opt12)即根据该资源-任务分配集合内调度调度的各工序计划完成时间点之间的时间间隔。在一实施例中调度参数表示所述时间间隔。时间间隔可按月、星期、天、小时、分钟、秒或其他合适的时间单位。
表6B示出了基于表6A所示的解决方案集的示例,其中每个资源-任务分配集(Opt1、Opt2、……Opt12)中为每项工序在表6B中指示的值可代表时间点,根据相应资源-任务分配集合中的调度,在该点相应工序计划完成。在该例中,该时间点按日期给定。例如,在第一资源-任务分配集(Opt1)中工序0100被调度在二月十六日(16-Feb)完成,而工序1500被调度在三月五日完成。在给定示例中,当前时间被认为是二月六日。相应地,某资源-任务分配集合(Opt1、……Opt12)中的某工序(0100、1200、1400、1500)的调度参数可估算为当前日期(2月16日)和已知资源-任务分配集合中的已知工序的调度完成日期之间的天数。如表6A所示,第一资源-任务分配集Opt1的工序0100的调度参数为10天,或值“10”或与之相符的任何值。
工序ID |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt 7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
0100 |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
1200 |
22-Feb |
20-Feb |
22-Feb |
20-Feb |
14-Feb |
10-Feb |
14-Feb |
10-Feb |
17-Feb |
15-Feb |
17-Feb |
15-Feb |
1400 |
27-Feb |
24-Feb |
27-Feb |
24-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
1500 |
06-Mar |
03-Mar |
14-Feb |
14-Feb |
27-Feb |
24-Feb |
14-Feb |
14-Feb |
27-Feb |
24-Feb |
14-Feb |
14-Feb |
表6B
进一步地,在另一例中,分数值可由如下更详细描述的对每个工序确定。例如,分数值可由通过对每个工序用该工序的权重参数除以为相应资源分配建立的调度参数来确定。表6C示出了基于由以上结合表6B描述的例子检索的调度参数对多项任务和多个资源-任务分配集合建立的该分数值的示例。对于每个工序(0100、1200、1400、1500)来说,表6C示出了权重参数和多个分数值,其中每个权重参数和分数值基于分配给工序的权重参数和用于特定资源-任务分配集合的调度参数而确定。例如,工序0100的权重参数具有值“10000”。利用在第一资源-任务分配集合Opt1中为该工序定义的工序参数“10”,其分数值的结果为10000/10=1000,如表6C所示。
进一步地,对于每一资源分配来说,可通过将每一资源-任务分配集合中所有工序的分数值相加来确定控制参数,并且选择具有最大控制参数的资源-任务分配集。如表8所示,第一资源-任务分配集合Opt1的控制参数为“1068”。基于这些控制参数,具有最大控制参数“1689”的资源-任务分配集合可在所有已建立的资源-任务分配集合中被选择,所有已建立的资源-任务分配集合共同组成解决方案集。在一实施例中,对于每一不同工序组来说,单独的控制参数可被确定。
工序ID |
权重参数 |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt 7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
0100 |
10000 |
1000 |
1429 |
1000 |
1429 |
1000 |
1429 |
1000 |
1429 |
1000 |
1429 |
1000 |
1429 |
1200 |
1000 |
62.5 |
71.4 |
62.5 |
71.4 |
125 |
250 |
125 |
250 |
90.9 |
111.1 |
90.9 |
111.1 |
1400 |
100 |
4.76 |
5.56 |
4.76 |
5.56 |
7.14 |
9.09 |
7.14 |
9.09 |
7.14 |
9.09 |
7.14 |
9.09 |
1500 |
10 |
0.36 |
0.4 |
1.25 |
1.25 |
0.48 |
0.56 |
1.25 |
1.25 |
0.48 |
0.56 |
1.25 |
1.25 |
控制参数 |
1068 |
1506 |
1069 |
1507 |
1133 |
1688 |
1133 |
1689 |
1099 |
1549 |
1099 |
1550 |
表6C
例如,调度的优化包括三个主要的优化阶段,每个主要优化阶段包括三个次要阶段。每个主要优化阶段例如可优化都具有相同工序状态参数的某工序的集合。例如,通过调度具有表示“处理中(In-Process)”的状态的工序来开始调度,并以例如,利用“稳定(Firm)”工序继续。最后,具有“早开始(Early-Start)”、“已调度(Scheduled)”和“未调度Unscheduled”状态的工序被优化。这三个主要阶段的实施例结合图5在下面以步骤ST5000、ST6000和ST7000来描述。
基于工序组的三个次要阶段在每个主要阶段中被优化。例如,每个主要阶段工序在三个次要阶段中根据该工序的权重参数和/或估价参数被优化。三个主要优化阶段和三个次要阶段按其运行的优先级顺序来列举如下。例如,在下一个主要优化阶段运行之前,该主要优化阶段中的所有次要阶段运行。例如,在下一个主要优化阶段(即所有“稳定(Firm)”工序)被运行前,对估价工序、量工序和其他工序调度所有带有“处理中(In-Process)”状态的工序。
例如,在优化阶段开始前,下列工序和/或任务列表为相应主要优化阶段而建立:
1)处理中工序列表(用于第一主要优化阶段)可定义和/或列举:
a)“处理中”状态的估价工序;
b)“处理中”状态的量工序;
c)“处理中”状态的其他工序;
2)稳定工序列表(用于第二主要优化阶段)可定义和/或列举:
a)“稳定”状态的估价工序;
b)“稳定”状态的量工序;
c)“稳定”状态的其他工序;
3)阶段III工程列表(用于第三主要优化阶段)可定义和/或列表:
a)处于“早开始Early Start”、“已调度Scheduled”、“未调度Unscheduled”状态的估价工序;
b)处于“早开始Early Start”、“已调度Scheduled”、“未调度Unscheduled”状态的量工序;
c)处于“早开始Early Start”、“已调度Scheduled”、“未调度Unscheduled”状态的其他工序。
在第一主要优化阶段期间,“处理中(In-Process)”的工序被调度。由于这些工序还未开始,调度算法试图首先对它们调度,以确保该过程执行的连续性。例如,该优化阶段不试图找到最佳“资源-任务分配”组合,即最佳资源-任务集合,但是,例如,该优化阶段可使用先前资源-任务分配集合来向资源调度添加任务。例如,以下步骤可对所有工序组(估价工序、量工序、和其他工序)执行:
1)检索例如为该阶段提取的如上所列的任务列表;
2)在保持任务-资源分配的同时向资源调度任务;
3)检查分配状态;
4)执行后调度清算以终结任务和工序状态;
5)将分配同先前优化结果合并;
6)把资源调度从解决方案集复制回主调度;
7)添加不可分配至未分配任务全局列表的任务。
如果工序和其任务释放其调度状态(如“处理中(In-Process)”、“稳定(Firm)”、“早开始(Early-Start)”或“已调度(Scheduled)”),由于工序中某任务无法被调度,例如,所有该工序的分配可从该资源-任务分配集合删除。其结果是资源-任务分配集合的“平衡”被改变,因为在这些任务被调度并接着被删除之后,可能会存在一些其他添加到资源调度的任务。如果调度算法仅仅从资源的调度中删除分配,这会造成资源调度中的裂缝,因而降低了资源的利用率。因而,只要一些任务由于同一工序中的一些其他任务无法被调度而去分配(de-assign),优化可以重新运行,直到例如没有更多必须的去分配。
相应地,首先要进入调度的工序是带有“处理中(In-Progress)”状态的工序,因为它们已经开始;调度算法试图首先调度它们以确保工程的持续性。第一主要优化阶段例如将任务插入资源的调度,该资源已被分配,并正在任务上工作。由于工序在处理中,调度引擎不改变任何处理中工序的分配,这包括工程中所有处理中的但是还没开始的任务(即“处理中”工序的带有“稳定”状态的任务)。
在如下,第二主要优化阶段根据示例更细致的进行描述。例如,第二主要优化阶段优化“稳定”工序。例如,将任务向资源的分配仍未对这些工序固定,这意味着它们将被重新优化。由于工序状态是“稳定”,工序将总是保持该状态,即使工序落在“稳定”区域之外,该区域是调度运行后给定的时间段,可在稳定持续时间段参数中定义。由于处理中工序引起的工作负载,重新优化这些工序的任务-资源分配是有益的,分配至稳定工序的先前资源集合可能在此时不能开始工作在“稳定”工序上。在这种情况中,值得试验一些新的组合来看是否有可更早传递稳定工序的资源-任务组合。
例如,以下步骤为所有工序组(估价工序,量工序和其他工序)执行:
1)检索例如为该阶段提取的如上所列的任务列表;
2)将任务调度至资源来试验所有的任务资源分配组合,即所有资源-任务分配集合;
3)检查分配状态;
4)执行后调度清算来终结任务和工序状态;
5)将分配同先前优化结果合并;
6)从解决方案集将资源调度复制回主调度;
7)添加不可分配至未分配任务全局列表的任务。
在调度具有“稳定”状态的工序的时候,所有工序中的任务被重新优化并可被分配新的资源组合,如果其提供基于可用资源容量更优的解决方案。一旦工序具有“稳定”的状态,其将继续保持该状态,不管该工序未来在何处调度。
在如下,第三主要优化阶段,根据一例,更细致地被描述。例如,第三主要优化阶段优化其余的工序,这些工序具有例如“早开始”、“已调度”和/或“未调度”的状态。如工序具有“早开始”状态,这意味着工序中的一个或多个任务在预期时间前已开始,该时间并不早于“稳定”时段的终止时间。具有“已调度”状态的工序例如在先前调度执行中被实际地调度。然而,它们并未期望在稳定时间段内开始。“未调度”工序一般为新建立的工序。由于它们在其他工序中是最新的工序,它们将被作为最后与例如“早开始”和“已调度”工序一起调度。
例如,如下步骤为所有工序组(估价工序、量工序和其他工序)执行:
1)检索例如为该阶段提取的如上所列的任务列表;
2)将任务调度至资源来试验所有的任务资源分配组合,即所有资源-任务分配集合;
3)检查分配状态;
4)执行后调度清算来终结任务和工序状态;
5)将分配同先前优化结果合并;
6)从解决方案集将资源调度复制回主调度;
7)添加不可分配至未分配任务全局列表的任务。
在次要优化阶段(或次要调度阶段)期间,在这三个主要优化阶段(或主要调度阶段)中每个阶段中把优先级给予按以下排序的工序:
1)估价工序(Sub-Phase a)--代表主要调度阶段中所有的权重参数大于零的工序。
2)量工序(Sub-Phase b)--表示主要调度阶段中所有的权重参数等于零且量参数大于零的工序。
3)其他工序(Sub-Phase c)--表示主要调度阶段中所有的权重参数等于零且量参数等于零的工序。
后调度清算步骤可包括在任务由调度删除后的重优化调度。该步骤可包括对“未调度”工序进行重优化调度。例如,后调度清算的步骤被包含在优化该调度的步骤中。如果工序中的单独任务不能调度至资源,作为调度规定,同一工序中其他任务的分配可变为无效。如果工序中的任务不可被调度,整个工序不可完成。后调度清算的步骤可至少部分在步骤ST5500和/或ST5600中实现,这两个步骤如下结合图6更加细致的进行描述。
例如,在下述情况下,任务不会被分配至资源:如果优选的地点没有可用资源,其具有所需可用资源容量;和/或如果优选地点无可用资源,其根据任务类别具有所需的用来执行该任务的能力;和/或如果所有合适资源的调度在某提前计划时间中已占用。
如果工序和其任务释放其调度的状态(如“处理中”、“稳定”、“早开始”或“已调度”),鉴于工序中任务无法被分配,所有为该工序的分配可被从例如解决方案集中删除。这样,解决方案集的“平衡”被改变,因为在这些后来被删除的任务已被调度之后的添加至资源的调度的其他任务。如果调度算法仅仅将分配从资源的调度中删除,这造成资源的调度中的空缺,并且因而降低资源的利用率。因而,只要一些任务由于同一工序中的其他任务而去分配,优化可重新执行,直到例如没有更多必要的去分配。
图5示出了用来将工序分配到资源的另一例的流程图。该方法可包括以下一个或多个步骤:用来判定完成的任务和工序的步骤ST1000,和/或用来建立优先顺序化的工序和任务列表的步骤ST2000;和/或用来反映任务实际时间的步骤ST3000,和/或用来处理“保持”任务并向其报告实际时间的步骤ST4000,和/或调度“处理中”工序(阶段I)的步骤ST5000;和/或调度“稳定”工序(阶段II)的步骤ST6000,和/或调度“未调度”、“已调度”和“早开始”工序(阶段III)的步骤ST7000;和/或将选择的资源-任务分配集合保存在数据库,如数据库100或110的步骤ST8000,和/或显示结果的步骤ST9000。
该方法的实现无需依照上述所列的顺序。
在用来确定活动工序列表中的每一工序的完成的任务和工序的步骤ST1000期间,检查下面的任务并判定是否有任何任务被标记成已完成。如果发现任务已完成,其状态被设置为“已完成”的值,或与之相应的值。
建立优先顺序化工序和任务列表的步骤ST2000可包含建立和/或检索工序和任务的优先级列表的步骤,如以上结合图4A和4B以及结合例如表2A、2B、和2C描述的那样。
在反映任务实际时间的步骤ST3000中,如上描述的任务报告数据可由如上描述的那样被接收和/或处理。
在处理“保持”任务和向其反映报告实际时间的步骤ST4000期间,分析具有“保持”状态的任务。如果已被设置为“保持”的任务的重新开始参数被设置为“不定”状态,这意味着该任务不可被重新开始,并将会继续具有相同的状态。对于保持任务(该任务没有大于或等于调度时间开始参数的重新开始参数)来说,这些任务的请求开始参数将被设置为重新开始时间参数,并且它们同其设置为保持状态前的状态参数一起包含在调度中。由调度算法处理的保持任务将继续以“保持”的方式出现,虽然它们包括在调度中,并已分配至资源。对被置于保持状态的任务,资源有可能已启动该任务并在其上工作,因此,任务的剩余时间可能需要通过考虑在被置于保持状态之前的任务实际时间来调整。
调度“处理中”工序(阶段I)的步骤ST5000、调度“稳定”工序(阶段II)的步骤ST6000,和调度“未调度”、“已调度”和“早开始”(阶段III)工序的步骤ST7000中,每个步骤根据如上描述调度的优化,分别对应于三个主要优化阶段之一。
调度“处理中”工序的步骤ST5000可包括一个或多个如下步骤:
用来为工序和任务建立和/或检索的步骤,如为即将作为当前调度部分处理的工序和任务,如上详细描述的那样;以及/或者识别资源合适度集合的步骤,如上详细描述的那样;以及/或者将任务调度至可用资源容量的步骤,如上详细描述的那样;以及/或者优化调度的步骤,如上详细描述的那样;以及/或者用来更新工序状态参数和/或任务状态参数的步骤,如上详细描述的那样。
图6示出了调度图5的“处理中”工序的实施例的流程图。参照图6,调度“处理中”工序的步骤ST5000可另外包含一个或多个以下步骤:用来为当前阶段检索工序和任务列表的步骤ST5100;和/或将任务调度至资源的步骤ST5200;和/或检查分配状态的步骤ST5300;和/或终止任务和工序状态的步骤ST5400;和/或后调度清算的步骤ST5600;和/或将分配添加至主调度解决方案集的步骤ST5700;和/或添加不能在未调度任务的共同列表中调度的任务的步骤ST5800。
该方法的实现无需依照上述列举的顺序。
在为当前阶段检索工序和任务列表的步骤ST5100期间,所有将在当前阶段中被调度的工序将从数据库中检索。跟随这些工序,其任务根据包含工序优先级排名将从数据库中检索,并插入任务优先级列表。
将任务调度到资源的步骤ST5200可根据结合上表6A-6C描述的那样被实现。
在检验分配状态的步骤ST5300期间,根据其调度开始时间检查其任务状态。在一实施例中,任务状态参数由上述那样被确定。对于每个工序来说,工序状态参数基于包括在工序中的任务的任务状态参数(Task_Status)被更新,如以上详细描述的那样。
在终结任务和工序状态的步骤ST5400期间,基于任务分配确定工序状态。
后调度清算的步骤ST5600可包括确定未调度任务是否仍然存在以及是否将未调度任务从任务列表中删除的步骤ST5500。后调度清算的步骤ST5600包括描述的后调度清算步骤。
将分配添加至主调度解决方案集的步骤ST5700包括添加终结任务分配的步骤,例如已终结的资源-任务分配集合,为了将当前阶段分配至包括所有阶段的任务分配的主调度解决方案集,即资源-任务分配集。
在显示结果的步骤ST9000中,调度算法的结果连同显示优化的整体效益的指标将显示给用户。另外,每项任务的资源分配、工序交付日期和例如为每项任务已按小时、天或星期计算的分配计划都可以向用户显示。
图7示出了图6中将任务调度至资源的工序的实施例的流程图。参照图7,将任务调度至资源的步骤ST5200可包括一个或多个下列步骤:识别资源合适度集合的步骤ST5210;和/或确定解决方案集的步骤ST5220,其中解决任务集可包括多个资源-任务分配集合,如所有对于识别的资源的合适度集合可能的所有不同资源-任务分配集合;和/或在解决方案集中选择第一资源-任务分配集合作为当前资源-任务分配集合的步骤ST5230;和/或在解决方案集合中选择下一个资源-任务分配集合作为当前资源-任务分配集合的步骤ST5231;和/或使当前资源-任务分配集合生效的步骤ST5240;和/或阶段当前资源-任务分配集合是否为解决方案集中最后一个资源-任务分配集合的步骤ST5245;和/或在当前资源-任务分配集合中选择第一任务-资源分配作为当前的任务-资源分配的步骤ST5250;和/或在当前资源-任务分配集合中选择下一个任务-资源分配作为当前任务-资源分配;和/或依据当前任务-资源分配将任务调度至资源的步骤ST5260;和/或在当前任务-资源分配中定义的任务是否是工序中最后的任务的步骤ST5265;和/或为工序估算分数值并且将所述分数值添加至当前资源-任务分配集合的步骤ST5270;和/或确定当前任务-资源分配在当前资源-任务分配集合中是否为最后的任务-资源分配的步骤ST5275;和/或确定当前资源-任务分配集合的控制参数是否大于所存储的最大控制参数的步骤ST5280;将当前资源-任务分配集合存储为最佳资源-任务分配集合,并且将当前资源-任务分配集合的控制参数存储为资源-任务分配集合中的最大控制参数的步骤ST5290。
在确定资源合适度集的步骤ST5210中,对每一任务确定合适资源集合。确定资源合适度集的步骤ST5210可如上参考例如表3实现。
在解决方案集中选择下一个资源-任务分配集合作为当前资源-任务分配集合的步骤ST5231可被执行,如果当前资源-任务分配集合在步骤ST5245被确定为不是最后的资源-任务分配集合。
在步骤ST5240中,当前资源-任务分配集合根据捆绑限制被生效。资源-任务分配集合中一些捆绑任务的分配可能已经被确定,因为该任务具有“处理中”状态。因而,其他属于相同捆绑的任务可被分配至相同资源。步骤ST5240确定由算法生成的组合是否与该捆绑限制相符。如果资源-任务分配集合在步骤ST5240中被确定无效,该方法优选进至步骤ST5245,如图6所示。否则,即如果当前资源-任务分配集合被确定依照捆绑限制为有效的,该方法进至步骤ST5250,该步骤选择当前资源-任务分配集合中的第一任务-资源分配。
在当前资源-任务分配集合中选择下一个任务-资源分配作为当前的任务-资源分配的步骤ST5251可被执行,如果在步骤ST5257判定当前的任务-资源分配不是当前资源-任务分配集合中的最后任务-资源分配。
根据图7的调度任务至资源的步骤ST5260可包括调度任务至可用资源容量的步骤,如上参照表4、5描述的那样。
为工序估算分数值以及将已知分数值添加至当前资源-任务分配集合的步骤ST5270可被执行,如果在步骤ST5265判定当前任务-资源分配集合中定义的任务是该任务所属工序中的最后任务。如果在步骤ST5265中,判定当前任务-资源分配中定义的任务不是所述任务所属工序中的最后任务,那么该处理进至步骤ST5275,该步骤确定在当前资源-任务分配集合中当前任务-资源分配是否为最后的任务-资源分配。如果当前任务-资源分配在当前资源-任务分配集合中是最后的任务-资源分配,该处理进至步骤ST5280,该步骤确定当前资源-任务分配集合的控制参数是否大于所存储的最大控制参数。如果是,那么该方法进至步骤ST5290。否则,即在步骤ST5280中判定当前资源-任务分配集合的控制参数不大于所存储的最大控制参数的情况下,该方法进至步骤ST5245,如图7所示。
调度“稳定”工序(阶段II)的步骤ST6000和调度“未调度”、“已调度”和“早开始”工序(阶段III)的步骤ST7000可按类似于调度“处理中”工序(阶段I)的步骤ST5000来执行,即结合图5-7更加详细描述的步骤也可应用于步骤ST6000和ST7000。
工作分配模型也可应用于其他领域以及建模其他类型的工作,如商业服务等。通过示例,该工作分配模型在服务业的应用,以及特别参考图8~12来描述用于为采购服务(procurement service)的分配工作需求。在该例中,被组织的工序由工程来表示,每项工程覆盖了客户的工作需求。每项工程都属于某种类别,如“信息技术”(IT)、“旅游”、“设施和服务”或“专业服务”。在一例中,通过有益地将客户的工作需求分配至可用的采购资源容量来使客户的总节省最大化。在该例中,该分配至每项工程的工序量参数可由估计基线耗费(Estimate Baseline Spend)表示。每项工程的效率参数可从用户或数据库接收,作为节省估计潜能(Savings Estimate Potential)的节省估计百分数(Savings Estimate Percentage),该节省估计潜能可依赖于工程类别和估计节省水平,如“低”、“中”或“高”,如下所述。基于估计基线耗费和节省估计潜能,确定节省估计值,其代表上述的估价参数。(内部)权重参数保存了下述的调整节省(Adjusted Savings),并且用于每项工程的商业关键(Business Criticality)存储在关键参数中。
图8A示出了应用于服务业环境中的示例工作分配模型的流程图,用于对采购服务分配工作请求。示例工作分配过程包括四个主要步骤:管理采购要求处理200、管理资源容量处理210、优化工作分配处理220,和管理工程交付处理230。
管理采购要求处理200包括了捕获工作请求和工程启动处理202和审查并优先级工程处理204。管理采购要求处理200主要用于捕获工作请求,并设置和优先顺序化工程要求。活动包括接收源工作请求并确定该请求是否需要大于一个的确定时间来完成。在一例中,确定时间为4小时。小于4小时的请求按先来先去(first in first out)的方式完成,其中资源具有可用的非调度容量来完成稿请求。需要大于4小时完成的请求被输入工作分配模型,并建立新工程来满足该工作请求。
管理资源容量处理210包括更新资源配置文件处理212和更新资源容量处理214。管理资源容量处理210主要用于确定和管理资源容量和可用资源容量来满足采购要求。活动包括审查周期性状态报告、审查资源容量报告和为团队资源更新资源配置文件。
优化工作分配处理220包括建立预备调度处理222、工作分配会议(meeting)处理224、细化调度处理226和建立最终调度处理228。优化工作分配处理220基于工程优先级列表主要用于分配资源容量至具有最高潜在利益的工作请求。活动包括基于初始工程优先级列表生成预备工程调度;进行工作分配会议来审查工程调度以及调整工程优先级或工程设置来解决调度工程延迟;和细化工程优先级列表以及基于达成协议的结果或工作分配会议的工程建立参数,并且生成最终工程。
管理工程交付处理230包括交流工作分配处理232、跟踪现状处理234,和审查执行处理236。管理工程交付处理230主要用于有效地交流工作分配至资源,以及跟踪并管理工作交付。活动包括生成报告来与最终资源分配和会议交流,以及发布至所有会议参加者;交流资源分配至团队成员并突出对于调度的任何关键改变;相对资源调度执行的资源并记录其实际时间以及在每周末完成任务的估计时间;和生成KPI报告来审查团队性能,并且识别潜在的改进领域。
图8B是示出示例工作分配模型的相关功能的实体关系图。在工作分配处理中使用的示例工作分配模型包括5个主要功能域:需求管理300、资源管理310、工程调度320、工程状态进入330,和报告340。
需求管理300主要用于捕获客户工作请求;设置并规划工程来满足客户要求;将客户要求分类以确保调度至可用资源;基于工程节省潜能优先顺序化各工程和基于整体商业要求调整工程优先级;查看工程设置和优先级。
资源管理310主要用于资源技能配置文件、类别经验和地点的分类来将可用资源与工程任务匹配;定义调度工程可用的每周资源容量;通过工作地点输入计划中的资源休假和公共假期;查看资源配置文件。
工程调度320主要用于调度任务需求至可用容量;显示调度工程开始和终止时间;按任务和时间段显示资源分配。
工程状态进入330主要用于捕获资源为完成调度任务所耗用的时间、估计工作时间和为资源完成将来任务的估计耗费工作日的时间;按活动种类由资源在非调度工作中花费的时间;提供资源查看历史状态条目。
报告340向用户提供灵活便利的使用工具,用来报告由工作分配模型生成的信息。报告以清晰易懂的格式表现信息,并提供基于选择报告过虑标准有效支持处理所需的信息。
每个功能域将在下文中详细讨论。
在一例中,需求管理300包括捕获客户工作请求的功能,捕获工作请求的清楚描述;工作请求的范围;请求该工作请求者的姓名和详细联系方式;工程完成所需的语言;客户的需求关键;客户要求的工程起迄日期;和与要求相关的耗费类别和初始耗费估计。
需求管理300也可包括生成初始工程节省估计的功能,该功能提供初始节省估计,基于可被达到的节省的估计水平(高、中、低)表示每项工程的估价参数。该初始节省估计只用于确定工程初始优先级以初始调度工程,而不表示实际节省。初始节省被计算为‘初始估计耗费’ב节省估计%’,其中‘节省估计%’基于选择‘估计节省水平’和选择的‘类别种类’,如下表7所示。估计节省水平基于一套定义的标准而被定义为‘低’、‘中’、‘高’。
|
节省估计% |
类别 |
低 |
中 |
高 |
信息技术 |
5% |
7% |
9% |
旅游 |
8% |
12% |
14% |
设施与服务 |
5% |
10% |
15% |
专业服务 |
5% |
10% |
15% |
表7
例如,为具有以下分配参数的工程确定初始节省估计:
初始耗费估计=$1,000,000至$5,000,000;
耗费类别=′IT′;
估计节省水平=′High′
计算如下:
初始耗费估计=($5,000,000+$1,000,000)/2=$3,000,000
节省估计潜力=9%对′IT′类具有“高”估计节省水平
初始节省估计=$3,000,000×9%=$270,000
相应地,表7所示的工程的估价参数为$270,000。
需求管理300也可包括定义工程水平参数的功能来定义工程和工程主的主要地点。例如,如果工作请求在德国被提出,并且调度工程需要用德国和不拉迪斯拉发(Bratislava)的资源完成,则其主要地点为德国。在一例中,当调度工程作为在调度算法中使用的地点维度被定义为在任务级允许工程跨多个地点分割和调度时,主要工程地点没有被使用。
工程主是对工程总体交付责任的人。在一例中,工程主字段在调度工程时没被使用,这意味着工程主不是必然被调度该工程,如果其不是最佳资源分配。虽然工程主可能没有被调度该工程,但是它们有责任监督工程的整体交付,并通常是团队中较为老练的成员,如团队领导。
需求管理300也可包括选择工程任务和标准估计的功能。这包括选择为完成该工程而需要的一系列任务。所有任务应从标准任务列表选择,每项任务具有标准处理时间,该时间表示按绝对小时计的完成任务的估计时间,作为该任务的容量需求参数来存储,每项任务还具有标准耗费时间,该时间表示以星期计的为完成任务的估计总体耗费时间,基于所选择任务的复杂度,例如低、中、高。该标准耗费时间作为任务的时帧参数被存储。
标准处理时间和标准耗费时间可根据用来完成具有不同级别复杂程度的各种任务的历史数据推导出来。这些标准估计接着被用于在将来调度工程,并对工程中所有任务以及整体工程建立调度起迄日期。分配至任务的资源应主要用于在分配的时间内完成所有任务以避免交付工程时出现延误,以及避免交付已调度至该资源的将来任务的延误。
通过示例,下表8所列任务的标准处理时间和标准耗费时间根据任务复杂程度来确定。任务复杂程度可通过任务量参数表示。
ID |
任务 |
复杂度 |
1 |
采集和分析数据 |
中 |
4 |
指导产业分析 |
高 |
6 |
开发类别策略 |
高 |
表8
表9为基于任务复杂程度的用来确定标准处理时间和标准耗费时间的示例任务估计矩阵。
|
低复杂度 |
中复杂度 |
高复杂度 |
ID |
任务 |
处理(时) |
已过时间(周) |
处理(时) |
已过时间(周) |
处理(时) |
已过时间(周) |
1 |
采集并分析数据 |
20 |
1 |
60 |
3 |
100 |
5 |
2 |
分段购买 |
10 |
1 |
15 |
2 |
20 |
3 |
3 |
验证和归档类别 |
5 |
1 |
10 |
1 |
15 |
2 |
4 |
指导产业分析 |
20 |
1 |
30 |
1 |
40 |
2 |
5 |
建立TCO模型 |
20 |
1 |
60 |
3 |
100 |
5 |
6 |
开发类别策略 |
10 |
1 |
15 |
2 |
20 |
3 |
7 |
建立、分发和协调厂商RFI |
5 |
1 |
10 |
1 |
15 |
2 |
8 |
分析RFI结果并建立供应商长清单 |
4 |
1 |
8 |
1 |
12 |
2 |
9 |
建立、分发和协调厂商RFx |
20 |
1 |
60 |
3 |
100 |
5 |
10 |
分析RFx结果并建立供应商短清单 |
10 |
1 |
15 |
2 |
20 |
3 |
表9
基于以上矩阵,每项任务的标准处理时间和标准耗费时间在下表10中示出。
任务 |
处理(时) |
已过时间(周) |
采集和分析数据 |
60 |
3 |
指导产业分析 |
40 |
2 |
开发类别策略 |
20 |
3 |
表10
需求管理300也可包括设置任务参数的功能。每项任务可具有选择的其中应该完成该任务的优选地点,以及作为类别经验是否为完成任务而需要的指示。定义如何需要按任务集、地点、类别经验定义工程,使其可与根据所选择地点、具有必要技能简档和类别经验的可用资源相匹配。如果资源配置文件对于执行该任务的实体不可用,可认为存在不定量容量在实体以完成任务。这使得应由该实体完成的任务作为整个工程的部分被调度,并且对于已调度的起迄日期和任务依赖性传送给该实体。
需求管理300也可包括强制资源分配功能,该功能用与将特定资源手动分配给特定任务。该功能可用于例外情况,其中特定资源必须完成某任务,因为手动强制将资源分配至特定任务将通过减少任务资源组合的潜在数量来减少调度算法的优化潜能。
需求管理300也可包括建立任务依赖性的功能来允许设置单个工程中任务之间的依赖性,这样任务可结合工程中的其他任务被调度。任务依赖性存在于一个或多个任务之间,并且所有依赖的任务在所有前驱任务调度的结束日期之后才可被调度开始。
需求管理300也可包括建立单一工程中的捆绑任务组的功能,这样捆绑组中所有任务被分配至单个资源。该功能的意图是建立可分配至单个资源的任务的逻辑编组。例如,包含7项任务的工程可具有由位于国外的单个资源完成的三项任务以及4项可由国内单个资源完成的任务。将任务捆绑成两组并相应地定义任务参数将使得工程可跨两地两种资源来分割。任务捆绑失败的例子是7项任务被分配到7个不同资源,显然这不是可行的解决方案。当最初建立带有多项任务的工程,默认配置是对于所有被建立的任务都在单个捆绑中。这确保这种默认值应用于将由单个资源完成的工程中的所有任务。
需求管理300也可包括将资源从任务去分配(de-assign)的功能,该功能可将已分配资源从任务删除,因为被分配的资源时常不可或不能完成任务。例如,如果资源当前正在工程中执行,并且请求更高级的优先级工程,该过程需要特定资源技能来完成,则应该选择从当前任务去分配资源,这样就有可用容量来完成更高级优先级工程。另一种选择可将当前是“处理中”状态的任务置于带有位将来某时间设置的重新开始日期的“保持”状态,这样资源容量被释放用于更高优先级的工程。
需求管理300也可包括取消任务或工程的功能。如果工程中或整个工程中的任务将不被完成,取消功能使得用户可取消该任务或整个工程。在取消工程中的任务时,检查该任务是否为工程中依赖性的部分。如果任务为依赖性的部分,在取消任务之前,用户需首先删除工程依赖性。另外,如果工程或任务当前在处理中,警告提示将出现来告知用户其试图撤消的任务或处理已在处理中。
需求管理300也可包括将任务或工程置于“保持”状态的功能。该功能将工程中的任务或整个工程置于保持状态。任务或工程可被置于保持状态,如果外部因素限制了工程或任务的进一步处理,或为了释放分配至该任务的资源容量以用于带有更高优先级的工程。用户可将任务或工程设置为保持状态,或不定时地,或直到将来特定任务或工程可在将来被重新开始的时间点。当将任务或工程至于不定时保持状态时,任务或工程将不会被调度考虑,直到特定重新开始日期被设置。一旦团队重新开始日期为将来设置,任务或工程将接着被重新调度以在特定日期开始,维持“保持”状态直到工程调度要开始的星期。
需求管理300也可包括建立“就绪待调度”的工程的功能,这样一旦在用户已经指示工程“就绪待调度”时,只为该调度考虑工程。在该点之前,工程保持“新请求”状态,这可使资源继续在一定时间段内设置工程。当将工程设置为“就绪待调度”的状态时,系统应检查用来设置工程的参数的有效性,以确保工程具有至少一个有效调度解决方案,例如工程中的所有任务/任务捆绑必须具有至少一个有效资源组合来匹配地点、任务配置文件和要求完成任务的类别经验。如果有效组合不存在,处理不能建立“就绪待调度”的状态。用户必须通过调整用户配置文件来匹配工程要求,或调整在工程中使用的参数来匹配可用资源的配置文件来提出资源限制。
需求管理300也可包括优先顺序化各工程的功能。工程可首先根据“初始节省估计”来优先顺序化,接着基于“初始耗费估计”,接着基于“商业关键”来优先顺序化。虽然该标准可首先用于优先顺序化工程,用户也可根据工程监控的反馈来重新优先顺序化工程。例如,如果存在带有零耗费零节省的工程,那么其初始优先级排序与其他具有节省和耗费的工程相比将会变低。然而,工程对于用户的操作可以是关键的。客户接着将根据选择来重新优先顺序化与所有其他工程相关的工程,该工程或在处理中,或处于工程流水线中。在优先级列表中将一个工程移到另一工程之上,意味着该工程更重要,并且当在基于该工程状态的相同调度优先级阶段中调度时,该工程应在低排名工程之前被调度至可用容量。
可实现以下示例性规则,使得工程的有效优先顺序化和重新优先顺序化:
1)对于将被重新优先顺序化的工程,建立称作“调整节省”的附加字段。该值表示工程所感知到的值。例如,如果“初始节省估计”值为$0的工程被重新优先顺序化于“初始节省估计”值为$100的工程之前,那么零节省工程被感知具有至少$100的值,因为这为其替换的工程的节省潜能。
2)在任何手动优先级调整完成前,将首先设置所有新工程等于调整节省估计值的初始估计节省。
3)工程将按调整节省排序。接着按初始耗费估计排序,接着按商业关键排序。
4)如果优先级排名低于5的工程被调整为优先级排名5,调整节省字段应被设置为等于已经被移至下部的工程5的调整节省值,所有优先级值低于5的工程被分配优先级列表中直接处于其下的工程的调整节省工程。
5)对N项工程的集合由1至N基于调整节省的、初始耗费估计和商业关键的排序次序来顺序分配优先级排名字段。
6)任何新建立的工程将具有等于初始估计节省的调整节省,并且应该基于调整节省、初始耗费估计和商业关键被插入N项工程的完整集合。
7)调整节省字段只用来对工程排名,并不应向用户显示。
例如,10项工程的初始集合基于初始节省估计、然后基于初始耗费、商业关键被建立并排序,如下图11所示。
优先级排名 |
工程号 |
调整节省 |
初始节省估计 |
初始耗费估计 |
商业关键 |
1 |
100 |
$1,000,000 |
$1,000,000 |
$25,000,000 |
1 |
2 |
200 |
$800,000 |
$800,000 |
$20,000,000 |
2 |
3 |
300 |
$500,000 |
$500,000 |
$15,000,000 |
1 |
4 |
400 |
$500,000 |
$500,000 |
$10,000,000 |
3 |
5 |
500 |
$300,000 |
$300,000 |
$12,000,000 |
2 |
6 |
600 |
$200,000 |
$200,000 |
$10,000,000 |
1 |
7 |
700 |
$200,000 |
$200,000 |
$7,000,000 |
3 |
8 |
800 |
$0 |
$0 |
$17,000,000 |
2 |
9 |
900 |
$0 |
$0 |
$12,000,000 |
1 |
10 |
1000 |
$0 |
$0 |
$12,000,000 |
3 |
表11
工程编号900被手动调整为第二高优先级的工程,并且调整节省被设置为$800,000,这是工程900较之更优先的工程的调整节省值。所有排名在工程900之下的工程向下移动一个工程排名,并且“调整节省”值被移到直接位于其下的工程,如下图12所示。
优先级排名 |
工程号 |
调整节省 |
初始节省估计 |
初始耗费估计 |
商业关键 |
1 |
100 |
$1,000,000 |
$1,000,000 |
$25,000,000 |
1 |
2 |
900 |
$800,000 |
$0 |
$12,000,000 |
1 |
3 |
200 |
$500,000 |
$800,000 |
$20,000,000 |
2 |
4 |
300 |
$500,000 |
$500,000 |
$15,000,000 |
1 |
5 |
400 |
$300,000 |
$500,000 |
$10,000,000 |
3 |
6 |
500 |
$200,000 |
$300,000 |
$12,000,000 |
2 |
7 |
600 |
$200,000 |
$200,000 |
$10,000,000 |
1 |
8 |
700 |
$0 |
$200,000 |
$7,000,000 |
3 |
9 |
800 |
$0 |
$0 |
$17,000,000 |
2 |
10 |
1000 |
$0 |
$0 |
$12,000,000 |
3 |
表12
在下一个规划循环期间,三个新工程被输入工作分配模型,如下图13所示,该新工程的“调整节省”值被设置为等于“初始节省估计”值。
优先级排名 |
工程号 |
调整节省 |
初始节省估计 |
初始耗费估计 |
商业关键 |
NA |
1100 |
$500,000 |
$500,000 |
$20,000,000 |
2 |
NA |
1200 |
$900,000 |
$900,000 |
$10,000,000 |
1 |
NA |
1300 |
$0 |
$0 |
$20,000,000 |
1 |
表13
这三个新工程依据调整节省、初始耗费估计和商业关键被插入现有工程优先级列表,如下表14所示。
优先级排名 |
工程号 |
调整节省 |
初始节省估计 |
初始耗费估计 |
商业关键 |
1 |
100 |
$1,000,000 |
$1,000,000 |
$25,000,000 |
1 |
2 |
1200 |
$900,000 |
$900,000 |
$10,000,000 |
1 |
3 |
900 |
$800,000 |
$0 |
$12,000,000 |
1 |
4 |
200 |
$500,000 |
$800,000 |
$20,000,000 |
2 |
5 |
1100 |
$500,000 |
$500,000 |
$20,000,000 |
2 |
6 |
300 |
$500,000 |
$500,000 |
$15,000,000 |
1 |
7 |
400 |
$300,000 |
$500,000 |
$10,000,000 |
3 |
8 |
500 |
$200,000 |
$300,000 |
$12,000,000 |
2 |
9 |
600 |
$200,000 |
$200,000 |
$10,000,000 |
1 |
10 |
700 |
$0 |
$200,000 |
$7,000,000 |
3 |
11 |
1300 |
$0 |
$0 |
$20,000,000 |
1 |
12 |
800 |
$0 |
$0 |
$17,000,000 |
2 |
13 |
1000 |
$0 |
$0 |
$12,000,000 |
3 |
表14
注意工程100排名高于工程300,因为他有更高的初始耗费估计和相等的调整节省值;工程1200排名低于工程900,由于其具有更高的调整节省;工程1300排名高于工程800,因为其具有更高的初始耗费估计和相等的调整节省。
工程1300被手动调整为最高排序工程,并且其调整节省被设置为$1,000,000,而所有排名在工程1300之后的工程下移一个工程排名,并且其“调整节省”值被移至直接位于其下的工程,如下表15所示。
优先级排名 |
工程号 |
调整节省 |
初始节省估计 |
初始耗费估计 |
商业关键 |
1 |
1300 |
$1,000,000 |
$0 |
$20,000,000 |
1 |
2 |
100 |
$900,000 |
$1,000,000 |
$25,000,000 |
1 |
3 |
1200 |
$800,000 |
$900,000 |
$10,000,000 |
1 |
4 |
900 |
$500,000 |
$0 |
$12,000,000 |
1 |
5 |
200 |
$500,000 |
$800,000 |
$20,000,000 |
2 |
6 |
1100 |
$500,000 |
$500,000 |
$20,000,000 |
2 |
7 |
300 |
$300,000 |
$500,000 |
$15,000,000 |
1 |
8 |
400 |
$200,000 |
$500,000 |
$10,000,000 |
3 |
9 |
500 |
$200,000 |
$300,000 |
$12,000,000 |
2 |
10 |
600 |
$0 |
$200,000 |
$10,000,000 |
1 |
11 |
700 |
$0 |
$200,000 |
$7,000,000 |
3 |
12 |
800 |
$0 |
$0 |
$17,000,000 |
2 |
13 |
1000 |
$0 |
$0 |
$12,000,000 |
3 |
表15
在一例中,资源管理310可包括添加新资源的功能,该功能用来向工作分配模型添加新资源。每个资源应有委派的工作地点、工作级别、电子邮件地址、用户ID和密码、调度资源的可用容量,以及资源的技能简档。应该能够把资源标记为不活动。这确保不把工作调度至不能再对其调度工作的资源,例如如果某雇员离开了该组织。
资源管理310也可包括定义资源可用容量的功能。在一例中,资源的可用容量可由两个变量来定义:1)资源在单周内工作的小时数;2)资源应对非由工作分配模型调度的活动预留的时间百分比(即,非调度时间预留)。非调度活动包括团队会议、未计划的离职,和要求少于4小时完成的工作请求。
例如,资源A是高技能的根据合同每周工作40小时的采购专家(sourcing specialist)。由于资源A是采购专家,其时间的大部分应该用在节省或开销避免工程中。由于资源A的非调度时间预留设置为20%,即资源A的80%的工作时间应花费在调度的采购工程工作上。因此,资源A所具有的、由工作分配模型调度的工作的总可用容量=40(时)×(1-20%)=32时/周。
资源管理310也可包括定义资源技能简档(resource skill frofile)的功能。资源技能简档应如下定义:1)可向该资源调度的任务;2)该资源可工作的类别。任务应从标准任务列表选择,该任务可在工作分配模型内被调度,并且类别应该在商品由客户排序的类别标准列表中选择。
资源管理310也可包括查看所有资源的功能,该功能可在单一视窗中查看所有资源的列表。当列表中的资源被突出,任务和类别经验的概述应在屏幕的下半部显示。
资源管理310也可包括输入由培训、假日、假期等导致的计划缺席的功能。当输入计划缺席时,起迄日期同样应输入来确保其不可用时工作不调度到资源。由于资源有时可部分可用,应当存在这样的功能以允许在计划缺席期间部分可用资源时间百分数被输入。
在一例中,工程调度320可包括功能的调度优化。优化调度的结果可为节省,并且在一例中调度优化生成展示了提出的优化调度可提供的每日节省和每日耗费的显示。这使得工程建立和优先级中的变化的影响通过比较源于带有不同工程设置和工程优先级的多个调度场景的每日节省和耗费被量化。在一实施例中,用户可在一周内执行多个调度来使另外场景的模式化成为可能,这样可改良最终调度。
过程调度320也可包括改良工程设置和工程优先级的功能。用户在改良调度时可有两种可能选择:调整工程优先级或改变用来设置工程的参数。为了使调度容易带有多个调度场景被改良,并可快速运行,用户可进入用于个别工程和工程优先级列表的工程设置环境。
工程调度320也可包括查看调度和未调度工程的功能。一旦调度已被生成,用户可在工程一级查看调度结果。可在工程级显示的信息有:优先级排名、工程名称、工程地点、要求开始时间、要求结束时间、调度开始时间、调度结束时间、工程状态、请求起讫时间之间的延误。用户应同样可以容易识别所有不可被调度的工程来知道个别工程限制哪里需要解决。
工程调度320也可包括查看任务分配和查看周任务分配的功能。一旦调度被生成,用户可容易地在任务级查看调度结果。可在任务级显示的信息可包括:工程名称、任务名称、分配的资源、资源地点、调度开始时间、调度结束时间、计划小时(对于总任务)、任务状态。用户也可按周来查看对任务的计划小时分配。例如如果任务跨三周调度并总共30小时计划的持续时间,用户可查看该30小时是如何跨3周分配的。
工程调度320也包括从任务去分配(de-asssign)资源的功能。当查看任务分配时,用户也可选择将资源的分配从个别任务删除,如果资源分配需改变。一旦用户从任务去分配资源,用户可输入工程设置并强制替换资源的资源分配,然后重新执行调度来确保当调度被执行的时候,相同资源没有再分配到任务。
在一例中,工程状态输入330可包括为每一周循环输入周状态的功能。每一资源可为所有在已知星期工作的任务输入状态。资源可在为星期提交状态输入前输入、保存和改变输入。
在一例中,为每周循环输入状态包括4个时间类别。第一个类别是工程和任务分配的时间。被分配的工程和任务是已被分配至特定资源的任务。用户可查看任务的总计划小时;已耗费在任务上的总累计实际时间;可能耗费在任务上的剩余时间;以及为时间已输入的星期的计划小时。当输入状态时,用户可输入在这星期中耗费在该任务上的实际小时;用来完成任务的估计时间;和同来完成任务的估计耗费天数。当任务完成后,用户可将其标记为完成,这样它们就不会被考虑用于调度。
第二类别是用于还未分配的工程和任务的时间。该功能对于以下工程有用,该工程已被输入工作分配模型,并且用户已在其实际调度前开始在该任务上工作。该功能可用于高优先级的工程,该工程被加速。用户可输入在星期内耗费在任务上的实际小时;用来完成任务的时间和用来完成任务的估计耗费天数。用户也可标记该任务已完成。
第三类别是对分配到其他的任务输入时间。用户可在星期中为没有向其分配的任务输入实际花费在任务上的小时数,如果它们已经花费时间在该任务上工作。
第四类为向非调度活动输入时间。用户可输入在星期中花费在非调度任务的实际时间。非调度任务是这样的任务,该任务没有定义的工作强度或用来完成的耗费天数,或者由于其他原因不能被调度。例如,非调度任务可包括团队会议或非计划离职。为非调度任务捕获实际小时提供对于资源如何在一周内分配其所有时间的可视性。
报告340可按多种方式生成报告。例如,用户可生成依赖性报告或基于可变过滤标准的报告。报告可按不同板式呈现,如PDF或表格板式。
针对可用容量的调度客户采购工作请求可基于供求的分类,这样工作请求可针对每个可用容量来匹配,以识别用来完成特定种类工作的资源。在一实施例中,在接收到工作请求时,在工作分配模型中建立工程来满足该要求。在该模型中,客户采购要求和工程间可能会存在一对一的关系。当建立起所有工程时,用来满足要求的工程内所有要求的任务可被输入,并且工程设置中的所有任务间的依赖性允许工程中任务按正确调度顺序发生。接着,设置包括多项任务的工程来满足工作请求。工程内每项任务主要由任务名、优选地点和类别经验要求来定义。同样可设置工程中任务间的所有依赖性使得工程的任务按正确调度顺序发生。接着,每个资源由其资源配置文件定义,该配置文件包括其地点、其有能力完成的任务和其能够完成的任务类别。任务名称、类别经验和地点作为三个常用参数,这些参数用来将可用资源容量(供)与为满足客户采购工作请求(求)所建立的工程匹配。
几个分层结构可在模型中使用来有效地跨多个地点优化供求调度。在一实施例中,配置数据分层以提供结构的方法来定义模型中重点数据间的垂直关系。示例数据分层可包括工程分层400、任务分层410和地理分层420。
如图9A所示的示例工程分层400所述,每项工程可包括一个或多个任务,该任务需要被完成来满足需求。单个工程可被建立来满足单独工作请求。如图9B所示,所有工程中的任务可被排序为“已调度”或“未调度”,根据示例任务分层410。调度任务为带有标准工作量和使任务在定义的起迄时间被调度的耗费时间的任务。当定义调度任务时,用户可选择是否要求完成该任务所需要的类别经验。在一例中,当类别经验被要求时,只有带有所要求的完成任务和要求任务配置文件的类别经验的资源可被考虑。
非调度任务是不作为工程一部分调度的任务,因为它们没有任何标准工作量或耗费时间估计。当完成星期状态报告来捕获资源如何实际分配其时间时,用户可记录实际花费在完成非调度任务上的时间。
图9C表示了另一示例任务分层410,该任务分层存在于工作分配模型中。任务表示实际的基础级活动,这些活动可为完成客户采购要求而执行,每个调度任务都具有相关联的可交付。工程可由任务集定义,可完成该任务集来满足客户要求。资源也可由任务集来定义,它们被确认是合格的以完成如资源任务配置文件。
当选择任务作为工程的一部分时,或当建立资源的任务配置文件时,任务分层410允许基础级的任务识别,如级3。穿过分层为所有任务提供了逻辑分组,这样任务更容易被识别。
任务分层410也使得在任务级别记录的实际时间可为了报告目的而聚集在更高层级。例如,时间可作为跨七个采购步骤中的每一个分割的时间百分数、跨合同管理分割时间的百分数、采购和卖方管理等等,而不是报告模型在每项任务花费分割时间的百分数。
图9D表示了例如理分层420。地点可被分组为国内地点和国外地点。模型中的资源可分配于单个地点,地点根据国内和国外被分类。当定义工程来满足工作请求时,工程内的任务可具有特定优选的地点,在该地点任务可被完成。例如,如果任务必须在德国国内地点被完成,那么当在模型中建立工程时,地点要求在任务参数中被特定。这样,工程只能给分配到处于德国国内的地点。
任务也可被定义为可在“任何国内地点”和“任务国外地点”被完成。其结果为所有分别位于国内或国外地点的可用资源被考虑来完成任务。当任务执行地点不重要时,“任何地点”可被选择,其结果为所有任何地方的APS资源都被考虑来完成该任务。
图10示出了示例性工作分配模型的数据元素图。数据元素图包括了数据元素502的概述,该数据元素由用户手工输入到工作分配模型,由工作分配模型执行的功能504来处理该数据,以及可用于用户的报告506和数据视窗来提取并查看由工作分配模型生成的信息。
工作分配模型可利用可用资源容量优化工作请求调度。优化处理可计算所有可能的对工程任务的资源分配,并选择资源分配解决方案,该方案在最短时间段内向客户生成最大潜力值。在一例中,优化处理包括五步:建立工程和任务优先级列表;识别调度解决方案集;将任务调度至可用资源容量;优化调度;和更新工程和任务状态。
在服务业的实施例中,工程可基于调整节省估计标准、初始耗费标准、商业关键标准被优先顺序化。这些标准用来生成优先级顺序,根可据该优先级顺序来调度工程。
优先顺序化同样以每个特定工程中的任务间的依赖性为基础。对于按优先级顺序排列的的每个工程,下一级别是对被调度工程中的任务的顺序优先顺序化。驱动工程内任务列表顺序的唯一因素是任务间的依赖性。
基于这些标准和依赖性的优先级与如上结合表11-15和图4A和4B描述的优先级处理相似。
一旦建立了工程优先级和排序的任务列表,可以完成每项任务的完整资源集就可被识别。可用来完成任务的可能资源识别由匹配任务、优选的地点和带有任务配置文件的特定任务的类别经验来得到,类别经验和资源地点如结合上表3描述的那样。同样,将任务调度至可用资源容量可由如联系上表5A-5K描述的处理来完成。
在服务业的实施例中,将工程中的任务调度到可用资源也可通过优化处理来优化。对于优化来说,工程可被分类到三个可能编组中:节省工程、耗费工程和其他工程。
节省工程与如先前示例中描述的估价工序相符,每个节省工程具有节省潜力,该节省潜力当建立工程时被规定。耗费工程对应于先前示例中描述的量工序,具有初始耗费估计,但是没有节省潜能。最后,所有其他工程一般可分类到“其他”工程的类别中。
一旦所有任务被分配至资源集,调度算法为每项工程估算分数。分数的计算可对每种项工程类别不同。对于节省工程来说,利益可定义为在最短时间内交付的最大节省。对于耗费工程来说,利益可定义为在最短时间内交付的最大耗费。对于其他工程类别来说,利益可作为在最短时间内交付工程而定义。
节省工程的分数(节省分数)可通过调整节省值除以直到工程完成的耗费天数来计算。直到工程完成的耗费天数表示了每项工程的调度参数。耗费工程的分数(耗费分数)可通过调整耗费值除以直到工程完成的耗费天数来计算。
例如,下图16中的解决方案集中,基于定义的任务参数和资源配置文件,有12项可能的任务对资源的分配组合。
工程名 |
任务号 |
任务 |
捆绑ID |
优选地点 |
类别经验 |
潜在资源 |
工程1 |
P1T1 |
采集和分析耗费数据 |
1 |
Bratislava |
未要求 |
R1,R2 |
工程1 |
P1T2 |
指导供应市场分析 |
2 |
德国 |
IT硬件 |
R3 |
工程1 |
P1T3 |
估算当前采购实践 |
2 |
德国 |
IT硬件 |
R3 |
工程1 |
P1T4 |
开发类别简档概要 |
2 |
德国 |
IT硬件 |
R3 |
工程2 |
P2T1 |
建立、分发&协调RFP |
1 |
任何国内 |
IT硬件 |
R3,R8,R9 |
工程2 |
P2T2 |
分析RFP响应 |
1 |
任何国内 |
IT硬件 |
R3,R8,R9 |
工程2 |
P2T3 |
开发协商用供应商短表 |
1 |
任何国内 |
IT硬件 |
R3,R8,R9 |
工程3 |
P3T1 |
开发供应商协商策略 |
1 |
德国 |
IT硬件 |
R3 |
工程3 |
P3T2 |
指导厂商协商 |
1 |
德国 |
IT硬件 |
R3 |
工程4 |
P4T1 |
开发供应商协商策略 |
1 |
德国 |
IT软件 |
R3,R4 |
工程4 |
P4T2 |
指导厂商协商 |
1 |
德国 |
IT软件 |
R3,R4 |
表16
表17列出所有可能的任务资源分配组合。
工程名 |
任务# |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt 7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
工程1 |
任务1 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
R1 |
R2 |
工程1 |
任务2 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
工程1 |
任务3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
工程1 |
任务4 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
工程2 |
任务1 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
工程2 |
任务2 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
工程2 |
任务3 |
R3 |
R3 |
R3 |
R3 |
R8 |
R8 |
R8 |
R8 |
R9 |
R9 |
R9 |
R9 |
工程3 |
任务1 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
工程3 |
任务2 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
工程4 |
任务1 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
工程4 |
任务2 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
R3 |
R3 |
R4 |
R4 |
表17
基于所有可能的任务资源分配,对于工程1-4何时可被完成,有12种可能的组合,如表18所列。
工程名 |
当前日期 |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
0100 |
6-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
16-Feb |
13-Feb |
1200 |
6-Feb |
22-Feb |
20-Feb |
22-Feb |
20-Feb |
14-Feb |
10-Feb |
14-Feb |
10-Feb |
17-Feb |
15-Feb |
17-Feb |
15-Feb |
1400 |
6-Feb |
27-Feb |
24-Feb |
27-Feb |
24-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
20-Feb |
17-Feb |
1500 |
6-Feb |
06-Mar |
03-Mar |
14-Feb |
14-Feb |
27-Feb |
24-Feb |
14-Feb |
14-Feb |
27-Feb |
24-Feb |
14-Feb |
14-Feb |
表18
这样,每个组合的存储分数可通过调整节省潜能除以由用直到工程完成的耗费天数来计算。对这些组合,把每项工程的分数(工序估算值)加在一起,来确定产出最高分数的组合。
这些分数之和可代表控制参数。选择标准被设置为选择具有最高控制参数的资源分配。在该例中,选项8的资源分配可被选择,因为它每天提供最大量的潜在节省,如表19中的最高控制参数所示。
工程名 |
调整节省 |
Opt 1 |
Opt 2 |
Opt 3 |
Opt 4 |
Opt 5 |
Opt 6 |
Opt 7 |
Opt 8 |
Opt 9 |
Opt 10 |
Opt 11 |
Opt 12 |
工程1 |
∈10,000,000 |
1000000 |
1428571 |
1000000 |
1428571 |
1000000 |
1428571 |
1000000 |
1428571 |
1000000 |
1428571 |
1000000 |
1428571 |
工程2 |
∈10,000,000 |
62500 |
71429 |
62500 |
71429 |
125000 |
250000 |
125000 |
250000 |
90909 |
111111 |
90909 |
111111 |
工程3 |
∈10,000,000 |
4762 |
5556 |
4762 |
5556 |
7143 |
9091 |
7143 |
9091 |
7l43 |
9091 |
7143 |
9091 |
工程4 |
∈10,000,000 |
357 |
400 |
1250 |
1250 |
476 |
556 |
1250 |
1250 |
476 |
556 |
1250 |
1250 |
总欧元/日 |
1067619 |
1505956 |
1068512 |
1506806 |
11326l9 |
1688218 |
1133393 |
1688912 |
1098528 |
1549329 |
1099302 |
1550023 |
表19
当评价非节省工程时,相同处理可被应用;然而,当为所有非节省工程确定分数时,使用调整耗费值而不是调整节省值。
工程可在三个主要阶段中被优化,每个主要阶段包含三个次要优化阶段。根据这些调度阶段工程的优化如上描述。在该例中,三个主要阶段和相应的次要阶段如下:
1)处理中工程列表(阶段I)
a.“处理中”状态的节省工程;
b.“处理中”状态的耗费工程;
c.“处理中”状态的其他工程;
2)稳定工程列表(阶段II)
a.“稳定”状态的节省工程;
b.“稳定”状态的耗费工程;
c.“稳定”状态的其他工程;
3)其余工程列表(阶段III)
a.“早开始”、“已调度”或“未调度”状态的节省工程;
b.“早开始”、“已调度”或“未调度”状态的耗费工程;
c.“早开始”、“已调度”或“未调度”状态的的其他工程。
在一实施例中,次要调度阶段确保了优先级在三个主要调度阶段中按如下顺序给予工程:
1)节省工程:主要调度阶段中调整节省大于0的工程;
2)耗费工程:主要调度阶段中调整节省等于0且调整耗费大于0的工程;以及
3)其他工程:主要调度阶段中调整节省等于0且调整耗费等于0的工程。
优化可对已调度和未调度工程重复。如先前描述的那样,如果没有可用资源,任务可不被分配至资源。另外,如果工程中的任务不可被调度,工程及其任务可丧失其调度状态(如,处理中、稳定、早开始、或已调度)。在这种情况下,该分配会需要从解决方案集中删除,产生调度空缺。这样,只要由于相同工程中的其他任务未被调度而使一些任务去分配,那么优化处理可被重复直到去分配不再必要。
图11示出表示确定工程状态的示例过程的流程图。步骤ST40开始了主要(X)和次要(Y)优化阶段。步骤ST41根据相应的主要和次要阶段优化工程。步骤ST42反映了任务到工程的状态。然后,步骤ST43确定任务是否已从解决方案集删除。如果任务已从解决方案集删除,那么处理回到步骤ST41;否则,步骤ST44更新工程状态历史。然后,步骤ST45更新工程日期,并且步骤ST46向任务反映工程状态。
解决方案集可周期地对所有工程和任务状态更新。图12示出用于任务和工程以及潜在类别和转换的状态转换图。定期更新可包括更新调度起迄时间、原计划起迄时间和工程及任务级上的实际开始时间。任务或工程的标准生命周期以新要求状态200开始。在被建立处理中的工程以及未就绪待调度的工程可与新要求状态600相关。
一旦工程或任务就绪待调度,状态被改变至未调度状态602来指示为调度的工程或任务将在下一调度处理中被调度。一旦任务或工程被调度,其状态变为已调度状态604。
然后,一旦任务要求在给定时间段(如两周)内开始,其状态被改变至稳定状态606。稳定状态指示了已分配资源对工程固定,起迄时间可提交给客户,并且工程将会较其他带有“已调度”状态的工程来说具有调度优先级。
工程或任务一开始,其状态变为处理中状态608。带有“处理中”状态的工程当生成工程调度时较其他工程来说具有优先级权,
最后,一旦工程或任务完成或被取消,其状态变为已取消/已完成状态610。
另外,当工作在调度开始日期或稳定状态改变之前开始工作的工程或任务接收早开始状态612。具有早开始状态的工程或任务按相同优先级被调度,如具有已调度状态的工程。最后,具有稳定或处理中状态的任务可被置于保持,在该时间状态被改变为保持状态614。
在一例中,工程和任务状态以及调度时间根据以下顺序可被更新:基于已调度任务状态更新工程状态;基于整体工程状态更新任务状态;由先前时间段(如一周)基于任务状态改变更新任务已调度日期;并且基于先前时间段中工程状态改变更新工程调度日期。
表22总结了一旦任务状态对给定时间段更新时,根据工程内下面任务的状态,整体任务状态如何被确定。
工程状态变为 |
如果... |
|
|
|
|
未调度 |
至少一个任务 |
是 |
未调度 |
|
|
早开始 |
至少一个任务 |
是 |
早开始 |
且 |
所有其他未调度或已调度 |
已调度 |
所有任务 |
是 |
已调度 |
|
|
稳定 |
至少一个任务 |
是 |
稳定 |
|
|
处理中 |
至少一个任务 |
是 |
处理中 |
或 |
已完成 |
保持 |
所有任务 |
是 |
保持 |
|
|
已完成 |
所有任务 |
是 |
已完成 |
|
|
表22
任务状态可基于整体工程状态被更新。表23总结了一旦调度被确定并且新状态被生成,工程的新状态如何被反馈到其相应的任务。第一行指示了将反映给其下面任务的新任务状态,第一列指示了先于反映工程状态的任务状态。
|
已完成 |
处理中 |
稳定 |
已调度 |
早开始 |
未调度 |
已完成 |
x |
不变 |
不变 |
不变 |
N/A |
不变 |
处理中 |
N/A |
x |
N/A |
N/A |
N/A |
不变 |
稳定 |
N/A |
不变 |
x |
N/A |
N/A |
未调度 |
已调度 |
N/A |
稳定 |
稳定 |
x |
不变 |
未调度 |
早开始 |
N/A |
处理中 |
处理中 |
不变 |
x |
不变 |
未调度 |
N/A |
N/A |
N/A |
N/A |
N/A |
x |
保持 |
N/A |
N/A |
N/A |
N/A |
N/A |
N/A |
表23
任务调度日期也可基于任务状态由先前时间段的改变而被更新。表24示出了已调度起迄时间、原计划起迄时间和实际开始时间是如何基于任务状态从先前时间段更新到当前时间段的。
旧任务状态 |
新状态 |
调度开始 |
调度结束 |
实际开始 |
原计划开始 |
原计划结束 |
未调度 |
未调度 |
否 |
否 |
否 |
否 |
否 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
早开始 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
已调度 |
未调度 |
删除 |
删除 |
否 |
否 |
否 |
|
已调度 |
否 |
否 |
否 |
否 |
否 |
|
早开始 |
否 |
否 |
否 |
否 |
否 |
|
稳定 |
否 |
否 |
否 |
更新 |
更新 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
早开始 |
未调度 |
删除 |
删除 |
否 |
否 |
否 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
早开始 |
否 |
否 |
否 |
否 |
否 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
更新 |
更新 |
否 |
不可能 |
更新 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
稳定 |
未调度 |
删除 |
删除 |
否 |
否 |
否 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
早开始 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
否 |
否 |
否 |
否 |
否 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
处理中 |
未调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
早开始 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
已完成 |
未调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
早开始 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
表24
工程调度日期可基于工程状态在先前时间段的改变而被更新。一旦所有任务级日期被更新,工程级的调度信息相关的日期可基于工程级的状态改变被更新。表25总结了可能的改变。
旧工程状态 |
新状态 |
调度开始 |
调度结束 |
实际开始 |
原计划开始 |
原计划结束 |
未调度 |
未调度 |
否 |
否 |
否 |
否 |
否 |
|
已调度 |
更新 |
更新 |
否 |
否 |
否 |
|
稳定 |
更新 |
更新 |
否 |
更新 |
更新 |
|
处理中 |
更新 |
更新 |
更新 |
更新 |
更新 |
|
已完成 |
更新 |
更新 |
更新 |
更新 |
更新 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
已调度 |
未调度 |
否 |
否 |
否 |
否 |
否 |
|
已调度 |
更新 |
更新 |
否 |
否 |
否 |
|
稳定 |
更新 |
更新 |
否 |
更新 |
更新 |
|
处理中 |
更新 |
更新 |
更新 |
更新 |
更新 |
|
已完成 |
更新 |
更新 |
更新 |
更新 |
更新 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
稳定 |
未调度 |
否 |
否 |
否 |
否 |
否 |
|
已调度 |
更新 |
更新 |
否 |
否 |
否 |
|
稳定 |
更新 |
更新 |
否 |
否 |
否 |
|
处理中 |
如果调度开始不是本周 |
更新 |
更新 |
否 |
否 |
|
已完成 |
如果调度开始不是本周 |
如果调度结束不是本周 |
更新 |
否 |
否 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
处理中 |
未调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
否 |
更新 |
否 |
否 |
否 |
|
已完成 |
否 |
如果调度结束不是本周 |
否 |
否 |
否 |
|
保持 |
否 |
否 |
否 |
否 |
否 |
已完成 |
未调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已调度 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
稳定 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
处理中 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
已完成 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
|
保持 |
不可能 |
不可能 |
不可能 |
不可能 |
不可能 |
表25
该书面描述提供该发明的最佳模式并提供了示例来描述该发明并使得该领域普通技术人员可实施并使用该发明。该书面描述不将该发明局限于上述精确的条款。这样,虽然该发明详细地参照上述示例被描述,但是本领域普通技术人员在不偏离该发明的范围下可对其进行替换、修改和变更。