基于改进匈牙利算法的软件开发资源自动调度方法及系统与流程

文档序号:12801559阅读:484来源:国知局
基于改进匈牙利算法的软件开发资源自动调度方法及系统与流程

本发明涉及软件开发过程中的资源自动调度领域,尤其是一种利用改进匈牙利算法进行软件开发资源自动调度的方法及系统。



背景技术:

软件开发过程中的任务人员分配问题可视为资源调度问题。资源调度的关键在于匹配的最优化,而匹配问题是运筹学的重要问题之一,也是图论的重要内容,它在“人员分配问题”和“最优分配问题”中有重要作用。

目前,有关资源调度问题的研究已有很多。0-1调度算法通过0-1变量来数量化事物反映出的离散变量间的逻辑、顺序、互斥等关系的约束条件;先来先服务调度算法按照程序进入的先后来分配任务处理优先级;优先级调度算法分为非抢占式和抢占式两种,非抢占式优先数算法类似于先来先服务调度算法,而抢占式优先数算法则仅适用于可中断类型任务的分配;匈牙利算法通过寻找增广路径来求得最优匹配。

这些算法在一定程度上解决了任务平衡指派问题,但算法复杂度过高、无法解决软件开发过程中的非平衡指派等。针对这个问题,国内外许多学者提出了基于匈牙利算法的改进算法。其中,加边补零法通过将非平衡代价矩阵做补零处理;加边补最小值法通过将非平衡代价矩阵做加边补最小值处理。这两种算法都是将非平衡指派问题转化为平衡指派问题后再利用匈牙利算法进行处理。虽然这两种算法解决了非平衡指派问题与平衡指派问题的转化,但其分配结果依旧是人员独占任务,无法满足软件开发过程中人员协作完成某项任务的实际,造成资源浪费,效率低下。

对于非平衡指派问题,相关研究者提出了一种扩展矩阵法,该算法通过将代价矩阵按一定规则重复扩展,并对扩展后的矩阵进行补零处理,将非平衡指派问题转化为平衡指派问题后再使用匈牙利算法,该算法可以完成非平衡指派问题与平衡指派问题的转化,也能够满足人员协作完成某项任务的需求。但该算法存在如下问题:对于一些代价矩阵所得出的分配结果中存在某些任务未被分配的问题或者分配结果中人员分配极端的问题。



技术实现要素:

本发明针对非平衡人员自动指派问题,提出了一种基于改进匈牙利算法的软件开发资源自动调度技术方案。

本发明技术方案提供一种基于改进匈牙利算法的软件开发资源自动调度方法,包括以下步骤,

步骤1,输入用于参考的各项指标的取值,设第l项指标代价值的取值范围为0~max,0表示完成某项任务所需代价最低,max表示完成某项任务所需代价最高,n表示任务总数,m表示人员总数,k表示指标项数,n小于m;表示第j位开发人员为完成项目中第i项分配任务的第l项指标代价值,i=1,2,...,n,j=1,2,...m,l=1,2,...,k;

步骤2,输入各项指标所占比重,设pli表示第l项指标在第i项分配任务中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,

步骤3,计算综合的代价矩阵,设eij代表第j位开发人员为完成项目中第i项分配任务的综合代价,i=1,2,...,n,j=1,2,...,m,计算如下,

步骤4,缩减代价矩阵,缩减后各行各列都出现至少一个零元素;

步骤5,分割代价矩阵,包括进行多次不同的分割,每次分割的实现方式为,从m列中任取n列组成n×n的矩阵,形成个子矩阵,剩余的补零得到一个n×n大小的子矩阵;

步骤6,对步骤5每次分割结果分别处理,包括对所得个n×n子矩阵分别使用匈牙利算法进行处理,得到各子矩阵的分配方案以及相应代价函数值,计算如下,

其中,

minsx表示第x子矩阵的函数代价值;

表示第x代价子矩阵;

表示第x代价子矩阵的分配情况;x=1,2,...,m/n+1;i=1,2,...,n,j=1,2,...,n;表示未分配,表示已分配,

步骤7,对步骤5每次分割结果,分别合并个n×n子矩阵分配结果,并将各个子矩阵的函数代价值进行相加得到整个代价矩阵的函数代价值,计算如下,

其中,mins表示总函数代价值,minsx表示分割矩阵后第x子矩阵的函数代价值;x=1,2,...,m/n+1)。

