專利名稱:使用遺傳算法進(jìn)行資源配置子系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及項(xiàng)目管理軟件中的資源配置。
背景技術(shù):
二十世紀(jì)五十年代中期創(chuàng)立了仿生學(xué),許多科學(xué)家從生物中尋求新的用于人造系統(tǒng)的靈感,一些科學(xué)家分別獨(dú)立地從生物進(jìn)化的機(jī)理中發(fā)展出適合于現(xiàn)實(shí)世界復(fù)雜問題優(yōu)化的進(jìn)化計(jì)算方法(Evolutionary Computation),主要有Holland,Bremermann等創(chuàng)立的遺傳算法,Rechenberg和Schwefe 等創(chuàng)立的進(jìn)化策略以及Fogel Owens,Walsh等創(chuàng)立的進(jìn)化規(guī)劃,同時(shí)代有一些生物學(xué)家Fraser Baricelli等做了生物系統(tǒng)進(jìn)化的計(jì)算機(jī)仿真,很遺憾他們沒有引入到人工系統(tǒng),遺傳算法、進(jìn)化策略及進(jìn)化規(guī)劃均來(lái)源于達(dá)爾文的進(jìn)化論,但三者側(cè)重的進(jìn)化層次不同,其中遺傳算法的研究最為深入、持久,應(yīng)用面也最廣。
遺傳算法是一種結(jié)合了有向和隨機(jī)兩種能力的通用搜索方法。該算法可以在對(duì)搜索空間進(jìn)行深度搜索和廣度搜索之間維持很好的平衡。在遺傳算法中,由選擇機(jī)制來(lái)深度搜索積累的信息,由遺傳算子來(lái)廣度搜索解空間中新的區(qū)域。遺傳算法是解決疑難問題的得力助手。
項(xiàng)目管理中的資源平衡問題就是一個(gè)疑難問題,先后出現(xiàn)過(guò)圖解法和公式判斷法,無(wú)論使用圖解法還是公式判斷法都會(huì)出現(xiàn)如下的問題如果使用的網(wǎng)絡(luò)比較簡(jiǎn)單,同時(shí)需要進(jìn)行平衡的資源數(shù)量很少,那么圖解法和公式判斷法都是可以使用的。因?yàn)榧词官Y源日歷已確定,但修改起來(lái)比較方便。如果使用的網(wǎng)絡(luò)圖比較復(fù)雜,并且需要進(jìn)行平衡的資源數(shù)量非常多,那么圖解法和公式判斷法就不再適合,因?yàn)檫@種事后調(diào)平衡的方法涉及的資源太多,要修改的資源日歷也太多,因而資源的供需矛盾也就增多。遺傳算法在解決項(xiàng)目管理中的資源平衡問題方面發(fā)揮了重要的作用,但仍然沒有考慮資源日歷,這是很大的遺憾。因?yàn)殡S著社會(huì)的發(fā)展,管理的作用越來(lái)越大,精細(xì)化管理受到前所未有的重視,細(xì)節(jié)決定成功更是對(duì)精細(xì)化管理的高度概括。因此,在使用任何方法進(jìn)行資源配置時(shí)都應(yīng)考慮資源日歷,遺傳算法也不例外。因此目前資源平衡的遺傳算法還需要改進(jìn),我們經(jīng)過(guò)多年的研究彌補(bǔ)了這一缺陷。
發(fā)明內(nèi)容
為了克服目前遺傳算法在進(jìn)行資源平衡時(shí)沒有考慮資源日歷的缺陷,本發(fā)明設(shè)計(jì)的遺傳算法不僅能平衡資源,而且在平衡資源時(shí)考慮了資源日歷,徹底解決了資源平衡與資源短缺的矛盾,縮短了資源平衡的調(diào)整時(shí)間,提高了管理效率。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是選用十字鏈表作為網(wǎng)絡(luò)圖的數(shù)據(jù)結(jié)構(gòu),選用數(shù)組、結(jié)構(gòu)和單鏈表作為求解資源平衡的遺傳算法的數(shù)據(jù)結(jié)構(gòu)。
該問題的數(shù)學(xué)模型如下 min Qmax/Qm(1) s.t. ti-tj≥dj,j∈Sj(2) ti≥0,i=1,2,…,n(4) 其中Qmax—最高峰日期的每天資源總需用量 Qm—資源每天平均需用量,其值為 Qt—第t天的資源需用量 ti—工序i的開始時(shí)間 dj—工序j的持續(xù)時(shí)間 Si—工序i的緊前工序集合 rik—工序i需要資源k的數(shù)量 bk—資源k的總量 Ati—ti時(shí)刻進(jìn)行的工序的集合 m—不同資源類型的數(shù)量 n—工序的數(shù)量 工序1和n是虛工序,其作用是標(biāo)記項(xiàng)目開始和結(jié)束的時(shí)間。目標(biāo)(1)是最小化資源需用量不均衡系數(shù)。約束(2)確保不違背前后約束。約束(3)確保任何時(shí)段內(nèi)所有工序消耗的資源k的數(shù)量不超過(guò)其限制的數(shù)量,這里面隱含著資源日歷的約束。
要想實(shí)現(xiàn)資源平衡的遺傳算法必須解決以下五個(gè)問題 ①將問題的解編碼為染色體; ②將染色體轉(zhuǎn)換為拓?fù)渑判颍? ③設(shè)計(jì)遺傳算子; ④從拓?fù)渑判虍a(chǎn)生一次調(diào)整; ⑤計(jì)算每次調(diào)整的目標(biāo)值。
1.將問題的解編碼為染色體 這一步驟是遺傳算法其余步驟的先決重要條件,因?yàn)橘Y源平衡的方法主要是靠利用工序的機(jī)動(dòng)時(shí)間來(lái)調(diào)整工序的開始時(shí)間,錯(cuò)開資源使用的高峰,從而達(dá)到資源均衡的目的。在對(duì)這一問題進(jìn)行編碼時(shí),要首先考慮工序之間的前后約束,否則任意的排序可能產(chǎn)生不可行的工序排序。如何有效地產(chǎn)生能夠處理工序前后約束的編碼是解決問題的關(guān)鍵,作者經(jīng)過(guò)翻閱大量的有關(guān)資料,認(rèn)為一種基于優(yōu)先權(quán)的編碼可以解決這一困難[76]。
遺傳算法的基因包含兩種信息基因座(基因在染色體結(jié)構(gòu)中的位置)和等位基因(基因的值)。這里用位置來(lái)表示一個(gè)工序的ID,基因的值用來(lái)表示工序的優(yōu)先權(quán),基因的值是一個(gè)[1,n]之間唯一的整數(shù),數(shù)值越大則優(yōu)先權(quán)越高,在產(chǎn)生初始群體時(shí)每個(gè)工序的優(yōu)先權(quán)都是隨機(jī)賦值的,范圍在1~n之間,n是指工序的數(shù)量。
2.染色體轉(zhuǎn)換為拓?fù)渑判? 拓?fù)渑判蚴且粋€(gè)所有工序的線性次序。產(chǎn)生一個(gè)拓?fù)渑判虻倪^(guò)程按照一次通過(guò)方式進(jìn)行從左到右產(chǎn)生一個(gè)拓?fù)渑判颍淮喂潭ㄒ粋€(gè)工序的次序。該過(guò)程的每一次迭代中所有的工序都處于下列三種狀態(tài)之一 ①已排序的工序已經(jīng)在構(gòu)造的拓?fù)渑判蛑械墓ば? ②合格工序那些所有緊前工序都是已排序工序的工序 ③自由工序所有其他工序 從染色體中產(chǎn)生拓?fù)渑判蛉缦? 第1步初始化 t←1(迭代下標(biāo)) PS[t]←1(初始化拓?fù)渑判? St←Q1(初始化優(yōu)先隊(duì)列) CUT[i]←1,i∈Q1(初始化割集中邊的數(shù)量) CUT[i]←0,i∈V-Q1 第2步執(zhí)行終止測(cè)試。如果PS[t]=n,進(jìn)入第6步,否則t←t+1,繼續(xù)。
第3步固定第t個(gè)工序,從優(yōu)先隊(duì)列St中移除最高優(yōu)先權(quán)的工序j并將其放入向量PS[t]。
第4步執(zhí)行割集更新 CUT[i]←CUT[i]+1,i∈Qj 第5步更新合格工序集合。對(duì)于所有的i∈Qj,如果CUT[i]=dIN(i),將i放入優(yōu)先隊(duì)列 St,返回第2步。
第6步返回完整的拓?fù)渑判騊S[·]。
3.設(shè)計(jì)遺傳算子 在傳統(tǒng)的算法中,雜交算子被用作主要的算子,遺傳系統(tǒng)的性能在很大程度上依賴于雜交算子的性能。變異算子在每個(gè)染色體中自動(dòng)產(chǎn)生隨機(jī)的變化,通常被用作次要的算子。但對(duì)于資源平衡的遺傳算子來(lái)說(shuō),變異算子甚至比雜交算子還要重要。這主要是由問題的性質(zhì)來(lái)決定的,因?yàn)橘Y源平衡要受到許多約束,比如機(jī)動(dòng)時(shí)間的約束,資源日歷的約束等等,而變異算子正好適應(yīng)約束多的情況。對(duì)于資源平衡的問題來(lái)說(shuō),我們采用以變異算子為主,以雜交算子為輔的模式來(lái)設(shè)計(jì)遺傳算子。雜交算子執(zhí)行廣度搜索以探索局部最優(yōu)以外的區(qū)域;變異算子用于執(zhí)行深度搜索以尋找改進(jìn)的解。
變異算子是通過(guò)基于局部搜索而得到的。局部搜索通過(guò)搜索當(dāng)前解的鄰域來(lái)尋找問題的改進(jìn)解。局部搜索的實(shí)現(xiàn)需要初始化當(dāng)前解、對(duì)于初始當(dāng)前解鄰域的定義和選擇下一個(gè)當(dāng)前解的方法。一個(gè)染色體的鄰域可以定義為通過(guò)成對(duì)交換產(chǎn)生的染色體集合。對(duì)于一對(duì)基因,一個(gè)稱作中心,該基因?qū)τ诮o定的鄰域來(lái)說(shuō)是固定的,另一個(gè)隨機(jī)選擇。在一個(gè)給定的鄰域中,如果一個(gè)染色體在適應(yīng)值上比其他任意染色體都要好,稱其為局部最優(yōu)。鄰域的規(guī)模影響局部最優(yōu)的質(zhì)量。小規(guī)模鄰域和大規(guī)模鄰域的折衷是清晰的鄰域數(shù)越大,找到優(yōu)秀鄰居的概率就越大,但尋找的時(shí)間也越長(zhǎng)。這種變異算子的算法如下 基因局部搜索的變異過(guò)程 inputsP(父代) outputC(子代) begin i←1 設(shè)P為當(dāng)前染色體; 選擇一個(gè)中心基因; while i<特定的數(shù)do 隨機(jī)選擇一個(gè)基因; 通過(guò)將其與中心基因交換產(chǎn)生一個(gè)鄰居; 評(píng)價(jià)這個(gè)鄰居; 如果這個(gè)鄰居比當(dāng)前染色體更優(yōu)秀,將其設(shè)為當(dāng)前染色體; i←i+1 end 保存C中的當(dāng)前基因; end 4.從拓?fù)渑判蛑挟a(chǎn)生一次調(diào)整 由于拓?fù)渑判蚪o出了工序的可行次序,所以就可以根據(jù)工序在拓?fù)渑判蛑谐霈F(xiàn)的次序和可得到的資源日歷來(lái)進(jìn)行資源配置,從而確定每個(gè)工序的開始時(shí)間。
設(shè)i為過(guò)程迭代的下標(biāo),Pi為工序i的所有緊前工序的集合,PS[·]是存儲(chǔ)拓?fù)渑判虻南蛄?,σj和φj分別為與工序j相關(guān)的開始和結(jié)束時(shí)間,bk[l]為記錄時(shí)間l可行的資源k數(shù)量的向量,dj為工序j的持續(xù)時(shí)間,rjk為工序j對(duì)資源k的消耗,Qk[l]為第l單位時(shí)間對(duì)資源k的需用量。根據(jù)給定的拓?fù)渑判蚝涂傻玫降馁Y源日歷確定每個(gè)工序開始和結(jié)束時(shí)間以及單位時(shí)間對(duì)資源k的需用量的過(guò)程如下 第1步初始化 i←1(迭代下標(biāo)) j←PS[i](初始化工序) σj←0,φj←0(初始化工序的開始時(shí)間和結(jié)束時(shí)間) bk[l]←bk,l=1,2,…,
k=1,2,…,m(初始化可用資源) Qk[l]←0,l=1,2,…,
k=l,2,…,m(初始化消耗資源) 第2步執(zhí)行終止測(cè)試。如果i=n,進(jìn)入第5步,否則i←i+1,繼續(xù)。
第3步確定開始時(shí)間和結(jié)束時(shí)間。
j←PS[i] bk[l]≥rjk,l=t,t+1,…,t+dj,k=1,2,…,m} φj←σj+dj 第4步更新可用資源并確定消耗資源 bk[l]←bk[l]-rjk,l=t,t+1,…,t+dj,k=l,2,…,m Qk[l]←Qk[l]+rjk,l=t,t+1,…,t+dj,k=1,2,…,m 返回第2步。
第5步停止。返回σj和φj。
5.計(jì)算每次調(diào)整的目標(biāo)值 由于目標(biāo)是資源不均衡系數(shù)K=Qmax/Qm,所以每次調(diào)整之后都要計(jì)算K值,K值越小資源平衡的效果越好。要計(jì)算出K值就必須首先計(jì)算出Qmax和Qm,計(jì)算Qmax和Qm的算法如下所示 begin Qm←0; Qmax←0; T←總工期; while i<T do Qm=Qm+Qk[l]; if Qk[l]>Qmax Qmax=Qk[l]; i←i+1 end Qm=Qm/T; end 本發(fā)明的有益效果是,使用遺傳算法進(jìn)行項(xiàng)目管理中的資源配置不僅提高了資源的平衡度,而且徹底解決了資源平衡與資源短缺的矛盾,縮短了資源平衡的調(diào)整時(shí)間,提高了管理效率。
圖1是使用遺傳算法進(jìn)行資源配置子系統(tǒng)流程圖。
具體實(shí)施例方式 使用遺傳算法進(jìn)行資源配置子系統(tǒng)是在Windows XP操作系統(tǒng)下使用C++Builder 6.0開發(fā)設(shè)計(jì)的。它的系統(tǒng)功能結(jié)構(gòu)如說(shuō)明書附圖中的圖1所示,在“對(duì)網(wǎng)絡(luò)圖進(jìn)行資源配置”模塊中提供了資源平衡的遺傳算法,該算法不僅能提高項(xiàng)目管理中的資源平衡度,而且在平衡資源時(shí)考慮了資源日歷,徹底解決了資源平衡與資源短缺的矛盾,縮短了資源平衡的調(diào)整時(shí)間,提高了管理效率。
權(quán)利要求
1.一種使用遺傳算法進(jìn)行資源配置的方法,包括
(1)用于從拓?fù)渑判蛑挟a(chǎn)生一次調(diào)整的步驟;
(2)用于計(jì)算每次調(diào)整的目標(biāo)值的步驟。
2.其特征是所述使用遺傳算法進(jìn)行資源配置的方法還包括
(1)在拓?fù)渑判蛑挟a(chǎn)生一次調(diào)整的步驟中,使用了bk[l]≥rjk和Qk[l]←Qk[l]+rjk,l=t,t+1,…,t+dj,k=1,2,…,m;
(2)在計(jì)算每次調(diào)整的目標(biāo)值的步驟中,使用了min Qmax/Qm和
全文摘要
一種用遺傳算法進(jìn)行資源配置的方法,如摘要附圖所示,它選用十字鏈表作為網(wǎng)絡(luò)圖的數(shù)據(jù)結(jié)構(gòu),選用數(shù)組、結(jié)構(gòu)和單鏈表作為求解資源平衡的遺傳算法的數(shù)據(jù)結(jié)構(gòu),遺傳算法中用到的數(shù)學(xué)模型為目標(biāo)min Qmax/Qm;約束ti-tj≥dj,j∈Si;∑rik≤bk,k=1,2,…,m;Qm=(1/T)∑Qt,該算法不僅能提高項(xiàng)目管理中的資源平衡度,而且在平衡資源時(shí)考慮了資源日歷,徹底解決了資源平衡與資源短缺的矛盾,縮短了資源平衡的調(diào)整時(shí)間,提高了管理效率。
文檔編號(hào)G06Q10/06GK101145219SQ20071012992
公開日2008年3月19日 申請(qǐng)日期2007年7月20日 優(yōu)先權(quán)日2007年7月20日
發(fā)明者周遠(yuǎn)成, 乞建勛, 李星梅 申請(qǐng)人:周遠(yuǎn)成