崔 璐,毋 濤
(西安工程大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,陜西 西安 710600)
工作流就是業(yè)務(wù)流程的自動(dòng)化[1],在此過(guò)程中,多個(gè)參與者之間按照一定的過(guò)程規(guī)則自動(dòng)進(jìn)行文檔、信息或任務(wù)傳遞,以實(shí)現(xiàn)預(yù)期的業(yè)務(wù)目標(biāo),這也是過(guò)程、事件、資源的有機(jī)結(jié)合。隨著工作流技術(shù)的發(fā)展,工作流管理系統(tǒng)被應(yīng)用于各種領(lǐng)域,工作流管理系統(tǒng)的性能也成為人們關(guān)注的焦點(diǎn)。不同的任務(wù)分配策略對(duì)工作流管理系統(tǒng)的性能有很大的影響,因此需要制定良好的任務(wù)分配策略,選擇工作流引擎調(diào)度系統(tǒng)中合適的資源來(lái)操作任務(wù)。工作流系統(tǒng)中的資源,根據(jù)適用領(lǐng)域的區(qū)別,可分為設(shè)備資源、人力資源、應(yīng)用程序或者網(wǎng)絡(luò)資源等[2],其中人力資源一般指擁有一定經(jīng)驗(yàn)或?qū)I(yè)知識(shí)的任務(wù)執(zhí)行者。實(shí)際中隨著業(yè)務(wù)流程規(guī)模的增大,往往存在多個(gè)流程實(shí)例同時(shí)到達(dá)的情景,當(dāng)工作流系統(tǒng)頻繁地把任務(wù)分配給能力值或經(jīng)驗(yàn)值高的執(zhí)行者,此類執(zhí)行者任務(wù)列表中待處理任務(wù)會(huì)不斷增多,負(fù)載過(guò)重,反而不能及時(shí)處理完所分配的任務(wù)。且執(zhí)行時(shí)間相近但重要性不同的任務(wù),對(duì)執(zhí)行者的負(fù)載影響也不同。當(dāng)任務(wù)列表中有多個(gè)重要任務(wù)時(shí),執(zhí)行者通常會(huì)優(yōu)先執(zhí)行重要任務(wù)而無(wú)暇顧及不太重要的任務(wù)。這些都是業(yè)務(wù)流程執(zhí)行中的重要影響因素,當(dāng)工作流整體負(fù)載不均衡時(shí),會(huì)導(dǎo)致工作流系統(tǒng)響應(yīng)時(shí)間過(guò)長(zhǎng)、資源利用率不高、工作流環(huán)境穩(wěn)定性遭到破壞等問(wèn)題。
文獻(xiàn)[3]提出了一種新的以優(yōu)化執(zhí)行時(shí)間和處理成本為目標(biāo)的工作流調(diào)度算法,旨在隱式評(píng)估適合VM執(zhí)行的實(shí)例范圍,以避免會(huì)導(dǎo)致截止時(shí)間違規(guī)的過(guò)高投入。文獻(xiàn)[4]利用三角模糊數(shù)將執(zhí)行者的專業(yè)技能、成員協(xié)作度、任務(wù)完成質(zhì)量這類定義模糊的影響因素進(jìn)行量化處理,再對(duì)各個(gè)影響因素分配合適的權(quán)重因子,最后選取綜合分?jǐn)?shù)高的候選者分配任務(wù)。但這些研究都沒(méi)有考慮在工作流的實(shí)際應(yīng)用中,當(dāng)實(shí)例密集到達(dá)時(shí)執(zhí)行者負(fù)載對(duì)流程的影響。文獻(xiàn)[5]給出結(jié)合協(xié)作相容與負(fù)載均衡的多目標(biāo)聯(lián)合優(yōu)化任務(wù)分配算法,提高流程執(zhí)行效率,卻缺少任務(wù)重要性對(duì)任務(wù)負(fù)載的影響分析。文獻(xiàn)[6]從任務(wù)和用戶的屬性出發(fā),提出一種兼顧用戶經(jīng)驗(yàn)值和任務(wù)負(fù)載的任務(wù)分配算法,并針對(duì)任務(wù)的重要程度給任務(wù)負(fù)載加影響因子,但是執(zhí)行者根據(jù)主觀定義任務(wù)的重要程度,不能客觀反映任務(wù)重要性差異與流程執(zhí)行時(shí)間長(zhǎng)短的關(guān)系。文獻(xiàn)[7]針對(duì)網(wǎng)格環(huán)境下工作流調(diào)度問(wèn)題,提出了一種基于遺傳算法和蟻群算法相結(jié)合的混合機(jī)制,優(yōu)化模型的最大完成時(shí)間和成本。將蟻群這種自適應(yīng)算法應(yīng)用于工作流調(diào)度中,提升流程的實(shí)用性與效率。綜上所述,為了提高流程的性能,該文提出基于蟻群算法的兼顧關(guān)鍵任務(wù)和工作負(fù)載的任務(wù)分配算法,不僅考慮了執(zhí)行者的當(dāng)前工作負(fù)載,還考慮了關(guān)鍵任務(wù)重要性對(duì)工作負(fù)載的影響。
任務(wù)分配的目標(biāo),是根據(jù)執(zhí)行者們的預(yù)測(cè)負(fù)載所在分區(qū)和任務(wù)列表中待執(zhí)行的關(guān)鍵任務(wù)數(shù)量,來(lái)選擇負(fù)載相對(duì)較小的執(zhí)行者執(zhí)行任務(wù),以平衡實(shí)例密集時(shí)執(zhí)行者的負(fù)載壓力,同時(shí)讓關(guān)鍵任務(wù)減少等待時(shí)間,盡可能并行。該文先通過(guò)執(zhí)行者的負(fù)載狀況,將執(zhí)行者動(dòng)態(tài)分成輕、中、重三個(gè)負(fù)載分區(qū),然后將輕負(fù)載分區(qū)中的執(zhí)行者作為候選集合,然后從集合中選擇待執(zhí)行關(guān)鍵任務(wù)最少的執(zhí)行者,對(duì)其進(jìn)行任務(wù)分配。
1.2.1 關(guān)鍵任務(wù)確定
工作流的應(yīng)用中,企業(yè)通常關(guān)心的是:(1)在實(shí)現(xiàn)業(yè)務(wù)預(yù)期目標(biāo)的前提下,完成整個(gè)工作流最少需要多少時(shí)間?(2)哪些任務(wù)是影響工作流進(jìn)度的關(guān)鍵?
可以采用帶權(quán)值的有向無(wú)環(huán)圖DAG來(lái)表示工作流[8],由于流程中存在并行路徑,所以完成流程的最短時(shí)間是從開始點(diǎn)到完成點(diǎn)的持續(xù)時(shí)間最長(zhǎng)路徑的長(zhǎng)度。有向無(wú)環(huán)圖中,路徑長(zhǎng)度最長(zhǎng)的路徑叫做關(guān)鍵路徑[9]。關(guān)鍵路徑上的活動(dòng)叫做關(guān)鍵活動(dòng),因此可以依據(jù)有向無(wú)環(huán)圖的關(guān)鍵活動(dòng),得到工作流中影響流程進(jìn)度的關(guān)鍵任務(wù)。
以圖1所示的簡(jiǎn)單的領(lǐng)料流程為例,求取關(guān)鍵任務(wù)。
圖1 簡(jiǎn)單的領(lǐng)料流程
圖2 圖1流程圖對(duì)應(yīng)的有向無(wú)環(huán)圖
這樣就把問(wèn)題轉(zhuǎn)換為求圖2所示帶權(quán)值的有向無(wú)環(huán)圖G的關(guān)鍵路徑CP(critical path)。當(dāng)關(guān)鍵任務(wù)執(zhí)行時(shí)間延長(zhǎng)或縮短時(shí),關(guān)鍵路徑的執(zhí)行時(shí)間即流程的總執(zhí)行時(shí)間也相應(yīng)延長(zhǎng)或縮短,所以關(guān)鍵任務(wù)的分配方式與執(zhí)行效率對(duì)提高流程效率起到了重要作用。在計(jì)算關(guān)鍵路徑時(shí),可以參考流程日志中的歷史流程數(shù)據(jù)獲得每個(gè)任務(wù)的平均執(zhí)行時(shí)間作為標(biāo)準(zhǔn)。
1.2.2 關(guān)鍵任務(wù)量化
(1)
其中,MAX(Ecp(ui))是當(dāng)前執(zhí)行者中關(guān)鍵任務(wù)量最大值,MIN(Ecp(ui))是當(dāng)前執(zhí)行者中關(guān)鍵任務(wù)量最小值。Ecp(ui)值越大,執(zhí)行者ui的相對(duì)關(guān)鍵任務(wù)量越大,在執(zhí)行者負(fù)載相近時(shí),獲得任務(wù)的概率越小。
任務(wù)執(zhí)行者的當(dāng)前工作負(fù)載是完成自己工作列表中所有任務(wù)所需要的時(shí)間。分配任務(wù)時(shí)該文假設(shè)同一任務(wù)的可選執(zhí)行者執(zhí)行本任務(wù)的能力相似,即執(zhí)行同樣任務(wù),不同執(zhí)行者的時(shí)間相同。則可以定義執(zhí)行者ui的當(dāng)前工作負(fù)載為Wcur(ui):
(2)
其中,TAk是任務(wù)執(zhí)行者ui的當(dāng)前任務(wù)列表集合,列表中每個(gè)任務(wù)Tk的數(shù)量為nk,完成時(shí)間為ωk。設(shè)執(zhí)行者ui的當(dāng)前工作負(fù)載為Wcur(ui),若現(xiàn)將任務(wù)Tk分配給ui,則ui的預(yù)測(cè)負(fù)載Wpred(ui)為:
Wpred(ui)=Wcur(ui)+ωk
(3)
(4)
據(jù)此,設(shè)共有n個(gè)執(zhí)行者,完成工作流中所有任務(wù)的總負(fù)載Wtotal為:
(5)
(6)
依據(jù)該文的主要思想,結(jié)合關(guān)鍵任務(wù)與負(fù)載的分配模型為:
(7)
即流程中任務(wù)分配的執(zhí)行者相對(duì)關(guān)鍵任務(wù)量與總負(fù)載都盡可能少。
蟻群算法(ant colony system)是一種用來(lái)尋找優(yōu)化路徑的概率型算法,由Marco Dorigo于1992年在他的博士論文中提出[10]。算法模擬螞蟻的覓食行為,在螞蟻尋找食物的過(guò)程中不斷釋放被稱為信息素的物質(zhì),螞蟻的棲息地到食物源的路徑越短,該路徑上通過(guò)的螞蟻的數(shù)量就越多,信息素就越強(qiáng),從而指引螞蟻的行為[11]。即蟻群之間通過(guò)信息素的濃度變化進(jìn)行信息交流和相互協(xié)作,濃度越高的路徑選擇的概率越大[12]?;诖嗽撐奶岢鲆环N基于ACO的任務(wù)分配策略,除此之外還使用關(guān)鍵路徑算法從歷史流程數(shù)據(jù)中確定關(guān)鍵任務(wù)節(jié)點(diǎn)集合,在此基礎(chǔ)上考慮負(fù)載均衡通過(guò)聯(lián)合優(yōu)化策略給出初始解并計(jì)算流程總負(fù)載。
將工作流進(jìn)行形式化描述后得到帶全權(quán)值的有向無(wú)環(huán)圖G,先通過(guò)拓?fù)渑判虻玫搅鞒倘蝿?wù)的拓?fù)湫蛄衪opoSort[],基于此與歷史流程數(shù)據(jù)確定流程的關(guān)鍵路徑,從而得到流程關(guān)鍵任務(wù)集合CT。
目標(biāo)是在保持執(zhí)行者負(fù)載相對(duì)平衡的基礎(chǔ)上,選擇相對(duì)關(guān)鍵任務(wù)量較小的執(zhí)行者,以減少關(guān)鍵任務(wù)堆積對(duì)執(zhí)行者與流程的影響。
CTLB算法的執(zhí)行流程為:
(3)循環(huán)(1)和(2)直至所有流程中所有任務(wù)分配完成。
根據(jù)蟻群算法的基本原理,可以了解到算法主要依靠啟發(fā)式信息構(gòu)建和信息素濃度更新來(lái)求取可行解。本節(jié)主要分為三部分,包括算法初始化、狀態(tài)轉(zhuǎn)移規(guī)則和信息素更新規(guī)則[13]。
2.3.1 算法初始化
利用ACO-CT算法進(jìn)行任務(wù)分配的目的是尋找Timemin時(shí)的解。解的形式是一個(gè)執(zhí)行者編號(hào)組成的數(shù)組,每個(gè)執(zhí)行者對(duì)應(yīng)流程中一個(gè)事件的分配結(jié)果,且這個(gè)結(jié)果在考慮了關(guān)鍵任務(wù)影響與負(fù)載均衡的同時(shí)保證流程執(zhí)行時(shí)間盡可能短。
初始化時(shí),數(shù)組各元素為0,調(diào)用CTLB得到TAS為一組初始解,計(jì)算得到WL_Total。若經(jīng)過(guò)一次迭代后,得到的總負(fù)載優(yōu)于WL_Total,則更新總負(fù)載與執(zhí)行序列解。任務(wù)Tk與執(zhí)行者ui之間的信息素矩陣τ初始化為:
(8)
其中,n為工作流中執(zhí)行者的數(shù)量。并采用自適應(yīng)蟻群算法MMAS對(duì)基本蟻群算法的改進(jìn),將τ(k,i)限定在[τmin,τmax]之間,以避免算法陷入局部最優(yōu)。
2.3.2 狀態(tài)轉(zhuǎn)移規(guī)則
算法采用概率選擇的方法構(gòu)建可行解,將起始任務(wù)的執(zhí)行者隨機(jī)分配給不同的螞蟻,完成該任務(wù)后,螞蟻按照狀態(tài)轉(zhuǎn)移概率對(duì)下一個(gè)任務(wù)選擇合適的執(zhí)行者,不斷重復(fù)這個(gè)過(guò)程直至執(zhí)行完所有任務(wù)。狀態(tài)轉(zhuǎn)移概率主要由信息素濃度和啟發(fā)式信息確定[14],而本算法啟發(fā)式信息的構(gòu)建目標(biāo)是引導(dǎo)螞蟻往列表中關(guān)鍵任務(wù)較少的執(zhí)行者移動(dòng),即相對(duì)關(guān)鍵任務(wù)量越少,執(zhí)行者被選擇的概率越大。啟發(fā)式信息構(gòu)建如下:
(9)
則算法的狀態(tài)轉(zhuǎn)移規(guī)則為:
(10)
表示螞蟻從可選執(zhí)行者列表UAk中選擇執(zhí)行者ui的概率。其中α是信息啟發(fā)式因子,β是期望啟發(fā)式因子,利用因子控制信息素和啟發(fā)式信息的相對(duì)影響程度。
2.3.3 信息素更新規(guī)則
對(duì)于信息素更新規(guī)則,選擇改進(jìn)后的全局更新規(guī)則,即不再對(duì)所有螞蟻進(jìn)行更新,而是對(duì)每次迭代中最優(yōu)的螞蟻進(jìn)行更新[15]。當(dāng)一次迭代中每個(gè)螞蟻都完成工作流的任務(wù)分配,并得到一個(gè)執(zhí)行者序列與流程總負(fù)載,選擇最優(yōu)的流程總負(fù)載與初始解的流程總負(fù)載比較,對(duì)較優(yōu)的那個(gè)信息素進(jìn)行更新,更新規(guī)則如下:
(11)
其中,ρ是信息揮發(fā)因子,則1-ρ是殘留因子,WL_Totalgb是全局最優(yōu)螞蟻的工作流總負(fù)載,TASgb是最優(yōu)螞蟻的任務(wù)分配的執(zhí)行者序列。
2.3.4 ACO-CT算法執(zhí)行流程
基于以上三部分,ACO-CT的算法執(zhí)行流程可概述為:
(1)流程初始化,先建立關(guān)鍵路徑模型,得到流程的關(guān)鍵任務(wù)合集,并在此過(guò)程中得到每個(gè)任務(wù)的前驅(qū)、后繼任務(wù)集合。
(2)在步驟(1)的基礎(chǔ)上,通過(guò)CTLB聯(lián)合優(yōu)化算法得到一組初始解暫時(shí)作為最優(yōu)解TASgb,并計(jì)算初始解的流程總負(fù)載暫時(shí)作為最優(yōu)解WL_Totalgb。
(3)初始化任務(wù)與執(zhí)行者的信息素矩陣、算法迭代次數(shù)、蟻群規(guī)模、信息揮發(fā)因子、信息啟發(fā)式因子和期望啟發(fā)式因子。
(4)在一次迭代中,每只螞蟻根據(jù)公式(10)的狀態(tài)轉(zhuǎn)移概率選擇任務(wù)的執(zhí)行者,將執(zhí)行者序列保存下來(lái),計(jì)算每個(gè)螞蟻的流程總負(fù)載,并與WL_Totalgb的值相比較,大于則舍去,小于則更新WL_Totalgb,并將該解的執(zhí)行者序列賦值給TASgb,成為新的最優(yōu)解。直到一次迭代完成。
(5)對(duì)TASgb使用公式(11)更新信息素。
(6)重復(fù)步驟(4)和(5),直至迭代全部完成。
ACO-CT算法偽代碼如下:
輸入:Tesk set:T={{Tk}}; Executor set:U={ui};
輸出:Ant path with optimal execution sequence TASgb
(1)Initialization ant number :Ants; Number of iterations:Max_Itera,
(2)Parameters:Rho,Alpha,Beta
(3)Workflow mode and Critical task set {CT}:according to Get_TopoSort and Get_CTasks
(4)Use CTLB algorithm to generate a set of initial solutions as theTASgb,and calculate the total workload WL_Totalgbaccording to CAL_WLT
(5)FOR eachpher(k,i)=pInitaccording to formula (8)
(6)ENDFOR
(7)FOR m=1 TO Max_Itera DO
(8)FOR t=1 TO Ants DO
(9)FOR eachTk∈TDO
(10)TASt(k)=0; /*Assignment of ant t to taskTk
(11)ENDFOR
(12)FOR eachTk∈TDO
(13)IFTkis the first task in workflow
(14)Randomly chooseui∈UAkas the executor for ant t
(15)TASt(k)=ui
(16)ELSE choose an executorui∈UAkaccording to formula (10)
(17)TASt(k)=ui
(18)ENDIF
(19)ENDFOR
(20)ENDFOR
(21)FOR t=1 TO Ants DO
(22)CalculateWL_Totaltaccording to algorithm CAL_WLT
(23)IF(WL_Totalt (24)Update the optimal ant to t (25)TASgb←TASt (26)WL_Totalgb←WL_Totalt (27)ENDIF (28)ENDFOR (29)FOR eachTk∈TDO (30)Update pheromone matrixpher(k,i)using the TASgbaccording to formula(11) (31)ENDFOR (32)ENDFOR 本節(jié)通過(guò)仿真實(shí)驗(yàn)檢驗(yàn)ACO-CT算法解決任務(wù)分配問(wèn)題的可行性。實(shí)驗(yàn)從3方面評(píng)估算法的性能:(1)不同實(shí)例規(guī)模下3種任務(wù)分配算法的完成時(shí)間;(2)3種任務(wù)分配算法下任務(wù)執(zhí)行者的負(fù)載均衡情況;(3)ACO-CT算法的收斂性。仿真采用圖1簡(jiǎn)單領(lǐng)料流程的工作流模型。根據(jù)歷史流程數(shù)據(jù)得到各個(gè)任務(wù)的處理時(shí)間,如圖3所示。 圖3 領(lǐng)料流程各任務(wù)時(shí)間 歷史流程數(shù)據(jù)通過(guò)算法可以得出此流程的關(guān)鍵任務(wù)集CT={T1,T2,T4,T6,T7,T8,T9,T10,T11},實(shí)驗(yàn)中,設(shè)置負(fù)載區(qū)間閾值εL、εM分別為0.34和0.67。在工作流實(shí)例不同到達(dá)概率的情況下,分別用ACO-CT、HEFT、Round_Robin算法進(jìn)行仿真實(shí)驗(yàn)。對(duì)每一個(gè)實(shí)例到達(dá)率,對(duì)每種算法進(jìn)行50次仿真,并用同樣的實(shí)例在不同算法上仿真,實(shí)驗(yàn)結(jié)果采用50次仿真的平均值進(jìn)行分析。 結(jié)合領(lǐng)料的實(shí)例,平均完成時(shí)間比較如圖4所示。 圖4 不同實(shí)例規(guī)模下的工作流完成時(shí)間 從圖4可以看出,ACO-CT算法在實(shí)例規(guī)模不斷增加的情況下結(jié)果都比較好,尤其在實(shí)例規(guī)模較大時(shí)表現(xiàn)更好,這是因?yàn)锳CO-CT兼顧負(fù)載均衡與關(guān)鍵任務(wù)量,一定程度上縮短了關(guān)鍵任務(wù)過(guò)多時(shí)對(duì)執(zhí)行者的影響。HEFT僅僅考慮了期望任務(wù)負(fù)載,忽略了多實(shí)例同時(shí)到達(dá)時(shí)負(fù)載不均的影響,但在實(shí)際的工作中,一般工作流系統(tǒng)應(yīng)用于企業(yè)時(shí)實(shí)例規(guī)模都會(huì)較大,所以ACO-CT考慮更加全面。 現(xiàn)分析3種任務(wù)分配算法下任務(wù)執(zhí)行者的負(fù)載情況。實(shí)驗(yàn)采用流程實(shí)例規(guī)模為8時(shí),各個(gè)執(zhí)行者的任務(wù)負(fù)載情況。 圖5 實(shí)例規(guī)模為8時(shí)各個(gè)執(zhí)行者任務(wù)負(fù)載 從圖5可以看出,執(zhí)行者在多流程實(shí)例且每個(gè)執(zhí)行者都可以執(zhí)行多個(gè)任務(wù)的情況下,Round_Robin算法執(zhí)行者任務(wù)負(fù)載差距較為明顯,而ACO-CT與HEFT算法可以使執(zhí)行者負(fù)載相對(duì)平衡。HEFT算法的思路很簡(jiǎn)單,就是將所有任務(wù)都分配能夠使它最早完成的執(zhí)行者,也可以一定程度上讓負(fù)載相對(duì)均衡,然而ACO-CT算法因?yàn)樘崆皩?duì)可選執(zhí)行者進(jìn)行負(fù)載分區(qū),并在一定分區(qū)內(nèi)繼續(xù)考慮關(guān)鍵任務(wù)量的影響,所以不僅考慮到了執(zhí)行者之間的負(fù)載均衡,還減少了整體完成時(shí)間。 由于ACO-CT算法是一個(gè)啟發(fā)式算法,所以對(duì)算法的收斂性進(jìn)行檢驗(yàn)。圖6是在實(shí)例規(guī)模為10時(shí)的最優(yōu)序列完成時(shí)間。隨著迭代次數(shù)的增加,ACO-CT算法的最優(yōu)序列的完成時(shí)間逐漸減小,且本算法引入了MMAS的思想進(jìn)行改進(jìn),避免了過(guò)早收斂的現(xiàn)象。 圖6 ACO-CT算法收斂性 從圖6可以看出,在迭代160次左右時(shí),算法就收斂了,就收斂速度來(lái)看,不存在過(guò)早收斂的現(xiàn)象。 該文研究了基于蟻群的工作流負(fù)載平衡任務(wù)分配算法,通過(guò)對(duì)工作流中執(zhí)行者關(guān)鍵任務(wù)量對(duì)流程性能的影響以及執(zhí)行者之間負(fù)載均衡進(jìn)行建模,采用蟻群算法實(shí)現(xiàn)模型,并通過(guò)實(shí)驗(yàn)驗(yàn)證了算法的有效性。然而,文中的關(guān)鍵任務(wù)的確認(rèn)是基于歷史流程數(shù)據(jù)的,忽略了實(shí)際運(yùn)行過(guò)程中任務(wù)執(zhí)行時(shí)間的動(dòng)態(tài)變化,下一步將考慮動(dòng)態(tài)關(guān)鍵路徑的研究;此外,對(duì)于帶環(huán)的工作流,需要進(jìn)一步處理,例如等效替換等,將帶環(huán)的工作流抽象成一個(gè)任務(wù),具體方案還需進(jìn)一步研究。3 仿真實(shí)驗(yàn)
4 結(jié)束語(yǔ)