本發(fā)明涉及一種遺傳算法應(yīng)用領(lǐng)域,特別是涉及一種利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的方法及系統(tǒng)。
背景技術(shù):
排班是合理安排上班人力的重要手段,在所有企業(yè)中均廣泛應(yīng)用。排班主要是根據(jù)公司實(shí)際業(yè)務(wù)發(fā)展需要,合理的安排各個時間段內(nèi)上班人力,保證滿足公司業(yè)務(wù)需求,且又不引起人力資源的浪費(fèi)。一般企業(yè)中大都由管理人員或者專門的排班師進(jìn)行手動排班,該工作方式存在天然缺陷:
1、排班結(jié)果難以量化比較,排班人員的經(jīng)驗(yàn)、技能、應(yīng)變能力等各方面的綜合素質(zhì)都會影響排班結(jié)果。
2、排班的效率低、耗時長,對排班人員的工作壓力提出較高要求。
3、每個排班人員有自己的排班風(fēng)格和偏好,會引起排班結(jié)果存在較大差異,對上班員工的自我調(diào)節(jié)能力存在一定的考驗(yàn)。
為了避免手工排班上述諸多缺點(diǎn),采用計(jì)算機(jī)自動排班,可以在各個維度上進(jìn)行量化比較,避免排班人員的經(jīng)驗(yàn)、技能、偏好而導(dǎo)致的排班結(jié)果差異。
業(yè)內(nèi)計(jì)算機(jī)自動排班算法中,遺傳算法是一種較成熟且有成功案例的算法,但該算法存在一些天生的缺點(diǎn):遺傳算法適合在低維度上進(jìn)行隨機(jī)搜索,如果擴(kuò)展到高緯度上時,很容易導(dǎo)致算法在迭代過程中發(fā)散,且收斂空間難以確定。
很多企業(yè)實(shí)際排班過程中,不但要安排各個班次的上下班時間,還需安排各個班次吃飯、休息等其他活動的開始、結(jié)束時間。如果所有活動的安排步驟均在遺傳迭代過程中通過隨機(jī)搜索實(shí)現(xiàn),必將導(dǎo)致遺傳算法在高緯度進(jìn)行搜索,使最終結(jié)果無法收斂。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是為了克服現(xiàn)有技術(shù)中企業(yè)在實(shí)際排班過程中,對所有活動的安排均在遺傳迭代過程中通過隨機(jī)搜索實(shí)現(xiàn),導(dǎo)致遺傳算法在高緯度進(jìn)行搜索,使最終結(jié)果無法收斂的缺陷,提供一種利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的方法及系統(tǒng)。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:
本發(fā)明的目的在于提供了一種利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的方法,其特點(diǎn)在于,包括以下步驟:
s1、利用遺傳算法通過交叉、變異生成每代遺傳中的每個個體,獲得非業(yè)務(wù)活動時間段內(nèi)的冗余人力;
s2、計(jì)算在一開始時間到一結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動的組的集合;
s3、計(jì)算所述集合內(nèi)所有組安排非業(yè)務(wù)活動所消耗的人力總量;
s4、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi),安排所有組的非業(yè)務(wù)活動后的冗余人力;
s5、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力;
s6、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
較佳地,步驟s1中利用以下公式計(jì)算非業(yè)務(wù)活動時間段內(nèi)的冗余人力:
di=ai-fi,ibegin≤i≤iend;
其中di表示冗余人力,ai表示安排非業(yè)務(wù)活動之前每個時間段的實(shí)際人力,fi表示每個時間段的預(yù)測人力,ibegin表示開始時間,iend表示結(jié)束時間。
較佳地,步驟s3中利用以下公式計(jì)算人力總量:
其中,labor表示人力總量,lj表示每個待安排非業(yè)務(wù)活動的組的人員數(shù)目,g表示所述集合。
較佳地,步驟s4中利用以下公式計(jì)算安排所有組的非業(yè)務(wù)活動后的冗余人力:
其中r表示安排所有組的非業(yè)務(wù)活動后的冗余人力。
較佳地,步驟s5中利用以下公式計(jì)算人力:
其中ai表示在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力。
較佳地,步驟s6中利用以下公式計(jì)算人力:
di=ai-ai;
其中di表示在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
本發(fā)明的目的在于還提供了一種利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的系統(tǒng),其特點(diǎn)在于,包括:
第一計(jì)算模塊,用于利用遺傳算法通過交叉、變異生成每代遺傳中的每個個體,獲得非業(yè)務(wù)活動時間段內(nèi)的冗余人力;
第二計(jì)算模塊,用于計(jì)算在一開始時間到一結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動的組的集合;
第三計(jì)算模塊,用于計(jì)算所述集合內(nèi)所有組安排非業(yè)務(wù)活動所消耗的人力總量;
第四計(jì)算模塊,用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi),安排所有組的非業(yè)務(wù)活動后的冗余人力;
第五計(jì)算模塊,用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力;
第六計(jì)算模塊,用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
較佳地,所述第一計(jì)算模塊利用以下公式計(jì)算非業(yè)務(wù)活動時間段內(nèi)的冗余人力:
di=ai-fi,ibegin≤i≤iend;
其中di表示冗余人力,ai表示安排非業(yè)務(wù)活動之前每個時間段的實(shí)際人力,fi表示每個時間段的預(yù)測人力,ibegin表示開始時間,iend表示結(jié)束時間。。
較佳地,所述第三計(jì)算模塊利用以下公式計(jì)算人力總量:
其中,labor表示人力總量,lj表示每個待安排非業(yè)務(wù)活動的組的人員數(shù)目,g表示所述集合。
較佳地,所述第四計(jì)算模塊利用以下公式計(jì)算安排所有組的非業(yè)務(wù)活動后的冗余人力:
其中r表示安排所有組的非業(yè)務(wù)活動后的冗余人力。
較佳地,所述第五計(jì)算模塊利用以下公式計(jì)算人力:
其中ai表示在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力。
較佳地,所述第六計(jì)算模塊利用以下公式計(jì)算人力:
di=ai-ai;
其中di表示在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
本發(fā)明的積極進(jìn)步效果在于:本發(fā)明在排班過程中通過局部優(yōu)化的思想來安排吃飯、休息等非業(yè)務(wù)活動,從而可以避免遺傳算法的高緯度搜索,確保算法結(jié)果的收斂,并且用固定的邏輯安排上班過程中的其他非業(yè)務(wù)活動的時間,保證安排結(jié)果的客觀和公平。
附圖說明
圖1為本發(fā)明的實(shí)施例1的利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的方法的流程圖。
圖2為本發(fā)明的實(shí)施例2的利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的系統(tǒng)的模塊示意圖。
具體實(shí)施方式
下面通過實(shí)施例的方式進(jìn)一步說明本發(fā)明,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。
實(shí)施例1
如圖1所示,本實(shí)施例的利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的方法包括以下步驟:
步驟101、利用遺傳算法通過交叉、變異生成每代遺傳中的每個個體,獲得非業(yè)務(wù)活動時間段內(nèi)的冗余人力;
步驟102、計(jì)算在一開始時間到一結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動的組的集合;
步驟103、計(jì)算所述集合內(nèi)所有組安排非業(yè)務(wù)活動所消耗的人力總量;
步驟104、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi),安排所有組的非業(yè)務(wù)活動后的冗余人力;
步驟105、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力;
步驟106、計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
其中,優(yōu)選地,步驟101中利用以下公式計(jì)算非業(yè)務(wù)活動時間段內(nèi)的冗余人力:
di=ai-fi,ibegin≤i≤iend;
其中di表示冗余人力,ai表示安排非業(yè)務(wù)活動之前每個時間段的實(shí)際人力,fi表示每個時間段的預(yù)測人力,ibegin表示開始時間,iend表示結(jié)束時間。
步驟103中利用以下公式計(jì)算人力總量:
其中,labor表示人力總量,lj表示每個待安排非業(yè)務(wù)活動的組的人員數(shù)目,g表示所述集合。
步驟104中利用以下公式計(jì)算安排所有組的非業(yè)務(wù)活動后的冗余人力:
其中r表示安排所有組的非業(yè)務(wù)活動后的冗余人力。
步驟105中利用以下公式計(jì)算人力:
其中ai表示在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力。
步驟106中利用以下公式計(jì)算人力:
di=ai-ai;
其中di表示在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
本發(fā)明的主要思想如下:
自動排班算法采用遺傳算法實(shí)現(xiàn),排班的粒度以組為單位,每組的人力預(yù)先設(shè)定。每次排班周期為周,人力預(yù)測精確到15分鐘,每周的人力預(yù)測數(shù)據(jù)有672點(diǎn),排班的目的就是使一周之內(nèi)672個時間段的實(shí)際人力分布和預(yù)測人力盡量的匹配。遺傳算法中每個個體的適應(yīng)度函數(shù)為:
每個個體的適應(yīng)度為每個個體所有時間段內(nèi)實(shí)際人力和預(yù)測人力差值的平方和,適應(yīng)度越小表示該個體越優(yōu)秀。
數(shù)學(xué)上有如下規(guī)則:
在
以此為基礎(chǔ):
對應(yīng)每個交叉變異完成后的個體,其fi和ai均為已知值,
通過上式即可針對每個個體計(jì)算在非業(yè)務(wù)活動時間段內(nèi)可以消耗的人力di;
因此,上述公式要求fi-ai為某一恒定值,即安排非業(yè)務(wù)活動之后的實(shí)際人力分布應(yīng)該和預(yù)測人力之間的差值恒定。
在本實(shí)施例中,每個組的上下班時間由遺傳算法隨機(jī)搜索生成,每個組的非業(yè)務(wù)活動時間由上述局部優(yōu)化方法進(jìn)行安排。
而加入局部優(yōu)化思想后的遺傳算法,其具體步驟如下:
1.擇優(yōu)交叉:計(jì)算每一代中所有解的適應(yīng)度,根據(jù)每個解的適應(yīng)度擇優(yōu)(按概率)選擇合適的父代,通過隨機(jī)交叉兩個父代的方式計(jì)算得到下一代所有解。(說明:計(jì)算下一代的每個解均需重新按概率隨機(jī)選擇其父代)。
2.變異:在實(shí)際的業(yè)務(wù)所約束的調(diào)整范圍內(nèi),隨機(jī)調(diào)整各個組的上班時間和上班時長。
3.全局調(diào)整:調(diào)整各個班次的上班時間和上班時長,達(dá)到每天各個組的班次平衡,保證公平公正。
4.局部優(yōu)化:安排非業(yè)務(wù)活動,根據(jù)上述的原理,計(jì)算出每個解可以安排非業(yè)務(wù)活動的人力分布。將需要安排此項(xiàng)活動的組按預(yù)定的規(guī)則排序,依次安排每個組參加該活動的時間。
說明:上述步驟中的2、3、4在遺傳算法過程中,每代的所有解均需獨(dú)立操作,某代中每個解都是一個獨(dú)立的個體,針對每個個體都要變異、調(diào)整平衡、安排非業(yè)務(wù)活動之后,再參加下一代遺傳的擇優(yōu)。
上述說明存在以下情況,由于非業(yè)務(wù)活動會占用2個時間段,即要求di、di+1均大于待安排非業(yè)務(wù)活動的組的人力時,才可以在i時間安排該組開始非業(yè)務(wù)活動。這將使得某些計(jì)劃用來安排非業(yè)務(wù)活動的人力資源被浪費(fèi)掉,從而導(dǎo)致在所有用于非業(yè)務(wù)活動的人力資源都消耗殆盡時,仍然存在少部分組沒有安排非業(yè)務(wù)活動的情況。此時需將已經(jīng)安排過非業(yè)務(wù)活動的組全部回滾,并修正di(一般將所有的di加上所有組的平均人力)后重新安排非業(yè)務(wù)活動,該回滾修正過程可以重復(fù)多次,直到所有組都安排完非業(yè)務(wù)活動為止。
上述的回滾修正過程為遺傳算法局部優(yōu)化步驟中的子過程,請具體步驟如下:
1、在安排非業(yè)務(wù)活動之前,備份對應(yīng)的解、可以安排該非業(yè)務(wù)活動的人力分布。
2、所有需安排非業(yè)務(wù)活動的組,按預(yù)定規(guī)則排序后,依次安排每個組參加該非業(yè)務(wù)活動的時間,直至可以使用的人力資源耗盡。
3、如果此時所有待安排的組均已安排,則局部優(yōu)化步驟完成。若仍存在少數(shù)組未能安排參與,則恢復(fù)可安排非業(yè)務(wù)活動的人力分布和安排非業(yè)務(wù)活動之前的解,并在安排非業(yè)務(wù)活動的人力分布的每個時間段上增加所有組的平均人力(即安排非業(yè)務(wù)活動的人力分布整體向上平移,增加可用的人力資源總量),重新執(zhí)行上述步驟,直至所有組都已被安排。
上述的局部優(yōu)化的算法,帶有強(qiáng)制安排非業(yè)務(wù)活動思想,即在人力資源不足時也會強(qiáng)制安排非業(yè)務(wù)活動(此時fi-ai為負(fù)值),在遺傳算法迭代過程中,每一代的所有個體強(qiáng)制進(jìn)行上述的安排非業(yè)務(wù)活動步驟,在擇優(yōu)產(chǎn)生子代的過程中fi-ai趨于0的解會被優(yōu)先選中,經(jīng)過數(shù)百代的遺傳后,最優(yōu)個體的fi-ai將趨于0,即安排非業(yè)務(wù)活動后的人力分布已經(jīng)非常接近預(yù)測值。
對于上班過程中的休息、noshow等活動也可用同樣的思想安排,若遇到80%的組要安排休息等特殊需求時,可以在上述步驟3中計(jì)算休息所消耗的人力時,乘以相應(yīng)的系數(shù)即可,在后續(xù)的安排過程中,可用人力資源耗盡,即可退出,完成各組休息、noshow時間的安排。
實(shí)施例2
如圖2所示,本實(shí)施例提供了一種利用遺傳算法在自動排班中安排非業(yè)務(wù)活動的系統(tǒng),包括第一計(jì)算模塊1、第二計(jì)算模塊2、第三計(jì)算模塊3、第四計(jì)算模塊4、第五計(jì)算模塊5以及第六計(jì)算模塊6;
其中,所述第一計(jì)算模塊1用于利用遺傳算法通過交叉、變異生成每代遺傳中的每個個體,獲得非業(yè)務(wù)活動時間段內(nèi)的冗余人力;
所述第二計(jì)算模塊2用于計(jì)算在一開始時間到一結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動的組的集合;
所述第三計(jì)算模塊3用于計(jì)算所述集合內(nèi)所有組安排非業(yè)務(wù)活動所消耗的人力總量;
所述第四計(jì)算模塊4用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi),安排所有組的非業(yè)務(wù)活動后的冗余人力;
所述第五計(jì)算模塊5用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力;
所述第六計(jì)算模塊6用于計(jì)算在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
其中,優(yōu)選地,所述第一計(jì)算模塊1利用以下公式計(jì)算非業(yè)務(wù)活動時間段內(nèi)的冗余人力:
di=ai-fi,ibegin≤i≤iend;
其中di表示冗余人力,ai表示安排非業(yè)務(wù)活動之前每個時間段的實(shí)際人力,fi表示每個時間段的預(yù)測人力,ibegin表示開始時間,iend表示結(jié)束時間。
所述第三計(jì)算模塊3利用以下公式計(jì)算人力總量:
其中,labor表示人力總量,lj表示每個待安排非業(yè)務(wù)活動的組的人員數(shù)目,g表示所述集合。
所述第四計(jì)算模塊4利用以下公式計(jì)算安排所有組的非業(yè)務(wù)活動后的冗余人力:
其中r表示安排所有組的非業(yè)務(wù)活動后的冗余人力。
所述第五計(jì)算模塊5利用以下公式計(jì)算人力:
其中ai表示在所述開始時間到所述結(jié)束時間之內(nèi)安排非業(yè)務(wù)活動之后的人力。
所述第六計(jì)算模塊6利用以下公式計(jì)算人力:
di=ai-ai;
其中di表示在所述開始時間到所述結(jié)束時間之內(nèi)每個時間段內(nèi)可安排非業(yè)務(wù)活動的人力。
雖然以上描述了本發(fā)明的具體實(shí)施方式,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。