本發(fā)明涉及軟件開發(fā)過程中的資源自動調(diào)度領(lǐng)域,尤其是一種利用改進匈牙利算法進行軟件開發(fā)資源自動調(diào)度的方法及系統(tǒng)。
背景技術(shù):
軟件開發(fā)過程中的任務(wù)人員分配問題可視為資源調(diào)度問題。資源調(diào)度的關(guān)鍵在于匹配的最優(yōu)化,而匹配問題是運籌學(xué)的重要問題之一,也是圖論的重要內(nèi)容,它在“人員分配問題”和“最優(yōu)分配問題”中有重要作用。
目前,有關(guān)資源調(diào)度問題的研究已有很多。0-1調(diào)度算法通過0-1變量來數(shù)量化事物反映出的離散變量間的邏輯、順序、互斥等關(guān)系的約束條件;先來先服務(wù)調(diào)度算法按照程序進入的先后來分配任務(wù)處理優(yōu)先級;優(yōu)先級調(diào)度算法分為非搶占式和搶占式兩種,非搶占式優(yōu)先數(shù)算法類似于先來先服務(wù)調(diào)度算法,而搶占式優(yōu)先數(shù)算法則僅適用于可中斷類型任務(wù)的分配;匈牙利算法通過尋找增廣路徑來求得最優(yōu)匹配。
這些算法在一定程度上解決了任務(wù)平衡指派問題,但算法復(fù)雜度過高、無法解決軟件開發(fā)過程中的非平衡指派等。針對這個問題,國內(nèi)外許多學(xué)者提出了基于匈牙利算法的改進算法。其中,加邊補零法通過將非平衡代價矩陣做補零處理;加邊補最小值法通過將非平衡代價矩陣做加邊補最小值處理。這兩種算法都是將非平衡指派問題轉(zhuǎn)化為平衡指派問題后再利用匈牙利算法進行處理。雖然這兩種算法解決了非平衡指派問題與平衡指派問題的轉(zhuǎn)化,但其分配結(jié)果依舊是人員獨占任務(wù),無法滿足軟件開發(fā)過程中人員協(xié)作完成某項任務(wù)的實際,造成資源浪費,效率低下。
對于非平衡指派問題,相關(guān)研究者提出了一種擴展矩陣法,該算法通過將代價矩陣按一定規(guī)則重復(fù)擴展,并對擴展后的矩陣進行補零處理,將非平衡指派問題轉(zhuǎn)化為平衡指派問題后再使用匈牙利算法,該算法可以完成非平衡指派問題與平衡指派問題的轉(zhuǎn)化,也能夠滿足人員協(xié)作完成某項任務(wù)的需求。但該算法存在如下問題:對于一些代價矩陣所得出的分配結(jié)果中存在某些任務(wù)未被分配的問題或者分配結(jié)果中人員分配極端的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明針對非平衡人員自動指派問題,提出了一種基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度技術(shù)方案。
本發(fā)明技術(shù)方案提供一種基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度方法,包括以下步驟,
步驟1,輸入用于參考的各項指標(biāo)的取值,設(shè)第l項指標(biāo)代價值的取值范圍為0~max,0表示完成某項任務(wù)所需代價最低,max表示完成某項任務(wù)所需代價最高,n表示任務(wù)總數(shù),m表示人員總數(shù),k表示指標(biāo)項數(shù),n小于m;
步驟2,輸入各項指標(biāo)所占比重,設(shè)pli表示第l項指標(biāo)在第i項分配任務(wù)中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,
步驟3,計算綜合的代價矩陣,設(shè)eij代表第j位開發(fā)人員為完成項目中第i項分配任務(wù)的綜合代價,i=1,2,...,n,j=1,2,...,m,計算如下,
步驟4,縮減代價矩陣,縮減后各行各列都出現(xiàn)至少一個零元素;
步驟5,分割代價矩陣,包括進行多次不同的分割,每次分割的實現(xiàn)方式為,從m列中任取n列組成n×n的矩陣,形成
步驟6,對步驟5每次分割結(jié)果分別處理,包括對所得
其中,
minsx表示第x子矩陣的函數(shù)代價值;
步驟7,對步驟5每次分割結(jié)果,分別合并
其中,mins表示總函數(shù)代價值,minsx表示分割矩陣后第x子矩陣的函數(shù)代價值;x=1,2,...,m/n+1)。
步驟8,比較代價函數(shù)值,包括通過將每種矩陣分割相應(yīng)代價函數(shù)值進行比較,得出代價函數(shù)值最優(yōu)的分配方案,輸出代價函數(shù)值最優(yōu)的分配方案以及相應(yīng)代價函數(shù)值。
而且,步驟4中,縮減代價矩陣根據(jù)如下公式進行,
eij=eij-mini{eij}
eij=eij-minj{eij}
其中,j=1,2,...,m,i=1,2,...,n。
而且,步驟5中,分割代價矩陣包括進行
本發(fā)明還提供一種基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度系統(tǒng),包括以下模塊,
第一模塊,用于輸入用于參考的各項指標(biāo)的取值,設(shè)第l項指標(biāo)代價值的取值范圍為0~max,0表示完成某項任務(wù)所需代價最低,max表示完成某項任務(wù)所需代價最高,n表示任務(wù)總數(shù),m表示人員總數(shù),k表示指標(biāo)項數(shù),n小于m;
第二模塊,用于輸入各項指標(biāo)所占比重,設(shè)pli表示第l項指標(biāo)在第i項分配任務(wù)中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,
第三模塊,用于計算綜合的代價矩陣,設(shè)eij代表第j位開發(fā)人員為完成項目中第i項分配任務(wù)的綜合代價,i=1,2,...,n,j=1,2,...,m,計算如下,
第四模塊,用于縮減代價矩陣,縮減后各行各列都出現(xiàn)至少一個零元素;
第五模塊,用于分割代價矩陣,包括進行多次不同的分割,每次分割的實現(xiàn)方式為,從m列中任取n列組成n×n的矩陣,形成
第六模塊,用于對第五模塊每次分割結(jié)果分別處理,包括對所得
其中,
minsx表示第x子矩陣的函數(shù)代價值;
第七模塊,用于對第五模塊每次分割結(jié)果,分別合并
其中,mins表示總函數(shù)代價值,minsx表示分割矩陣后第x子矩陣的函數(shù)代價值;x=1,2,...,m/n+1)。
第八模塊,用于比較代價函數(shù)值,包括通過將每種矩陣分割相應(yīng)代價函數(shù)值進行比較,得出代價函數(shù)值最優(yōu)的分配方案,輸出代價函數(shù)值最優(yōu)的分配方案以及相應(yīng)代價函數(shù)值。
而且,第四模塊中,縮減代價矩陣根據(jù)如下公式進行,
eij=eij-mini{eij}
eij=eij-minj{eij}
其中,j=1,2,...,m,i=1,2,...,n。
而且,第五模塊中,分割代價矩陣包括進行
本發(fā)明的優(yōu)勢在于:提出了一種基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度技術(shù)方案,實現(xiàn)了在人員與任務(wù)數(shù)目不相等的情況下,利用改進后的匈牙利算法自動得出符合實際開發(fā)過程中的最優(yōu)分配,從而使其可應(yīng)用于實際軟件開發(fā)過程中的人員分配問題。實驗結(jié)果表明本發(fā)明技術(shù)方案能夠有效地針對軟件開發(fā)項目的人員進行自動任務(wù)分配優(yōu)化,支持某個任務(wù)由多個人員協(xié)作完成,節(jié)約資源,提高效率,并且具有較好的易用性。
附圖說明
圖1是本發(fā)明實施例的流程圖。
圖2是本發(fā)明實施例代價矩陣縮減過程圖。
圖3是本發(fā)明實施例代價矩陣分割情況圖。
圖4是本發(fā)明實驗中任務(wù)數(shù)一定(任務(wù)數(shù)=4)時,人數(shù)與任務(wù)分配成功率關(guān)系示意圖;
圖5是本發(fā)明實驗中任務(wù)數(shù)一定時(任務(wù)數(shù)=4),人數(shù)與人員分配極端率關(guān)系示意圖;
圖6是本發(fā)明實驗中人數(shù)一定時時(人數(shù)=13),任務(wù)數(shù)數(shù)與任務(wù)分配成功率關(guān)系示意圖;
圖7是本發(fā)明實驗中人數(shù)一定時(人數(shù)=13),任務(wù)數(shù)與人員分配極端率關(guān)系示意圖。
具體實施方式
以下結(jié)合附圖和實施例詳細說明本發(fā)明技術(shù)方案:
本發(fā)明的關(guān)鍵在于先使用“分割矩陣法”再進行“補零方法”來將非平衡矩陣轉(zhuǎn)化為平衡矩陣,完成將非平衡指派問題轉(zhuǎn)換為平衡指派問題,最后利用匈牙利算法,進行求解,進而滿足人員協(xié)助完成任務(wù)的條件設(shè)定。由于矩陣中列的排列方式(即人員的排列方式)不同,會導(dǎo)致對不同排列方式的矩陣進行處理后,使得最終的人員分配不同,導(dǎo)致無法保證一次得出的分配方案即為代價值最優(yōu)的分配方案,因此本發(fā)明優(yōu)選通過使用“
針對于使用“分割矩陣法”,由于矩陣列數(shù)(即人數(shù)m)大于矩陣行數(shù)(即任務(wù)數(shù)n),因此將矩陣列按照行進行分割,即得m/n個n×n方陣,而剩余一個非n×n矩陣(令該矩陣列數(shù)為m'=m-(m/n)×n,行數(shù)為n'=n)。再通過對該非n×n矩陣進行使用“補零方法”,使其成為n×n方陣。對以上所得m/n+1個n×n方陣分別使用匈牙利算法進行處理進而得到相應(yīng)的分配方案,最終使用“
針對于對非n×n矩陣使用“補零方法”的指派問題,其數(shù)學(xué)模型可由下描述:
先引入0-1變量xij(i=1,2,…,n';j=1,2,…,m';n'>m')(其中,m'表示人數(shù),n'表示任務(wù)數(shù))來表示最終的分配結(jié)果為
設(shè)cij>0(i=1,2,…,n';j=1,2,…,m';n'>m')表示指派第j個人去完成第i項任務(wù)所需要的代價,cn'×m'是由各代價cij組成的目標(biāo)函數(shù)系數(shù)矩陣(代價矩陣),而xn'×m'是由xij組成的分配矩陣,s為代價函數(shù)值。通過“補零方法”,令cij=0(i=1,…,n';j=m'+1,…,n'),將目標(biāo)函數(shù)系數(shù)矩陣cn'×m'擴展為c'n'×n'(即c'n×n方陣),其中c'ij表示為擴展矩陣c'n'×n'中的各個代價值,而其對應(yīng)分配矩陣為x'n×n,其中x'ij=1表示已分配,x'ij=0表示未分配,代價函數(shù)值為s'。
通過“補零方法”后的平衡指派問題的數(shù)學(xué)模型為:
其中,mins'表示總代價s'最小。
基于以上模型思想,本發(fā)明實施例提供方法的流程包括以下具體步驟:
步驟1,輸入用于參考的各項指標(biāo)的取值:
具體實施時,可以預(yù)先確定用于參考的指標(biāo),并測定各項指標(biāo)的值,將其用一定范圍內(nèi)的數(shù)字表示,并列出各項指標(biāo)值表進行存儲。在執(zhí)行本流程時輸入。
設(shè)定第l項指標(biāo)代價值
表1第l項指標(biāo)評估表(l=1,2,…,k)
實施例中,第1項指標(biāo)為技術(shù)能力,第2項指標(biāo)為負荷程度,價值
表2技術(shù)能力表
表3負荷程度表
步驟2,輸入各項指標(biāo)所占比重:
具體實施時,可由本領(lǐng)域技術(shù)人員預(yù)先設(shè)定各項指標(biāo)所占比重,并列出相應(yīng)指標(biāo)比重表。k項指標(biāo)比重表見表4。
表4k項指標(biāo)比重表
實施例中技術(shù)能力與負荷程度比重表見表5。
表5指標(biāo)比重表
步驟3,綜合代價矩陣的計算:設(shè)eij>0(i=1,2,...,n;j=1,2,...,m)來代表第j位開發(fā)人員為完成項目中第i項分配任務(wù)的綜合代價。其中eij的數(shù)值越小則代表該開發(fā)人員對所分配的任務(wù)完成效果越好。根據(jù)步驟1與步驟2,第l項指標(biāo)在第i項分配任務(wù)中的比例
評測結(jié)果會對不同任務(wù)起到不同的指導(dǎo)效益,例如ui設(shè)計開發(fā)這一任務(wù),對于技術(shù)的要求和負荷程度的比例為2:3,則兩者所占比重分別為40%和60%。
由以上表2、3、5的數(shù)據(jù)可以得出開發(fā)人員針對任務(wù)的執(zhí)行代價,例如:
開發(fā)者趙明對于ui設(shè)計開發(fā)這一任務(wù)進行綜合權(quán)重后的執(zhí)行代價為:
10×40%+9×60%=9.4
開發(fā)者趙明對于數(shù)據(jù)庫開發(fā)這一任務(wù)進行綜合權(quán)重后的執(zhí)行代價為:
12×40%+8×60%=9.6
將趙明、孫冰等開發(fā)人員分別標(biāo)記為d1,d2,d3,d4,d5和d6,頁面系統(tǒng)開發(fā)、數(shù)據(jù)庫開發(fā)等細分任務(wù)分別標(biāo)記為task1,task2,task3,task4。針對以上兩個測評結(jié)果計算得出綜合權(quán)重后的代價矩陣見表6。
表6代價矩陣元素表
步驟4,縮減代價矩陣:將代價矩陣中的每行都減去該行中的最小元素的值(即mini{eij};j=1,2,...,m),再將所得的代價矩陣中每列的元素都減去該列的最小元素的值(即minj{eij};i=1,2,...,n),使得新的矩陣中各行各列都出現(xiàn)至少一個零元素??s減代價矩陣的公式為
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??s減后的矩陣見圖2。
步驟5,分割代價矩陣:由于開發(fā)人員的數(shù)目多于所需完成任務(wù)的數(shù)目(即矩陣中n<m),可將代價矩陣分割為多個子矩陣:將m列按照n的大小來劃分,即從m列中任取n列組成n×n的方陣,使得形成
實施例中由于開發(fā)人員的數(shù)目多于所需完成任務(wù)的數(shù)目(即矩陣中4<6),可將代價矩陣分割為2個子矩陣:將6列按照4的大小來劃分,即從6列中任取4列組成4×4的方陣,使得形成1個矩陣均為4×4的大小,而剩余最后一個4×2矩陣。將該4×2矩陣補充0元素,使得最后一個矩陣也成為一個4×4的方陣。由于不同的分割可能得到不同的分配方案,且無法保證第一次分割即得最低代價函數(shù)值,因此需對矩陣進行
步驟6,對步驟5每次分割結(jié)果,分別進行以下處理:
對分割所得
其中,
minsx表示第x子矩陣的函數(shù)代價值;
匈牙利算法為現(xiàn)有技術(shù),為便于實施參考起見,介紹實現(xiàn)步驟如下:
步驟a,矩陣中每行的所有元素都減去該行最小元素;在所得矩陣中,每列的所有元素都減去該列的最小元素。
步驟b,首先從矩陣中只有一個零元素的行中的零元素開始進行標(biāo)記,標(biāo)記為(0),同時對該元素所在列的其他零元素進行標(biāo)記,標(biāo)記為
步驟c,對矩陣中的零元素進行以整行列為單位的標(biāo)記,用最少的行列數(shù)涵蓋所有的零元素以找到未被標(biāo)記過的元素,在未被標(biāo)記的元素中取最小值賦值給min,將未標(biāo)記的行(列)中的元素減去min,同時將未標(biāo)記的列(行)中元素加上min,繼續(xù)執(zhí)行步驟b操作。
實施例對所得2個4×4方陣分別使用匈牙利算法進行任務(wù)分配,得出相應(yīng)分配方案及代價函數(shù)值。
步驟7,對步驟5每次分割結(jié)果,分別合并所有
函數(shù)代價值按照以下公式求?。?/p>
其中,mins表示總函數(shù)代價值,minsx表示分割矩陣后第x子矩陣的函數(shù)代價值;x=1,2,...,m/n+1)。
實施例中由對每種分割后的2個方陣分別使用匈牙利算法進行處理,由于第2個4×4矩陣是由開始的4×2矩陣進行補零后得到的,在合并結(jié)果時可直接去掉補零的那兩列的分配。對
對于方案一所求結(jié)果:
分配方案:
對于方案二所求結(jié)果:
分配方案:
對于方案三所求結(jié)果:
分配方案:
……
共
步驟8,比較代價函數(shù)值。通過將
通過將
分配方案為:
具體實施時,以上流程可采用計算機軟件技術(shù)實現(xiàn)自動運行流程。
本發(fā)明描述的基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度方法,通過將非平衡矩陣分割并補零處理使其成為若干小的平衡矩陣,來完成非平衡指派問題與平衡指派問題的轉(zhuǎn)化,再通過對平衡指派問題使用傳統(tǒng)匈牙利算法來得到最終的人員分配,使其能夠滿足實際開發(fā)過程中人員協(xié)作完成某一任務(wù)的特定情況,最終通過枚舉法比較得出代價值最優(yōu)分配方案。本發(fā)明提供的方法克服了傳統(tǒng)匈牙利算法過于簡化的任務(wù)獨占假設(shè)而無法實現(xiàn)人員協(xié)作完成某項任務(wù)的缺點,可視為提出了一種改進的匈牙利算法---ihadta(improvedhungarianalgorithmforsoftwaredevelopmenttaskallocation)。
為了便于理解本發(fā)明的技術(shù)效果,實驗測試了ihadta方法相比于擴展矩陣法在任務(wù)數(shù)一定時,變化人數(shù)下的成功率與有效性。測試使用數(shù)據(jù)模擬器生成4組數(shù)據(jù)集,每組數(shù)據(jù)有100個矩陣。在任務(wù)數(shù)一定時(任務(wù)數(shù)設(shè)定為4),人數(shù)分別為6、8、10、12。結(jié)果如圖4、圖5所示;測試ihadta方法相比于擴展矩陣法在人數(shù)一定時,變化任務(wù)數(shù)下的成功率與有效性。測試使用數(shù)據(jù)模擬器生成4組數(shù)據(jù)集,每組數(shù)據(jù)有100個矩陣。在人數(shù)一定時(人數(shù)設(shè)定為13),任務(wù)數(shù)分別為4、6、8、10。實驗結(jié)果如圖6、圖7所示。
具體實施時,也可以采用軟件模塊化方式提供相應(yīng)系統(tǒng)。實施例提供一種基于改進匈牙利算法的軟件開發(fā)資源自動調(diào)度系統(tǒng),包括以下模塊,
第一模塊,用于輸入用于參考的各項指標(biāo)的取值,設(shè)第l項指標(biāo)代價值的取值范圍為0~max,0表示完成某項任務(wù)所需代價最低,max表示完成某項任務(wù)所需代價最高,n表示任務(wù)總數(shù),m表示人員總數(shù),k表示指標(biāo)項數(shù),n小于m;
第二模塊,用于輸入各項指標(biāo)所占比重,設(shè)pli表示第l項指標(biāo)在第i項分配任務(wù)中的比例,l=1,2,...,k,i=1,2,...,n,0<pli<1,
第三模塊,用于計算綜合的代價矩陣,設(shè)eij代表第j位開發(fā)人員為完成項目中第i項分配任務(wù)的綜合代價,i=1,2,...,n,j=1,2,...,m,計算如下,
第四模塊,用于縮減代價矩陣,縮減后各行各列都出現(xiàn)至少一個零元素;
第五模塊,用于分割代價矩陣,包括進行多次不同的分割,每次分割的實現(xiàn)方式為,從m列中任取n列組成n×n的矩陣,形成
第六模塊,用于對第五模塊每次分割結(jié)果分別處理,包括對所得
其中,
minsx表示第x子矩陣的函數(shù)代價值;
第七模塊,用于對第五模塊每次分割結(jié)果,分別合并
其中,mins表示總函數(shù)代價值,minsx表示分割矩陣后第x子矩陣的函數(shù)代價值;x=1,2,...,m/n+1)。
第八模塊,用于比較代價函數(shù)值,包括通過將每種矩陣分割相應(yīng)代價函數(shù)值進行比較,得出代價函數(shù)值最優(yōu)的分配方案,輸出代價函數(shù)值最優(yōu)的分配方案以及相應(yīng)代價函數(shù)值。
本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。