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