基于二分圖的滿足時序約束的迭代增量式的最大派工方法
【技術領域】
[0001]本發(fā)明屬于指派問題中的最大匹配技術,具體是一種基于二分圖的,針對時序約束進行優(yōu)化后,能夠迭代增量式地指派任務的最大派工方法。
【背景技術】
[0002]隨著信息化水平越來越高,無紙化辦公、自動化辦公已經(jīng)越來越深入人心??墒牵芏喾諜C構(如家政公司)還在使用原始的手動派工方法,這顯得和時代有點格格不入。手動派工,不僅費時費力,效率低下,而且因為種種限制條件,往往不能統(tǒng)籌兼顧,獲得最大效益。這時,一個優(yōu)秀的派工方法就顯得尤為重要。當然,想要達到提高效率,降低成本的目的,這個派工方法就必須要足夠的智能。而二分圖模型則是解決這一類問題的最佳選擇之一O
[0003]二分圖又稱作二部圖,是圖論中的一種特殊模型。設G= (V,E)是一個無向圖,如果頂點V可以分割為兩個互不相交的子集(VpV2),并且圖中的每條邊<i,j>所關聯(lián)的兩個頂點i和j分別屬于這兩個不同的頂點集(i in V1O' in V2),則稱圖G為一個二分圖。二分圖是指派問題的數(shù)學模型,其中頂點集V1表示一組任務,V2表示一組人員。連接頂點i和j的邊則表示可以將任務i指派給人員j。派工問題研宄的重點就是,如何快速、有效、合理地將左邊的任務盡可能多的分派給右邊的人員。
[0004]給定一個二分圖G,在G的一個子圖M中,如果邊集E的任意兩條邊都不依附于同一個頂點,則稱子圖M是一個匹配。在二分圖中尋找這樣的邊數(shù)最大的子集稱為最大匹配問題。那么,解決上述派工問題的思路就轉化為尋找對應的二分圖模型中的最大匹配了。一個顯而易見的算法是:先找出所有匹配,然后匹配數(shù)最多的自然就是最大匹配。但是這個算法的時間復雜度隨著邊數(shù)的增加而呈指數(shù)級增長,一旦匹配規(guī)模大了,效率肯定下降的很厲害,所以實用性不強。
[0005]其實早在1965年,Edmonds就提出了更加高效的算法,該算法的核心是不斷地尋找增廣路徑。每找到一條增廣路徑,就通過異或操作,在原有匹配的基礎上增加一條匹配邊。當再也找不到增廣路徑時,得到的匹配就是最大匹配。這就是著名的匈牙利算法。匈牙利算法的適用范圍很廣,如指派問題,婚配問題等。而指派問題作為一類特殊問題,它與其他問題最大的區(qū)別就是時序性,主要表現(xiàn)為不同任務之間具有時間上的前后關系,同一個人員也能在不同時間段內完成不同任務。在分析具體問題時,這種時序性就表現(xiàn)為一種時序約束。很顯然,匈牙利算法本身并沒有針對時序約束進行優(yōu)化,一個人員只能分派一個任務,所以得到的最大匹配可能并不是真正意義上的最大。在滿足時序約束的情況下,考慮給某些人員重復派工(稱為迭代增量式的派工),是完全有可能找到一個更大匹配的。
【發(fā)明內容】
[0006]本發(fā)明的目的在于提供一種基于二分圖的,通過對時序約束的優(yōu)化,能夠迭代增量式地派工的最大派工方法。
[0007]實現(xiàn)本發(fā)明目的的技術解決方案為:基于二分圖的滿足時序約束的迭代增量式的最大派工方法,包括以下步驟:
[0008]第一步,對一組等待派工的任務進行預處理。主要是根據(jù)任務開始時間的先后順序進行排序,得到一組有序的任務,記為W。然后對W中的每一個任務^計算能夠完成該任務的人員子集Pi,子集中的每一個人員不僅有能力完成該任務,而且時間安排上也不會與之前已派工的任務沖突,即同時滿足技能約束和時間約束。最后,從W中剔除Pi為空的任務A (因為該任務沒有人能完成,肯定派工失敗),形成最終的有序任務集R。
[0009]第二步,由有序任務集R計算沖突矩陣GC = RXR,因此C是一個NXN的方陣,N是任務的數(shù)量。矩陣中的每一個元素Cij的取值范圍都為I或2。c ij= I表示任務r任務h在時間上有沖突,而Cu= 2表示有前后時序關系。沖突矩陣是下面計算人員總集和沖突邊的基礎。
[0010]第三步,由人員子集Pi計算人員總集P。具體過程是,i = I時,將P1中的節(jié)點直接加入P中;當i > I時,將Pg PpP2,…,Ph逐個執(zhí)行“合并-分身”操作,合并就是取并集的意思,合并每次都執(zhí)行,但是分身是在兩個子集中出現(xiàn)相同的人員節(jié)點且對應的兩個任務存在前后時序關系時才執(zhí)行。將分身節(jié)點和Pi中剩下的節(jié)點納入P集合,本身節(jié)點因為已存在就不再納入。這樣最終就能形成人員總集P。也就是說,同一個人員在人員總集P中會有本身和分身兩種存在形式,這是迭代增量式派工的特點之一。
[0011]第四步,利用前三步得到的任務集R,沖突矩陣C和人員總集P,構造時序二分圖G。時序二分圖是一種特殊的二分圖G = (V1, V2, E),其中V1對應任務集R,任務節(jié)點按照前后時序自上而下排列,V2對應人員總集P,包含零到多個分身節(jié)點。E是邊集,代表任務和人員之間的指派關系。
[0012]第五步,計算沖突邊,并保存為CE集合。沖突邊是兩條不能同時出現(xiàn)在一個匹配中的邊,它出現(xiàn)的原因是右節(jié)點中的本身節(jié)點和分身節(jié)點(實際上是同一個人員)嘗試關聯(lián)有沖突的兩個左節(jié)點(兩個有沖突的任務),形成的兩個指派關系如果在同一匹配中被選中,將導致派工失敗,所以需要在結果中過濾沖突邊。
[0013]第六步,如果CE為空,直接使用匈牙利算法,得到的最大匹配就是派工結果。而如果CE不為空,即存在沖突邊,就需要對時序二分圖G使用改進后的匈牙利算法,得到一組最大匹配。然后根據(jù)沖突邊CE進行過濾,得到有效的最大匹配。最后根據(jù)自定義的優(yōu)化規(guī)則,選擇一個最優(yōu)結果。
[0014]匈牙利算法改進的主要原理如下:
[0015]如果二分圖是連通的,則通過循環(huán)使用匈牙利算法,得到二分圖的所有的最大匹配。如果不連通,先將二分圖分割成幾個連通的子圖,分別使用匈牙利算法求出子圖的所有最大匹配。然后子圖合并,算法結果做笛卡爾積運算,就能得到整個二分圖的所有的最大匹配。
[0016]本發(fā)明與現(xiàn)有技術相比,其顯著優(yōu)點:(I)派工的全過程都有算法和系統(tǒng)支撐,人工參與度低,自動化水平高。(2)節(jié)省了相當大的人力資源和其他資源,大大降低了派工成本。(3)派工速度大大提升,減少了派工時間,提高了派工效率。(4)派工過程中充分考慮了能力約束和時間約束等限制條件,結果更加精確合理,智能化水平高。(5)派工的結果經(jīng)過了最大限度的優(yōu)化,針對派工問題的時序性特點,通過迭代增量式地派工,提高了人力資源的利用效率,可以獲得更大的經(jīng)濟效益。
【附圖說明】
[0017]圖1是本發(fā)明的任務預處理示意圖。
[0018]圖2是本發(fā)明的節(jié)點分身示意圖。
[0019]圖3是本發(fā)明的時序二分圖構造示意圖。
[0020]圖4是本發(fā)明的方法流程圖。
【具體實施方式】
[0021]本發(fā)明實質上是基于匈牙利算法的一種改進。
[0022]下面結合附圖對本發(fā)明作進一步詳細描述。
[0023]結合圖1,對一組任務預處理的過程如下:按照任務開始的時間排序,得到有序任務組R= {rpivivrj。現(xiàn)在有三個工作人員(P1, p2,,分別對每一個任務A計算P廣到 Pi= {p 2,P3Kp2= {p 2,P3Kp3= {p 1.P3I ^ P4= {p 3}。其中,Pi= {p2,p3}意味著有能力完成任務F1并且可以在指定的時間段內完成任務的人員為P 2和P 3o同理,P2、PjP P 4也是這樣理解。
[0024]因為每一個任務執(zhí)行時間的長短不一樣,所以圖1中代表任務的小矩形長度也不一樣,任務1"2的執(zhí)行時間明顯要長于r#Pr4。而且任意兩個任務在時序上要么是沖突的,要么是有次序的。從圖1中可以看出,rjPr 2是沖突的,r jP r 3則是有次序的,r jP 1*4也是有次序的。以此類推,沖突關系記為1,時序關系記為2,就可以得到?jīng)_突矩陣C。
[0025]結合圖2,詳細說明計算人員總集P的過程。初始