本發(fā)明涉及作業(yè)車間調(diào)度技術(shù)領(lǐng)域,具體地涉及用算法求解多目標(biāo)柔性作業(yè)車間調(diào)度問題。
背景技術(shù):
在制造業(yè)中,生產(chǎn)調(diào)度問題種類繁多、方法多樣,其中,作業(yè)車間調(diào)度問題(JSP)是最基本、最重要的機(jī)器調(diào)度問題,同時(shí)也是最困難的NP—hard問題。柔性作業(yè)車間調(diào)度問題(FJSP)是JSP的擴(kuò)展,它允許每個(gè)工序在給定的幾臺(tái)機(jī)器上加工,而不是一個(gè)機(jī)器。目前,對(duì)FJSP的研究已取得了一定的進(jìn)展,各種啟發(fā)式算法,進(jìn)化算法等,應(yīng)用到該領(lǐng)域。不乏有遺傳算法(GA)、粒子群算法(PSO)、局部搜索算法、模擬退火算法、蟻群算法等。這些算法雖有好的性能,但也有缺陷。比如:遺傳算法雖能通過種群間的相互作用,保持已經(jīng)搜索到的信息,這是基于單個(gè)個(gè)體搜索過程的優(yōu)化方法所無法比擬的。但是,遺傳算法也存在著計(jì)算速度較慢、過早收斂等問題。局部搜索算法是解決優(yōu)化問題的有效方法,但面臨迭代次數(shù)過多,消耗時(shí)間過長(zhǎng)的問題。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述不足之處,本發(fā)明要解決的技術(shù)問題是提供一種既有全局搜索能力也有局部搜索能力的算法,即改進(jìn)的文化基因算法求解柔性作業(yè)車間調(diào)度問題。
本發(fā)明的目的是:提高算法的求解速度與質(zhì)量。
本發(fā)明為實(shí)現(xiàn)上述目的,所采用的技術(shù)方案是:一種改進(jìn)文化基因算法求解柔性作業(yè)車間調(diào)度問題。該技術(shù)方案包括以下步驟:
步驟1:對(duì)種群規(guī)模POP_SIZE、最大迭代次數(shù)Gm、交叉和變異次數(shù)N、變異概率Pm等參數(shù)進(jìn)行初始化;
步驟2:隨機(jī)生成POP_SIZE個(gè)個(gè)體作為初始種群,計(jì)算每個(gè)個(gè)體的適應(yīng)度。設(shè)置迭代次數(shù)t=0,并設(shè)置當(dāng)前種群Pt=P0;
步驟3:對(duì)Pt進(jìn)行適應(yīng)度排序,得到其中的非支配個(gè)體集合Pnodom,并將非支配個(gè)體數(shù)Snodom設(shè)置為Pnodom中的元素個(gè)數(shù);
步驟4:將Pnodom中的個(gè)體直接拷貝到下一代種群Pt+1,設(shè)置Pt+1的個(gè)體個(gè)數(shù)n=Snodom;
步驟5:在Pt中隨機(jī)選擇一對(duì)個(gè)體:父代1和父代2;
步驟6:如果父代1、父代2的所有目標(biāo)函數(shù)值都相等,則轉(zhuǎn)步驟8;否則,執(zhí)行下一步驟;
步驟7:分別以概率Pm對(duì)父代1、父代2進(jìn)行變異,然后對(duì)父代1、父代2執(zhí)行N次交叉操作產(chǎn)生包含有2N個(gè)元素的子代個(gè)體集合ChildPop對(duì)ChildPop進(jìn)行適應(yīng)度排序,在其Pareto前端集合中隨機(jī)選擇一個(gè)個(gè)體進(jìn)入新種群Pt+1,設(shè)置Pt+1的個(gè)體個(gè)數(shù)n=n+1;
步驟8:如果n<POP_SIZE,轉(zhuǎn)步驟5;否則,執(zhí)行下一步驟;
步驟9:對(duì)種群Pt+1中的每個(gè)個(gè)體執(zhí)行爬山法局部搜索,并用所得的局部最
優(yōu)解替換原個(gè)體;
步驟10:將Pt+1和Pt合并,選擇最好的POP_SIZE個(gè)個(gè)體組成新的Pt+1;
步驟11:如果迭代次數(shù)t>Gm,則算法結(jié)束;否則,更新種群Pt=Pt+1,并設(shè)置迭代次數(shù)t=t+1,然后轉(zhuǎn)步驟3。
本發(fā)明的有益效果是:該改進(jìn)文化基因算法吸收了進(jìn)化算法和局部搜索算法的優(yōu)點(diǎn),不僅具有很強(qiáng)的全局搜索能力,同時(shí),每次交叉和變異后均進(jìn)行局部搜索,通過優(yōu)化種群分布,及早剔出不良個(gè)體,進(jìn)而減少迭代次數(shù),加快算法的求解速度。這樣既保證了較高的收斂性能,又能獲得高質(zhì)量的解。
該算法文化基因算法采用與進(jìn)化算法相似的框架與操作流程,并在此基礎(chǔ)上通過局部鄰域搜索使每次迭代的所有個(gè)體都達(dá)到局部最優(yōu)。進(jìn)化搜索進(jìn)行種群的全局廣度搜索,局部搜索進(jìn)行個(gè)體的局部深度搜索。文化基因算法充分吸收進(jìn)化算法和局部搜索算法的優(yōu)點(diǎn),它不僅具有很強(qiáng)的全局搜索能力。同時(shí),每次交叉和變異后均進(jìn)行局部搜索,通過優(yōu)化種群分布,及早剔出不良個(gè)體,進(jìn)而減少迭代次數(shù),加快算法的求解速度。這樣既保證了較高的收斂性能,又能獲得高質(zhì)量的解,從而使文化基因算法的搜索效率在某些問題領(lǐng)域比傳統(tǒng)進(jìn)化算法要快幾個(gè)數(shù)量級(jí)。
附圖說明:
圖1表示本算法的詳細(xì)流程圖
圖2表示一個(gè)3*3的可行調(diào)度方案示例圖
圖3表示該算法的SPX交叉示例圖
圖4表示本算法的插入變異示例圖
圖5表示本算法的替換變異示例圖
具體實(shí)施方式:
該文化基因算法對(duì)于求解多目標(biāo)柔性作業(yè)車間調(diào)度問題有很好的實(shí)用性,該算法采用與進(jìn)化算法相似的框架與操作流程,并在此基礎(chǔ)上通過局部鄰域搜索使每次迭代的所有個(gè)體都達(dá)到局部最優(yōu)。進(jìn)化搜索進(jìn)行種群的全局廣度搜索,局部搜索進(jìn)行個(gè)體的局部深度搜索。
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)一步的描述:
一、多目標(biāo)柔性作業(yè)車間調(diào)度問題,結(jié)合圖2
FJSP的描述如下:一個(gè)加工系統(tǒng)有m臺(tái)不同的機(jī)器M={Mj|j=1,2,...,m},要加工n個(gè)工件J={Ji|i=1,2,...,n}令Ki表示工件的總工序數(shù),Oik表示工件Ji的第k道工序k=1,2,...,Ki,所有工件的總工序數(shù)為Pikj表示工序Oik在機(jī)器Mj上的加工時(shí)間,工件的加工順序是預(yù)先確定的,工件Ji的每道工序Oik可以在mik臺(tái)不同的機(jī)器上加工mik=Mik,Mik為M中能加工Oik的機(jī)器集合。調(diào)度的目標(biāo)就是確定每個(gè)機(jī)器各個(gè)工件的加工順序和每個(gè)工序的開工時(shí)間,以使得某個(gè)指標(biāo)最優(yōu)。
為了簡(jiǎn)化問題,作出如下假設(shè):所有設(shè)備在t=0時(shí)刻都是可用的,所有工件在t=0時(shí)刻釋放,每一臺(tái)設(shè)備在同一時(shí)刻只能加工一道工序,一道工序一旦開始加工不允許中斷,每一個(gè)工件的工序順序是預(yù)定的不能修改,忽略設(shè)備的設(shè)置時(shí)間和工序之間的轉(zhuǎn)換時(shí)間。
二、算法的關(guān)鍵步驟說明
1、個(gè)體編碼和適應(yīng)度計(jì)算,結(jié)合圖2
算法采用基于工序的編碼表示調(diào)度問題的解。對(duì)經(jīng)過進(jìn)化操作產(chǎn)生的每個(gè)子代個(gè)體都將其解碼為活動(dòng)調(diào)度,計(jì)算出需要優(yōu)化的多個(gè)適應(yīng)度函數(shù)值。在局部搜索過程中,也將每個(gè)鄰域解解碼為活動(dòng)調(diào)度來計(jì)算適應(yīng)度函數(shù)值。局部搜索結(jié)束后,將選中的活動(dòng)調(diào)度轉(zhuǎn)化為基于工序的編碼,用新個(gè)體的編碼和適應(yīng)度替換原有個(gè)體的編碼和適應(yīng)度。
2、交叉操作,結(jié)合圖3
該算法采用集合分割交叉(Set-Partition Crossover,SPX)方法,執(zhí)行交叉操作,該方法的過程如下:
(1)將工件集合{1,2,...n}隨機(jī)分成兩個(gè)非空集合J1和J2。
(2)設(shè)置子代個(gè)體的當(dāng)前元素小標(biāo)為1,如果第一個(gè)父代的第一個(gè)元素屬于J1,則子代個(gè)體的當(dāng)前元素賦值為第一個(gè)父代個(gè)體的第一個(gè)元素,且當(dāng)前元素下標(biāo)加1。
(3)如果第二個(gè)父代個(gè)體的第一個(gè)元素屬于J2,則子代個(gè)體的當(dāng)前元素下標(biāo)加1,以此類推,直到子代個(gè)體的所有元素均賦值。
(4)交換兩個(gè)非空集合J1和J2中的元素,重復(fù)以上步驟可以得到另一個(gè)子代個(gè)體。
為了更清楚的描述本發(fā)明的SPX交叉,結(jié)合圖3,描述如下:將工件集合{1,2,3}分為兩個(gè)子集合J1={2},J2={1,3}。第一個(gè)父代個(gè)體[112313223]第一個(gè)基因不屬于J1,不執(zhí)行操作;第二個(gè)父代個(gè)體[221233113]第一個(gè)基因不屬于J2,不執(zhí)行操作;同樣兩個(gè)父代個(gè)體的第二個(gè)基因也都不屬于對(duì)應(yīng)的工件集合,不執(zhí)行操作。接下來第一個(gè)個(gè)體的第三個(gè)基因2屬于J1,將其填入子代個(gè)體,并將子代個(gè)體下標(biāo)加1為2;第二個(gè)個(gè)體的第三個(gè)基因1屬于J2,將其填入子代個(gè)體,并將子代個(gè)體下標(biāo)加1為3;以此類推,可得到子代個(gè)體[213321213]。交換J1和J2包含的元素,執(zhí)行類似的操作可得到第二個(gè)子代個(gè)體[121232133]。
本發(fā)明的SPX交叉較其他交叉方法的好處在于本交叉操作不是單純地將父代個(gè)體的特征繼承下來,而在繼承父代特征的同時(shí),發(fā)生了變異,也就是交叉方法中隱藏著變異行為。
3、變異操作
為了實(shí)現(xiàn)對(duì)調(diào)度空間的廣泛搜索,本算法以相等的概率Pm從插入變異和替換變異兩種方法中隨機(jī)選擇一種對(duì)種群中的個(gè)體進(jìn)行變異。
(1)插入變異,結(jié)合圖4:在父代個(gè)體中隨機(jī)選取一個(gè)基因,將其插入到另一個(gè)隨機(jī)選取的基因之前。如圖4的3*3調(diào)度問題的個(gè)體[112313223],假設(shè)隨機(jī)選擇的兩個(gè)基因分別為第三個(gè)基因位上的2和第八個(gè)基因位上的2,則執(zhí)行插入變異后的個(gè)體為[112231323]。
(2)替換變異,結(jié)合圖5:在父代個(gè)體中,隨機(jī)選一段基因串,然后將其插入到一個(gè)隨機(jī)選取的基因之前。如圖53*3調(diào)度問題的個(gè)體[112313223],假設(shè)隨機(jī)選擇的基因串是由第五個(gè)基因位至第八個(gè)基因位上的基因組成的[1322],隨機(jī)選中的另一個(gè)基因位第三個(gè)基因位上的基因2,則執(zhí)行替換變異后的個(gè)體為[11322233]。
4、爬山法局部搜索
由于爬山法只選擇比當(dāng)前解好的鄰域解,容易陷入局部最優(yōu),而常用的迭代局部搜索,禁忌搜索,變鄰域搜索法等雖能夠跳出局部最優(yōu),得到更好的解,但迭代次數(shù)較多,消耗時(shí)間較長(zhǎng)。于是本算法采用爬山法進(jìn)行局部搜索,克服了這些問題,既能夠跳出局部最優(yōu)得到更好的解,也能夠減少計(jì)算時(shí)間。
本算法的爬山法局部搜索過程如下:
對(duì)于優(yōu)化問題的一個(gè)解s,鄰域是指對(duì)s實(shí)施一個(gè)操作M后能夠得到的解的集合。用N(s)表示s的鄰域,則:N(s)={s'|s'=M(s)}。步驟如下:
(1)選定一個(gè)當(dāng)前解s;
(2)按照鄰域結(jié)構(gòu)定義生成s的一個(gè)鄰域解集合N(s);
(3)將N(s)中比s質(zhì)量差的解刪除得到改善解集合N(s)′;
(4)計(jì)算N(s)'中解的個(gè)數(shù)|N(s)'|;
(5)如果|N(s)'|不等于零,則從N(s)'中按照一定控制策略選擇一個(gè)替換s,轉(zhuǎn)本步驟2;否則轉(zhuǎn)本步驟6
(6)算法結(jié)束。
本算法采用此爬山法進(jìn)行局部搜索之后,對(duì)所有鄰域解集合進(jìn)行非劣排序,在其Pareto前端集合中隨機(jī)選擇一個(gè)個(gè)體替換當(dāng)前解。
上述結(jié)合附圖只是對(duì)該算法的描述,并不因此限定本發(fā)明,本發(fā)明的保護(hù)范圍依據(jù)權(quán)利要求書的內(nèi)容確定。