发明内容
为解决上述问题,本发明提出一种检测多任务执行过程中已分配项目资源是否存在冲突的方法,它用于动态的检测项目资源的冲突情况,可以快速精确定位项目资源冲突,并针对存在冲突的时间段对管理者进行提示,此检测方法主要针对可重复使用的刚性资源进行检测。
为实现上述目的,本发明采用的技术方案如下:
一种多任务资源冲突分段检测方法,其包括以下步骤:
1)给定以下数据:资源名称及其总量;各项任务占用资源的开始时间、结束时间、数量;
2)根据各项任务占用资源的时间构建资源使用的时间区间,形成各项任务占用资源的时间点的集合{M1},{M1}的数据结构模型为:Mi 1{ti1,Tk,Rk,type};
其中:ti表示时间点,Tk表示第k个任务,Rk表示任务k占用的资源数量,type表示时间点ti对应的任务Tk占用资源的时间类型,该时间类型为开始时间或结束时间;
3)将{M1}中重合的时间点合并,并按时间的先后顺序排列,形成新的时间点序列的集合{M2},集合{M2}数据结构模型为:Mi 2{ti2,Ma 1,Mb 1,Mc 1,……};
其中:ti表示排序并去除重复节点后的时间点,Mk 1表示ti时刻集合{M1}的模型;
此时,{M2}中每两个相邻的时间点都构成一个资源使用时间区间;
4)记录{M2}中的各节点的类型是某项任务占用资源的开始时间还是结束时间;
5)计算{M2}中每个资源使用时间区间内的占用资源量;
在以上分析的基础上,得到以下数据:
各个时间区间的资源使用量;
最大资源使用量以及使用量最大的区间;
最少资源使用量以及使用量最少的区间;
是否存在资源冲突,以及存在冲突的时间区间。
本发明的有益效果是:
1.算法复杂度较低,是线性复杂度,可支持较大数据量的应用。
2.算法实现简单,根据应用可删减过程。比如:如果只需要知道分析区间内是否有冲突,则检测到冲突即可中断。
3.可获得资源冲突区间的全面检测数据。
4.对每个资源实现分别分析,因此支持并行处理技术同时对多个资源进行分析。
具体实施方式
本发明为一种检测多任务执行过程中已分配项目资源是否存在冲突的方法,用于动态的检测项目资源的冲突情况,可以快速精确定位项目资源冲突,并针对存在冲突的时间段对管理者进行提示,此检测方法主要针对可重复使用的刚性资源进行检测。
本发明包括以下步骤:
1)给定以下数据:资源名称及其总量;各项任务占用资源的开始时间、结束时间、数量;
2)根据各项任务占用资源的时间构建资源使用的时间区间,形成各项任务占用资源的时间点的集合{M1},{M1}的数据结构模型为:Mi 1{ti1,Tk,Rk,type};
其中:ti表示时间点,Tk表示第k个任务,Rk表示任务k占用的资源数量,type表示时间点ti对应的任务Tk占用资源的时间类型,该时间类型为开始时间或结束时间;
3)将{M1}中重合的时间点合并,并按时间的先后顺序排列,形成新的时间点序列的集合{M2},集合{M2}数据结构模型为:Mi 2{ti2,Ma 1,Mb 1,Mc 1,……};
其中:ti表示排序并去除重复节点后的时间点,Mk 1表示ti时刻集合{M1}的模型;
此时,{M2}中每两个相邻的时间点都构成一个资源使用时间区间;
4)记录{M2}中的各节点的类型是某项任务占用资源的开始时间还是结束时间;
5)计算{M2}中每个资源使用时间区间内的占用资源量;
在以上分析的基础上,得到以下数据:
各个时间区间的资源使用量;
最大资源使用量以及使用量最大的区间;
最少资源使用量以及使用量最少的区间;
是否存在资源冲突,以及存在冲突的时间区间。
在所述步骤4)中,如果{M2}的某个时间点由{M1}的多个点组成,则要分别记录这些{M1}中的点的类型和资源占用量,
在所述步骤5)中,计算{M2}中每个资源使用时间区间内的占用资源量的方法是:
如果{M2}中的某个时间点包括{M1}中的某个或某几个开始时间点,则{M2}中的该时间点之后的那个时间区间内占用资源量为前一区间占用量加上这几个时间点的资源使用量;
如果{M2}中的某个时间点包括{M1}中的某个或某几个结束时间点,则{M2}中的该时间点之后的那个时间区间内占用资源量为前一区间占用量减去这几个时间点的资源使用量。
下面结合附图详细说明。
资源冲突检测具体实现过程:
一.构建数据模型
对每种资源分别进行分析,记待分析资源总量为R。如图1所示
[ta,tb]为冲突分析的时间区间,数轴节点上方表示任务占用资源的开始节点或结束节点,ta时刻已分配资源总量记为Ra。
数轴节点下方表示该时刻任务占用资源的情况,记任务Tk占用资源数量为Rk,任务Tk占用资源的时间区间用[T(k,s),T(k,e)](k表示任务序号,s表示占用资源开始,e表示占用资源结束)。
以图中节点为例,t1时刻为任务T1占用资源的开始时间;
t2时刻为任务T2占用资源的开始时间;
t3时刻为任务T1占用资源的结束时间,同时也是任务T3占用资源的开始时间;
其他节点含义可以此类推。
二.根据各项任务占用资源的时间构建资源使用的时间区间
选取待分析时间段内的所有任务对资源占用的开始时间点和完成时间点,对某个任务Tk,其开始时间点记为T(k,s),结束时间点记为T(k,e)。记这些时间点的集合为{M1},数据结构模型为:
Mi 1{ti1,Tk,Rk,type}(ti表示时间,Tk表示第k个任务,Rk表示任务k占用的资源数量,type表示时间ti对应任务Tk占用资源的时间类型(开始时间或完成时间))。
三.将{M1}中重合的时间点合并,并按时间的先后顺序排列
如图1所示,排列后形成新的时间点序列{M2}。此时,{M2}中相邻两个时间点构成一个资源使用时间区间。
四.记录{M2}中的各节点的类型
是某项任务占用资源的开始时间(s)还是结束时间(e);如果{M2}的某个时间点由{M1}的多个点组成,则要分别记录这些{M1}中的点的类型和资源占用量。集合{M2}数据结构模型为:
Mi 2{ti2,Ma 1,Mb 1,Mc 1,……}(ti表示排序并去除重复节点后的时间,Mk 1表示ti时刻集合{M1}的模型)。
五.计算{M2}中每个时间区间内的占用资源量
如果{M2}中的某个时间点包括{M1}中某个或某几个开始时间点,则{M2}中的该时间点之后的那个时间区间内占用资源量为前一区间占用量加上这几项任务的资源使用量,如果这个时间点包括{M1}中某个或某几个结束时间点,则该时间点之后的那个时间区间内占用资源量需减去这几个时间点的资源使用量。
如图1所示:
t1,t2分别为任务T1,T2的资源使用开始时间;
t3既是任务T3的资源使用开始时间,也是任务T1的资源使用结束时间;
t4是任务T3的资源使用结束时间;
t5是任务T2的资源使用结束时间。
据此可以计算各个时间区间资源的占用数量。如下所示:
[ta,t1]区间资源使用量为Ra,1=Ra,
[t1,t2]区间资源使用量为R1,2=Ra,1+R1,
[t2,t3]区间资源使用量为R2,3=R1,2+R2,
[t3,t4]区间资源使用量为R3,4=R2,3+R3-R1,
[t4,t5]区间资源使用量为R4,5=R3,4-R3。
六.在以上分析的基础上,可以得到以下的数据:
1.各个时间区间的资源使用量;
2.最大资源使用量以及使用量最大的区间;
3.最少资源使用量以及使用量最少的区间;
4.是否存在资源冲突,以及存在冲突的时间区间。
下面再以一个模拟例子加以说明。
1)模拟数据
资源名称:计算机 数量:5
分配记录如图2所示。
2)分配数据的选择与拆分
有了模拟数据以后,算法的第一步是根据所要检测的资源,从分配记录中筛选出相关的数据。以上面的模拟数据为例,应根据资源名称【计算机】选出前面四条分配记录。
接下来需要将数据中的开始时间和结束时间进行拆分,把时间段分成独立的时间点,这里的时间点数据除了要记录作业名称和需求数量外,还要记录它的类型,即其属于开始时间还是结束时间,拆分后的数据如图3所示。
3)时间点的排序
这一步将图3中的数据按照时间的顺序进行排序,结果如图4。
4)新时间段的构成
在图4中,相邻的每两个时间点将会构成一个新的时间段,这个时间段实际上代表了冲突检测的每一个区间。不过并不是每两个时间点都能构成我们需要的时间段,比如一条分配记录的结束时间和另一条分配记录的开始时间构成的时间段,如果这个时间段内没有使用资源(数量为0),就不能构成一个有效的时间段,它们构成的只是两条记录之间的时间间隔,是没有必要进行冲突检测的。在图4中,第5条记录和第6条记录之间虽然是结束时间和开始时间构成的时间段,但因为数量不为0,所以还是需要进行分析,因此如上数据可以构成7个冲突检测区间。
5)冲突的检测
冲突的检测就是看当前时段资源的分配量是否大于资源的总量,是则发生冲突。那么如何获取当前时段资源的分配量呢?首先设置一个变量A记录当前时刻的资源分配量(初值为0),当一个时段的开始节点是某一分配记录的开始节点时,将该节点对应的需求数量加到A上作为新的A值;当一个时段的开始节点是某一分配记录的结束节点时,将该节点对应的需求数量从A中减去作为新的A值,这样就可获得这一时段的资源分配量。以上图数据为例:
首先设置A=0;
第1个冲突检测时段由第1、2条数据构成,其开始节点为start类型,那么A=A+2=2,这一时段的资源分配量为2,小于资源总量5,不冲突;
第2个冲突检测时段由第2、3条数据构成,其开始节点为start类型,那么A=A+2=4,这一时段的资源分配量为4,小于资源总量5,不冲突;
第3个冲突检测时段由第3、4条数据构成,其开始节点为start类型,那么A=A+2=6,这一时段的资源分配量为6,大于资源总量5,冲突;
第4个冲突检测时段由第4、5条数据构成,其开始节点为end类型,那么A=A-2=4,这一时段的资源分配量为4,小于资源总量5,不冲突;
第5个冲突检测时段由第5、6条数据构成,其开始节点为end类型,那么A=A-2=2,这一时段的资源分配量为2,小于资源总量5,不冲突;
第6个冲突检测时段由第6、7条数据构成,其开始节点为start类型,那么A=A+4=6,这一时段的资源分配量为6,大于资源总量5,冲突;
第7个冲突检测时段由第7、8条数据构成,其开始节点为end类型,那么A=A-4=2,这一时段的资源分配量为2,小于资源总量5,不冲突;
综上,资源【计算机】在时段2008-08-01:12:00:00~2008-08-02:09:00:00和2008-08-02:14:00:00~2008-08-03:12:00:00上发生冲突,相关的作业在检测的过程中可以进行记录。
6)冲突结果展示
使用列表和图形共同展示冲突情况,如图5、图6所示,图5中条纹标记处为出现冲突的位置,图6展示了冲突的时间及任务。
上述的实施例并不对本发明所要求的保护范围构成任何形式的限制,本发明的权利要求书覆盖了所有的修改和变更,因此,针对上述实施例做出种种修改和变化均属于本发明的保护范围内。