步骤8,比较代价函数值,包括通过将每种矩阵分割相应代价函数值进行比较,得出代价函数值最优的分配方案,输出代价函数值最优的分配方案以及相应代价函数值。

而且,步骤4中,缩减代价矩阵根据如下公式进行,

eij=eij-mini{eij}

eij=eij-minj{eij}

其中,j=1,2,...,m,i=1,2,...,n。

而且,步骤5中,分割代价矩阵包括进行次不同的分割。

本发明还提供一种基于改进匈牙利算法的软件开发资源自动调度系统,包括以下模块,

第一模块,用于输入用于参考的各项指标的取值,设第l项指标代价值的取值范围为0~max,0表示完成某项任务所需代价最低,max表示完成某项任务所需代价最高,n表示任务总数,m表示人员总数,k表示指标项数,n小于m;表示第j位开发人员为完成项目中第i项分配任务的第l项指标代价值,i=1,2,...,n,j=1,2,...m,l=1,2,...,k;

第二模块,用于输入各项指标所占比重,设pli表示第l项指标在第i项分配任务中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,

第三模块,用于计算综合的代价矩阵,设eij代表第j位开发人员为完成项目中第i项分配任务的综合代价,i=1,2,...,n,j=1,2,...,m,计算如下,

第四模块,用于缩减代价矩阵,缩减后各行各列都出现至少一个零元素;

第五模块,用于分割代价矩阵,包括进行多次不同的分割,每次分割的实现方式为,从m列中任取n列组成n×n的矩阵,形成个子矩阵,剩余的补零得到一个n×n大小的子矩阵;

第六模块,用于对第五模块每次分割结果分别处理,包括对所得个n×n子矩阵分别使用匈牙利算法进行处理,得到各子矩阵的分配方案以及相应代价函数值,计算如下,

其中,

minsx表示第x子矩阵的函数代价值;

表示第x代价子矩阵;

表示第x代价子矩阵的分配情况;x=1,2,...,m/n+1;i=1,2,...,n,j=1,2,...,n;表示未分配,表示已分配,

第七模块,用于对第五模块每次分割结果,分别合并个n×n子矩阵分配结果,并将各个子矩阵的函数代价值进行相加得到整个代价矩阵的函数代价值,计算如下,

其中,mins表示总函数代价值,minsx表示分割矩阵后第x子矩阵的函数代价值;x=1,2,...,m/n+1)。

第八模块,用于比较代价函数值,包括通过将每种矩阵分割相应代价函数值进行比较,得出代价函数值最优的分配方案,输出代价函数值最优的分配方案以及相应代价函数值。

而且,第四模块中,缩减代价矩阵根据如下公式进行,

eij=eij-mini{eij}

eij=eij-minj{eij}

其中,j=1,2,...,m,i=1,2,...,n。

而且,第五模块中,分割代价矩阵包括进行次不同的分割。

本发明的优势在于:提出了一种基于改进匈牙利算法的软件开发资源自动调度技术方案,实现了在人员与任务数目不相等的情况下,利用改进后的匈牙利算法自动得出符合实际开发过程中的最优分配,从而使其可应用于实际软件开发过程中的人员分配问题。实验结果表明本发明技术方案能够有效地针对软件开发项目的人员进行自动任务分配优化,支持某个任务由多个人员协作完成,节约资源,提高效率,并且具有较好的易用性。

附图说明

图1是本发明实施例的流程图。

图2是本发明实施例代价矩阵缩减过程图。

图3是本发明实施例代价矩阵分割情况图。

图4是本发明实验中任务数一定(任务数=4)时,人数与任务分配成功率关系示意图;

图5是本发明实验中任务数一定时(任务数=4),人数与人员分配极端率关系示意图;

图6是本发明实验中人数一定时时(人数=13),任务数数与任务分配成功率关系示意图;

图7是本发明实验中人数一定时(人数=13),任务数与人员分配极端率关系示意图。

具体实施方式

以下结合附图和实施例详细说明本发明技术方案:

本发明的关键在于先使用“分割矩阵法”再进行“补零方法”来将非平衡矩阵转化为平衡矩阵,完成将非平衡指派问题转换为平衡指派问题,最后利用匈牙利算法,进行求解,进而满足人员协助完成任务的条件设定。由于矩阵中列的排列方式(即人员的排列方式)不同,会导致对不同排列方式的矩阵进行处理后,使得最终的人员分配不同,导致无法保证一次得出的分配方案即为代价值最优的分配方案,因此本发明优选通过使用“种枚举法”,对所有情况的代价值进行内部比较,最终输出即为代价值最优的分配方案。

