本發(fā)明涉及作業(yè)車間調(diào)度技術(shù)領(lǐng)域,具體地涉及多目標(biāo)柔性作業(yè)車間調(diào)度領(lǐng)域。
背景技術(shù):
柔性作業(yè)車間調(diào)度問題(FJSP)是一種機(jī)器和工序有多個(gè)選擇的調(diào)度。通常,它包含機(jī)器分配和工序調(diào)度。針對(duì)作業(yè)車間調(diào)度問題的方法是改進(jìn)生產(chǎn)的工作效率、靈活性和可靠性的關(guān)鍵方法。深入研究柔性作業(yè)車間調(diào)度問題并針對(duì)它提出高效的算法是具有很大的現(xiàn)實(shí)意義的,特別是對(duì)于在一個(gè)激烈競爭環(huán)境中的企業(yè)。
相比于傳統(tǒng)的作業(yè)車間調(diào)度問題,柔性作業(yè)車間調(diào)度問題有更少的約束,因此可行解的搜索空間更大。因此,它更困難,是一個(gè)NP—hard問題。針對(duì)這個(gè)問題的現(xiàn)有算法包括啟發(fā)式算法、遺傳算法和禁忌搜索等算法。
遺傳算法(Genetic Algorithm,GA)作為一種啟發(fā)性搜索方法,是基于“適者生存”機(jī)制設(shè)計(jì)的算法,其思想來源于達(dá)爾文的進(jìn)化論和孟德爾的遺傳學(xué)說。GA主要是通過從改進(jìn)交叉操作和變異操作的角度以適應(yīng)于具體問題的求解,但遺傳算法在交叉變異后可能產(chǎn)生不可行的解,且遺傳算法面臨全局近優(yōu)的問題。在這種情況下遺傳搜索和鄰域搜索組合的混合遺傳算法被提出來解決柔性作業(yè)車間調(diào)度問題,這種組合使算法同時(shí)具備了全局搜索能力和局部搜索能力。
即使很多的算法被提出,但都有復(fù)雜的編碼方式,使得解碼困難耗費(fèi)大量的計(jì)算時(shí)間。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的上述不足,本發(fā)明要解決的問題是提供一種混合遺傳算法解決多目標(biāo)柔性作業(yè)車間調(diào)度問題。
本算法的目的則是克服現(xiàn)有技術(shù)中存在的:第一、編碼方式過于復(fù)雜,造成解碼困難,計(jì)算時(shí)間長;第二、可行的解(調(diào)度方案)在經(jīng)過交叉、變異操作后可能產(chǎn)生不可行的解(調(diào)度方案);第三、遺傳搜索具有全局近優(yōu),局部搜索可能作用于局部最優(yōu)解;第四、以加權(quán)法解決多目標(biāo)問題時(shí)各目標(biāo)函數(shù)的加權(quán)值不易確定;第五、一個(gè)解的鄰域解數(shù)量非常多,占用計(jì)算時(shí)間過多。
本發(fā)明為實(shí)現(xiàn)上述目的所采用的技術(shù)方案是:采用一種混合遺傳算法求解柔性作業(yè)車間調(diào)度問題,該算法包括以下步驟:
該算法的參數(shù)設(shè)定如下:種群規(guī)模N設(shè)為50、交叉概率Pc設(shè)定為0.5,突變概率Pm被設(shè)為0.05;局部搜索中對(duì)每個(gè)當(dāng)前解檢測(cè)k個(gè)鄰域解;算法迭代的終止條件是:如果最優(yōu)的個(gè)體在連續(xù)的20代中不能被改進(jìn),那么算法被停止。
步驟1:初始化種群N,采用一種新的編碼方式——基于工件調(diào)度編碼的矩陣染色體;
步驟2:更新精英組;
步驟3:通過相對(duì)重要性的權(quán)值法求出各目標(biāo)函數(shù)加權(quán)值,通過標(biāo)準(zhǔn)化各目標(biāo)函數(shù)確定適應(yīng)度函數(shù)值;
步驟4:遺傳搜索
步驟4.1:隨機(jī)選擇N/2個(gè)個(gè)體;
步驟4.2:通過概率Pc選擇兩個(gè)父代,進(jìn)行基于矩陣的單點(diǎn)交叉;
步驟4.3:通過概率Pm選擇父代,進(jìn)行基于矩陣的突變;
步驟5:對(duì)每個(gè)解進(jìn)行局部搜索;(與步驟4同時(shí)進(jìn)行)
步驟6:采用輪盤賭法選擇法隨機(jī)選擇S個(gè)體;
步驟7:迭代;
步驟8:更新精英組;
本發(fā)明的有益效果是:
第一、采用新的編碼方式,簡化了編碼過程,同時(shí)使得算法在運(yùn)行過程中幾乎不用進(jìn)行解碼;第二、采用專門用于本編碼方式的單點(diǎn)交叉算子和突變算子,更易得到可行解;第三、將遺傳算法的全局搜索能力與局部搜索結(jié)合,增強(qiáng)搜索能力;第四、采用相對(duì)重要性的加權(quán)法,使各目標(biāo)函數(shù)加權(quán)值更加符合實(shí)際生產(chǎn)情況。第五、只隨機(jī)選取當(dāng)前解的部分鄰域解進(jìn)行檢測(cè),避免了局部搜索占用過多的計(jì)算時(shí)間。
附圖說明
圖1本算法的詳細(xì)流程圖。
圖2表示柔性作業(yè)車間調(diào)度的示例圖。
圖3表示該算法的編碼方式示例圖。
圖4.1表示進(jìn)行單點(diǎn)交叉的兩個(gè)父代,其中粗線是交叉線,只交叉兩個(gè)父代交叉線以上的任務(wù)。
圖4.2表示交叉后的后代
圖5表示基于矩陣的突變過程示例,其中粗線是突變線,突變只通過交換突變線之間的兩行任務(wù)。
圖6表示專家評(píng)估法得出的各目標(biāo)的相對(duì)重要性。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明并不用于限定本發(fā)明?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明針對(duì)目前一些算法沒有考慮多目標(biāo)的柔性作業(yè)車間調(diào)度,且現(xiàn)有技術(shù)中遺傳算法存在全局近優(yōu)、解碼過程困難的問題。該發(fā)明提出了一種混合遺傳算法求解多目標(biāo)柔性作業(yè)車間調(diào)度問題。其中時(shí)間、成本和設(shè)備利用率被用來作為目標(biāo)函數(shù)。它把遺傳算法的全局搜索能力與鄰域搜索算子的局部搜索能力相結(jié)合。基于工序優(yōu)先關(guān)系,矩陣表示法被設(shè)計(jì)出來。AHP層次分析法被采取來找到每個(gè)目標(biāo)的加權(quán)值。每個(gè)目標(biāo)被標(biāo)準(zhǔn)化以避免傾向于一些目標(biāo),并且,通過所有目標(biāo)函數(shù)的線性和,原問題被轉(zhuǎn)化為單目標(biāo)優(yōu)化問題。
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
設(shè)在多目標(biāo)柔性作業(yè)車間調(diào)度中:n個(gè)工件表示為:J1,J2,...Jn;m臺(tái)機(jī)器表示為:M1,M2,...Mm;工件Ji的第j道工序表示為:Oij
多目標(biāo)柔性作業(yè)車間調(diào)度問題可以從圖2示例看出(圖中“0”表示該機(jī)器上沒有工序被加工)在一個(gè)生產(chǎn)系統(tǒng)中有m臺(tái)機(jī)器和n個(gè)工件。每個(gè)工件需要一些步驟來加工,并且在每個(gè)步驟中,有數(shù)個(gè)機(jī)器能夠被選擇。每個(gè)工件的步驟的順序是預(yù)先確定的。每個(gè)步驟能夠在不同的機(jī)器上以不同的成本被執(zhí)行。問題是如何確定開始時(shí)間、結(jié)束時(shí)間和工件的程序,以使完成時(shí)間、生產(chǎn)成本和設(shè)備利用率在滿足下列條件的情況下被最優(yōu)化:所有的機(jī)器在t=0時(shí)刻可用;一臺(tái)機(jī)器一次僅僅能夠加工一個(gè)工件;每個(gè)工序序列在相關(guān)的機(jī)器上的加工時(shí)間是已知的;每個(gè)工件的步驟是有順序的,任意兩個(gè)工件的步驟是無順序的。
多目標(biāo)柔性作業(yè)車間調(diào)度問題的數(shù)學(xué)模型可以表示為:完成時(shí)間通過所有工件的最大完成時(shí)間來評(píng)價(jià)。成本通過產(chǎn)品的加工成本和庫存成本來測(cè)量。設(shè)備利用率通過機(jī)器的總負(fù)荷來測(cè)量。他們被用來作為目標(biāo)函數(shù)。因此,問題的數(shù)學(xué)模型如下:
minf1=min(maxTi) (1)
受約束于Xijk=1或0, (4)
i=1,2,…,n,j=1,2,…,ni,k=1,2,…,m
其中Ti表示第i個(gè)工件的完成時(shí)間,C表示總消耗,Cijk表示第i個(gè)工件在第k臺(tái)機(jī)器的第j個(gè)工序中的消耗,表示在第i個(gè)工件在第k臺(tái)機(jī)器的第j個(gè)工序中的最早開始時(shí)間,表示第i個(gè)工件在第k臺(tái)機(jī)器的第j-1個(gè)工序的結(jié)束時(shí)間,也就是,在第j-1個(gè)工序中允許的最早時(shí)間。表示在加工第j-1個(gè)工序和第j個(gè)工序期間第i個(gè)工件的庫存消耗。Tijk表示第i個(gè)工件在第k臺(tái)機(jī)器的第j個(gè)工序中的加工時(shí)間。Xijk表示決策變量,它表示在第j個(gè)工序中第i個(gè)工件是否會(huì)被在第k臺(tái)機(jī)器上加工。如果是,Xijk取值1,否則,它取值0。ni是第i個(gè)工件的工序數(shù)。
針對(duì)建立的上述問題的模型,該算法的實(shí)施步驟如下:
該算法的參數(shù)設(shè)定如下:種群規(guī)模N設(shè)為50、交叉概率Pc設(shè)定為0.5,突變概率Pm被設(shè)為0.05;局部搜索中對(duì)每個(gè)當(dāng)前解檢測(cè)k個(gè)鄰域解;算法迭代的終止條件是:如果最優(yōu)的個(gè)體在連續(xù)的20代中不能被改進(jìn),那么算法被停止。
步驟1:初始化種群N,采用一種新的編碼方式——基于工件調(diào)度編碼的矩陣染色體;
一個(gè)合適的編碼方案是解決實(shí)際問題的第一步,通過考慮特性和柔性路徑結(jié)構(gòu),一個(gè)新的基于工件調(diào)度編碼的矩陣染色體編碼方案被設(shè)計(jì)出來。這種編碼方式是用i/j來表示第j個(gè)工件在第k臺(tái)機(jī)器上的第i個(gè)工序。采用此編碼方案對(duì)柔性作業(yè)車間調(diào)度問題而言更加簡單,且?guī)缀醪挥眠M(jìn)行解碼。
該編碼方案結(jié)合圖3描述如下:該發(fā)明研究的是柔性作業(yè)車間中4臺(tái)機(jī)器,2個(gè)工件,每個(gè)工件3道工序的的調(diào)度,圖3在矩陣第k行的元素i/j表示第j個(gè)工件在第k臺(tái)機(jī)器上的第i個(gè)工序,圖中0表示在第k臺(tái)機(jī)器上沒有沒有被加工的工件。例如,在第一行,1/2表示第二個(gè)工件在第一臺(tái)機(jī)器上的第一個(gè)工序,0表示在第一臺(tái)機(jī)器上沒有工件被加工
步驟2:更新精英組;
步驟2.1:將當(dāng)前種群中的非支配解復(fù)制入精英組;
步驟2.2:檢測(cè)精英組中的解,將被其他解所支配的解從精英組中刪除;
步驟3:通過相對(duì)重要性的權(quán)值法求出各目標(biāo)函數(shù)加權(quán)值,通過標(biāo)準(zhǔn)化各目標(biāo)函數(shù)確定適應(yīng)度函數(shù)值;
步驟3.1根據(jù)專家評(píng)估法給出的相對(duì)重要性關(guān)系如圖6,通過式(10)、式(11)、式(12)確定各目標(biāo)函數(shù)的加權(quán)值;
步驟3.2:通過式(7)計(jì)算每個(gè)解的適應(yīng)度函數(shù)值;
步驟4:遺傳搜索
步驟4.1:隨機(jī)選擇N/2個(gè)個(gè)體
步驟4.2:通過概率Pc選擇兩個(gè)父代,進(jìn)行基于矩陣的單點(diǎn)交叉;
結(jié)合圖4該交叉通過概率pc選擇兩個(gè)父代后,矩陣中一個(gè)被稱為交叉線(粗線)的水平線被隨機(jī)地選擇。兩個(gè)父代交換交叉線上面的任務(wù)得到兩個(gè)后代中的結(jié)果。如果后代是不可行的,那么合適的調(diào)整被進(jìn)行來得到兩個(gè)可行的后代。
步驟4.3:通過概率Pm選擇父代,進(jìn)行基于矩陣的突變;
結(jié)合圖5該突變是通過概率pm選擇父代。對(duì)于每個(gè)被選擇的個(gè)體,矩陣中被稱為突變線(粗線)兩個(gè)水平線被隨機(jī)地選擇。這些線之間的調(diào)度被隨機(jī)地交換,但是機(jī)器順序保持不變。突變線之間有兩行,突變只通過交換這兩行來進(jìn)行。
步驟5:對(duì)每個(gè)解進(jìn)行局部搜索(與步驟4同時(shí)進(jìn)行);
步驟5.1:隨機(jī)選擇當(dāng)前解的一個(gè)鄰域解,鄰域解通過遺傳搜索中的突變算子產(chǎn)生:
步驟5.2:如果鄰域解優(yōu)于當(dāng)前解,則以鄰域解作為當(dāng)前解替換原當(dāng)前解,返回步驟5.1;否則,執(zhí)行下一步。
步驟5.3:如果已經(jīng)檢測(cè)了當(dāng)前解的k個(gè)鄰域解,則局部搜索結(jié)束,當(dāng)前解即為局部搜索的結(jié)果;否則,返回步驟5.1
步驟6:采用輪盤賭法選擇隨機(jī)選擇S個(gè)體;
步驟6.1::計(jì)算每個(gè)個(gè)體(xi)被遺傳到下一代的概率P(xi):
其中S為待選擇種群的種群規(guī)模
步驟6.2:計(jì)算每個(gè)個(gè)體(xi)的積累概率qi:步驟6.3:在[0,1]之間產(chǎn)生一個(gè)隨機(jī)數(shù)r
步驟6.4:如果r<q1,則個(gè)體x1被選擇;如果qk-1<r≤qk,則選擇個(gè)體xk
步驟6.5:對(duì)步驟6.3、6.4重復(fù)N次,以選擇到N個(gè)個(gè)體
步驟7:迭代;
如果算法已經(jīng)迭代了指定次數(shù),則執(zhí)行下一步驟(更新精英組);否則,返回步驟2。
步驟8:更新精英組
步驟8.1:將當(dāng)前種群中的非支配解復(fù)制入精英組;
步驟8.2:檢測(cè)精英組中的解,將被其他解所支配的解從精英組中刪除;
所述步驟1該算法使用的新的編碼方式,使得該算法幾乎不用解碼,因?yàn)榻獯a是一個(gè)染色體被轉(zhuǎn)換為問題的解的初始結(jié)構(gòu)的過程。也就是,他被轉(zhuǎn)化為調(diào)度方案。該編碼方式的每個(gè)矩陣能夠被很簡單地表示為一個(gè)調(diào)度方案,所以幾乎不用進(jìn)行解碼。
所述步驟3計(jì)算適應(yīng)度函數(shù)值具體描述如下:
本算法有三個(gè)目標(biāo),它們分別是時(shí)間、消耗和設(shè)備利用率。因?yàn)槿齻€(gè)目標(biāo)有不同的度量,所以他們不能通過定量指標(biāo)被公平地直接比較。標(biāo)準(zhǔn)化每個(gè)目標(biāo)是必要的。為了做這個(gè),AHP層次分析法被采取來確定目標(biāo)的加權(quán)值。f1表示時(shí)間,f2表示設(shè)備利用率,f3表示消耗。加權(quán)法解決(f1(x),f2(x),…,fn(x))問題時(shí),適應(yīng)度函數(shù)為
f(x)=w1f1(x)+w2f2(x)+…+wnfn(x), (7)
其中
wi≥0,i=1,2,…,n, (8)
w1+w2+…+wn=1. (9)
以圖6所示的三個(gè)目標(biāo)函數(shù)的相對(duì)重要性示例為例,加權(quán)值的確定方法如下:
1)將相對(duì)重要性表(圖6)轉(zhuǎn)化為矩陣:
2)對(duì)得到的矩陣的各列進(jìn)行標(biāo)準(zhǔn)化(即對(duì)每列分別乘以一個(gè)數(shù),使各列的和為1):
3)對(duì)各列標(biāo)準(zhǔn)化后的矩陣的各行進(jìn)行標(biāo)準(zhǔn)化(即先將每行求和,再對(duì)每行分別乘以一個(gè)數(shù),使各行的和為1):
4)對(duì)行標(biāo)準(zhǔn)化后的矩陣的每行依次表示三個(gè)目標(biāo)函數(shù)的加權(quán)值,即f1、f2、f3的加權(quán)值分別為w1=0.578、w2=0.302、w3=0.120。
所述步驟6描述為最優(yōu)個(gè)體被直接地保持到下一代種群,其他個(gè)體根據(jù)輪盤賭選擇法進(jìn)行選擇,用這種方式,差的個(gè)體有機(jī)會(huì)幸存,并且能夠避免早熟。