针对于使用“分割矩阵法”,由于矩阵列数(即人数m)大于矩阵行数(即任务数n),因此将矩阵列按照行进行分割,即得m/n个n×n方阵,而剩余一个非n×n矩阵(令该矩阵列数为m'=m-(m/n)×n,行数为n'=n)。再通过对该非n×n矩阵进行使用“补零方法”,使其成为n×n方阵。对以上所得m/n+1个n×n方阵分别使用匈牙利算法进行处理进而得到相应的分配方案,最终使用“种枚举法”求解出代价值最优的分配方案。

针对于对非n×n矩阵使用“补零方法”的指派问题,其数学模型可由下描述:

先引入0-1变量xij(i=1,2,…,n';j=1,2,…,m';n'>m')(其中,m'表示人数,n'表示任务数)来表示最终的分配结果为

设cij>0(i=1,2,…,n';j=1,2,…,m';n'>m')表示指派第j个人去完成第i项任务所需要的代价,cn'×m'是由各代价cij组成的目标函数系数矩阵(代价矩阵),而xn'×m'是由xij组成的分配矩阵,s为代价函数值。通过“补零方法”,令cij=0(i=1,…,n';j=m'+1,…,n'),将目标函数系数矩阵cn'×m'扩展为c'n'×n'(即c'n×n方阵),其中c'ij表示为扩展矩阵c'n'×n'中的各个代价值,而其对应分配矩阵为x'n×n,其中x'ij=1表示已分配,x'ij=0表示未分配,代价函数值为s'。

通过“补零方法”后的平衡指派问题的数学模型为:

其中,mins'表示总代价s'最小。

基于以上模型思想,本发明实施例提供方法的流程包括以下具体步骤:

步骤1,输入用于参考的各项指标的取值:

具体实施时,可以预先确定用于参考的指标,并测定各项指标的值,将其用一定范围内的数字表示,并列出各项指标值表进行存储。在执行本流程时输入。

设定第l项指标代价值的取值范围为0~max,0表示完成某项任务所需代价最低,max表示完成某项任务所需代价最高,n表示任务总数,m表示人员总数,k表示指标项数,即表示第j位开发人员为完成项目中第i项分配任务的第l项指标代价值。n小于m。第l项指标的评估表见表1。

表1第l项指标评估表(l=1,2,…,k)

实施例中,第1项指标为技术能力,第2项指标为负荷程度,价值的取值范围为0~20,0表示完成某项任务所需代价最低,20表示完成某项任务所需代价最高,n表示任务总数,m表示人员总数,k表示指标项数。技术能力评估表见表2,负荷程度评估表见表3。

表2技术能力表

表3负荷程度表

步骤2,输入各项指标所占比重:

具体实施时,可由本领域技术人员预先设定各项指标所占比重,并列出相应指标比重表。k项指标比重表见表4。

表4k项指标比重表

实施例中技术能力与负荷程度比重表见表5。

表5指标比重表

步骤3,综合代价矩阵的计算:设eij>0(i=1,2,...,n;j=1,2,...,m)来代表第j位开发人员为完成项目中第i项分配任务的综合代价。其中eij的数值越小则代表该开发人员对所分配的任务完成效果越好。根据步骤1与步骤2,第l项指标在第i项分配任务中的比例最终形成的代价矩阵为

评测结果会对不同任务起到不同的指导效益,例如ui设计开发这一任务,对于技术的要求和负荷程度的比例为2:3,则两者所占比重分别为40%和60%。

由以上表2、3、5的数据可以得出开发人员针对任务的执行代价,例如:

开发者赵明对于ui设计开发这一任务进行综合权重后的执行代价为:

10×40%+9×60%=9.4

开发者赵明对于数据库开发这一任务进行综合权重后的执行代价为:

12×40%+8×60%=9.6

将赵明、孙冰等开发人员分别标记为d1,d2,d3,d4,d5和d6,页面系统开发、数据库开发等细分任务分别标记为task1,task2,task3,task4。针对以上两个测评结果计算得出综合权重后的代价矩阵见表6。

表6代价矩阵元素表

步骤4,缩减代价矩阵:将代价矩阵中的每行都减去该行中的最小元素的值(即mini{eij};j=1,2,...,m),再将所得的代价矩阵中每列的元素都减去该列的最小元素的值(即minj{eij};i=1,2,...,n),使得新的矩阵中各行各列都出现至少一个零元素。缩减代价矩阵的公式为

eij=eij-mini{eij},(j=1,2,...,m)

eij=eij-minj{eij},(i=1,2,...,n)

参见图2,实施例中对第一行减去最小值4.8,第二行减去6.4,第三行减去6.6,第四行减去5,此时每行都含有至少一个0,检查每列是否至少含有一个0,对未含有0的列减去该列中的最小值,例如在该实施例中将对第四列减去最小值1,第五列减去最小值1.4。此时整个矩阵中,每行每列都至少含有一个0。缩减后的矩阵见图2。

步骤5,分割代价矩阵:由于开发人员的数目多于所需完成任务的数目(即矩阵中n<m),可将代价矩阵分割为多个子矩阵:将m列按照n的大小来划分,即从m列中任取n列组成n×n的方阵,使得形成(m/n向下取整)个矩阵均为n×n的大小,而剩余最后一个非n×n矩阵。将最后一部分的矩阵补充零元素,使得最后一个矩阵也成为一个n×n大小的矩阵。由于不同的分割可能得到不同的分配方案,且无法保证第一次分割即得最低代价函数值,因此优选的是采用枚举方式,需对矩阵进行次矩阵的分割。

实施例中由于开发人员的数目多于所需完成任务的数目(即矩阵中4<6),可将代价矩阵分割为2个子矩阵:将6列按照4的大小来划分,即从6列中任取4列组成4×4的方阵,使得形成1个矩阵均为4×4的大小,而剩余最后一个4×2矩阵。将该4×2矩阵补充0元素,使得最后一个矩阵也成为一个4×4的方阵。由于不同的分割可能得到不同的分配方案,且无法保证第一次分割即得最低代价函数值,因此需对矩阵进行次矩阵的分割。具体分割情况见图3,共种分割方案。

步骤6,对步骤5每次分割结果,分别进行以下处理:

对分割所得个n×n方阵矩阵,分别使用匈牙利算法进行处理,可得到各子矩阵的分配方案(分配方案表示为该子矩阵中的n个人员独占完成n项任务的分配)以及相应代价函数值:

其中,

minsx表示第x子矩阵的函数代价值;

表示第x代价子矩阵;

表示第x代价子矩阵的分配情况;x=1,2,...,m/n+1;i=1,2,...,n,j=1,2,...,n;表示未分配,表示已分配,

匈牙利算法为现有技术,为便于实施参考起见,介绍实现步骤如下:

步骤a,矩阵中每行的所有元素都减去该行最小元素;在所得矩阵中,每列的所有元素都减去该列的最小元素。

步骤b,首先从矩阵中只有一个零元素的行中的零元素开始进行标记,标记为(0),同时对该元素所在列的其他零元素进行标记,标记为然后从矩阵中的仅含有一个零元素的列开始,将该零元素标记为(0),并对零元素所在行中其他零元素同样进行标记,标记为如果所有行列都能标记出(0)元素,则分配完成,否则进行步骤c。

步骤c,对矩阵中的零元素进行以整行列为单位的标记,用最少的行列数涵盖所有的零元素以找到未被标记过的元素,在未被标记的元素中取最小值赋值给min,将未标记的行(列)中的元素减去min,同时将未标记的列(行)中元素加上min,继续执行步骤b操作。

实施例对所得2个4×4方阵分别使用匈牙利算法进行任务分配,得出相应分配方案及代价函数值。

步骤7,对步骤5每次分割结果,分别合并所有个n×n子矩阵分配结果,并将各个子矩阵的函数代价值进行相加得到整个代价矩阵的函数代价值。

函数代价值按照以下公式求取:

其中,mins表示总函数代价值,minsx表示分割矩阵后第x子矩阵的函数代价值;x=1,2,...,m/n+1)。

实施例中由对每种分割后的2个方阵分别使用匈牙利算法进行处理,由于第2个4×4矩阵是由开始的4×2矩阵进行补零后得到的,在合并结果时可直接去掉补零的那两列的分配。对种情况处理后的分配结果及相应函数代价值如下:

对于方案一所求结果:

分配方案:函数代价值为:43.4

对于方案二所求结果:

分配方案:函数代价值:44.4

对于方案三所求结果:

分配方案:函数代价值:46.0

……

种分配方案,个函数代价值。

步骤8,比较代价函数值。通过将种矩阵分割分别得出的代价函数值进行比较,进而得出代价函数值最优(即代价函数值最小)的分配方案,输出代价函数值最优的分配方案以及相应代价函数值。

通过将种矩阵分割分别得出的代价函数值进行比较,进而得出代价函数值最优(即代价函数值最小)的分配方案,输出代价函数值最优的分配方案以及相应代价函数值。实施例输出结果如下:

分配方案为:函数代价值为:43.4

具体实施时,以上流程可采用计算机软件技术实现自动运行流程。

本发明描述的基于改进匈牙利算法的软件开发资源自动调度方法,通过将非平衡矩阵分割并补零处理使其成为若干小的平衡矩阵,来完成非平衡指派问题与平衡指派问题的转化,再通过对平衡指派问题使用传统匈牙利算法来得到最终的人员分配,使其能够满足实际开发过程中人员协作完成某一任务的特定情况,最终通过枚举法比较得出代价值最优分配方案。本发明提供的方法克服了传统匈牙利算法过于简化的任务独占假设而无法实现人员协作完成某项任务的缺点,可视为提出了一种改进的匈牙利算法---ihadta(improvedhungarianalgorithmforsoftwaredevelopmenttaskallocation)。

为了便于理解本发明的技术效果,实验测试了ihadta方法相比于扩展矩阵法在任务数一定时,变化人数下的成功率与有效性。测试使用数据模拟器生成4组数据集,每组数据有100个矩阵。在任务数一定时(任务数设定为4),人数分别为6、8、10、12。结果如图4、图5所示;测试ihadta方法相比于扩展矩阵法在人数一定时,变化任务数下的成功率与有效性。测试使用数据模拟器生成4组数据集,每组数据有100个矩阵。在人数一定时(人数设定为13),任务数分别为4、6、8、10。实验结果如图6、图7所示。

具体实施时,也可以采用软件模块化方式提供相应系统。实施例提供一种基于改进匈牙利算法的软件开发资源自动调度系统,包括以下模块,

第一模块,用于输入用于参考的各项指标的取值,设第l项指标代价值的取值范围为0~max,0表示完成某项任务所需代价最低,max表示完成某项任务所需代价最高,n表示任务总数,m表示人员总数,k表示指标项数,n小于m;表示第j位开发人员为完成项目中第i项分配任务的第l项指标代价值,i=1,2,...,n,j=1,2,...m,l=1,2,...,k;

第二模块,用于输入各项指标所占比重,设pli表示第l项指标在第i项分配任务中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,

第三模块,用于计算综合的代价矩阵,设eij代表第j位开发人员为完成项目中第i项分配任务的综合代价,i=1,2,...,n,j=1,2,...,m,计算如下,

第四模块,用于缩减代价矩阵,缩减后各行各列都出现至少一个零元素;

第五模块,用于分割代价矩阵,包括进行多次不同的分割,每次分割的实现方式为,从m列中任取n列组成n×n的矩阵,形成个子矩阵,剩余的补零得到一个n×n大小的子矩阵;

第六模块,用于对第五模块每次分割结果分别处理,包括对所得个n×n子矩阵分别使用匈牙利算法进行处理,得到各子矩阵的分配方案以及相应代价函数值,计算如下,

其中,

minsx表示第x子矩阵的函数代价值;

表示第x代价子矩阵;

表示第x代价子矩阵的分配情况;x=1,2,...,m/n+1;i=1,2,...,n,j=1,2,...,n;表示未分配,表示已分配,

第七模块,用于对第五模块每次分割结果,分别合并个n×n子矩阵分配结果,并将各个子矩阵的函数代价值进行相加得到整个代价矩阵的函数代价值,计算如下,

其中,mins表示总函数代价值,minsx表示分割矩阵后第x子矩阵的函数代价值;x=1,2,...,m/n+1)。

第八模块,用于比较代价函数值,包括通过将每种矩阵分割相应代价函数值进行比较,得出代价函数值最优的分配方案,输出代价函数值最优的分配方案以及相应代价函数值。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1