基于分散變鄰域搜索的阻塞流水車間調(diào)度方法
【專利摘要】針對(duì)帶有阻塞限制的流水車間調(diào)度問(wèn)題,將分散搜索與變鄰域搜索相結(jié)合,形成了分散變鄰域搜索算法。在算法中提出了基于工件塊的復(fù)合鄰域及其搜索方法,該鄰域的規(guī)模可以根據(jù)工件塊的大小動(dòng)態(tài)變化,從而實(shí)現(xiàn)局域搜索與廣域搜索的平衡。此外,提出用分散搜索的參考集來(lái)存儲(chǔ)算法搜索過(guò)程中得到的質(zhì)量與分散性較好的解,每次迭代過(guò)程中變鄰域搜索的初始解均從該集合中產(chǎn)生。有效地解決了阻塞流水車間調(diào)度問(wèn)題。
【專利說(shuō)明】基于分散變鄰域搜索的阻塞流水車間調(diào)度方法
【技術(shù)領(lǐng)域】
[0001]變鄰域搜索(variable neighborhood search, VNS)是一種簡(jiǎn)單而有效的智能優(yōu)化算法,與傳統(tǒng)的局域搜索算法只針對(duì)一個(gè)鄰域進(jìn)行搜索不同,其思想是利用兩個(gè)或兩個(gè)以上的鄰域,在搜索的過(guò)程中,算法會(huì)在不同的鄰域中按照給定的規(guī)則交替進(jìn)行搜索。由于鄰域結(jié)構(gòu)不同,在某一鄰域內(nèi)的局部最優(yōu)解在其它鄰域就可能不是局部最優(yōu)解,從而幫助算法跳出局部最優(yōu),增強(qiáng)算法的廣域搜索能力。VNS算法已經(jīng)廣泛應(yīng)用于求解各類組合優(yōu)化問(wèn)題,并取得了較好的結(jié)果。分散搜索(scatter search, SS)是一種基于種群的方法,其思想是從種群中選取質(zhì)量較好和分散性較好的解組成參考集,利用參考集來(lái)生成下一代的種群,以增強(qiáng)算法的廣域搜索能力。該算法已經(jīng)在許多組合最優(yōu)化問(wèn)題中得到了成功的應(yīng)用,例如車輛調(diào)度問(wèn)題和生產(chǎn)調(diào)度問(wèn)題。
【背景技術(shù)】
[0002]傳統(tǒng)的流水車間調(diào)度問(wèn)題(permutationflowshop scheduling problem, PFSP)由于具有較強(qiáng)的工業(yè)背景,一直是生產(chǎn)調(diào)度領(lǐng)域的重點(diǎn)研究課題。該問(wèn)題通常假設(shè)相鄰的機(jī)器之間具有存儲(chǔ)能力無(wú)限的中間庫(kù),工件的存儲(chǔ)不受任何限制。但是,在許多實(shí)際工業(yè)過(guò)程中,由于需要進(jìn)行連續(xù)生產(chǎn),一條生產(chǎn)線上的相鄰工序之間經(jīng)常是沒(méi)有中間庫(kù)的。在這種情況下,當(dāng)一個(gè)工件i在一臺(tái)機(jī)器j上完成加工后,如果下一機(jī)器j+Ι仍處于加工狀態(tài),那么該工件i就必須存儲(chǔ)在當(dāng)前機(jī)器j上,直到機(jī)器j+Ι的狀態(tài)變?yōu)榭臻e(可加工工件)為止。這樣,工件i和機(jī)器j就出現(xiàn)了阻塞現(xiàn)象。這種類型的PFSP問(wèn)題通常被稱為阻塞流水車間調(diào)度問(wèn)題(blocking PFSP)。如果問(wèn)題的優(yōu)化目標(biāo)是工件的最大完成時(shí)間(makespan,記為Cmax),那么該問(wèn)題也可以表示為Fm/blocking / Cmax0近年來(lái),該問(wèn)題逐漸受到了國(guó)內(nèi)外眾多學(xué)者的關(guān)注。
【發(fā)明內(nèi)容】
[0003]本發(fā)明所要解決的技術(shù)問(wèn)題是,將VNS算法與SS算法根據(jù)各自的特點(diǎn)進(jìn)行混合,提出一個(gè)分散變鄰域搜索算法(scatter VNS, SVNS),并設(shè)計(jì)了基于工件塊的鄰域搜索,以實(shí)現(xiàn)匕/ blocking / Cmax問(wèn)題的高效求解。
[0004]I問(wèn)題描述
[0005]Fm / blocking/Cmax問(wèn)題可以描述為:有η個(gè)待加工工件{1,2,...,η}需要在m個(gè)機(jī)器{1,2,...,m}上進(jìn)行加工。主要的約束條件包括:(I)每個(gè)工件i都必須從第I個(gè)機(jī)器開(kāi)始,依次經(jīng)過(guò)這m個(gè)機(jī)器進(jìn)行m道工序的加工,即各工件的加工順序相同;(2)工件一旦開(kāi)始加工,其加工過(guò)程不可中斷;(3)每個(gè)機(jī)器一次最多只能加工一個(gè)工件;(4)工件在當(dāng)前機(jī)器加工完成后,只有當(dāng)下一機(jī)器空閑時(shí)才能離開(kāi)當(dāng)前機(jī)器到達(dá)下一機(jī)器進(jìn)行加工,在下一機(jī)器空閑之前的時(shí)間內(nèi),該工件及當(dāng)前機(jī)器部被阻塞。
[0006]設(shè)工件i在機(jī)器j上的處理時(shí)間表示為Pij ;s=(s(l), s(2), , s (η))表示一個(gè)工件加工序列,其中S (k)表示排在第k個(gè)位置上的工件號(hào);工件s(k)在機(jī)器j上的離開(kāi)時(shí)間(記為Ds00ij)可以由以下公式計(jì)算:[0007] Ds(1),0=0 ;
[0008]D、⑴丨=Σ/=,,...,TH— I '[0009]Ds(k),o=Ds(k—ι),ι,k=2,._.., n ;[0010]Ds(k), j=max {I〕s (k),j-1+Ps:(k),j,Ds(H)[0011]其中,k=2,.? I,...m— I[0012]Ds(k),m=Ds(k),iii1-l+Ps (k),m,k=l,…,
[0013]那么所有工件 的最大完成時(shí)間makespan就可以定義為Cmax(s) =Ds(n),m。
[0014]2基于分散搜索和變鄰域搜索的混合SVNS算法
[0015]在傳統(tǒng)的VN算法中(如圖1所示),Shaking過(guò)程主要用來(lái)幫助算法跳出局部最優(yōu),但是經(jīng)過(guò)Shaking過(guò)程所得到的解s'的質(zhì)量如果很差,那么即使對(duì)其進(jìn)行局部搜索后,所得到的改進(jìn)解s"通常很難優(yōu)于解S,從而導(dǎo)致無(wú)效搜索的情況。為了避免這種情況,本文將分散搜索中的參考集R引入到VNS算法中來(lái),提出了分散變鄰域搜索算法,即SVNS0在算法中,參考集R用來(lái)存儲(chǔ)VNS算法搜索過(guò)程中所得到的質(zhì)量和分散性較好的解。Shaking過(guò)程變?yōu)閺膮⒖技疪中選取質(zhì)量和分散性較好的解,來(lái)生成新解s/,從而使得新解s,既能夠具有良好的質(zhì)量,又能夠兼顧分散性,同時(shí)避免了傳統(tǒng)VNS算法容易出現(xiàn)無(wú)效搜索的情況。
[0016]此外,在鄰域結(jié)構(gòu)的設(shè)計(jì)上,傳統(tǒng)VNS算法針對(duì)PFSP問(wèn)題,通常采用基于insertion移動(dòng)(從一個(gè)工件序列中刪除一個(gè)工件并將它插入到工件序列的其它位置上)和swap移動(dòng)(交換工件序列中兩個(gè)相鄰或不相鄰的工件)的鄰域結(jié)構(gòu)。針對(duì)以工件序列作為解的生產(chǎn)調(diào)度問(wèn)題,復(fù)合移動(dòng)(即一次執(zhí)行多個(gè)insertion或swap移動(dòng))的性能要優(yōu)于這兩個(gè)簡(jiǎn)單移動(dòng),其原因是復(fù)合移動(dòng)的鄰域規(guī)模更大,其能夠達(dá)到的搜索空間也更大。因此,本發(fā)明提出了基于工件塊的鄰域結(jié)構(gòu),其鄰域規(guī)模能夠根據(jù)工件塊的大小進(jìn)行變化。在所提出的SVNS算法中,鄰域規(guī)模按照從小到大進(jìn)行變化,從而實(shí)現(xiàn)在兼顧局域搜索能力的iu提下,提聞算法的廣域搜索能力。
[0017]基于以上所提出的改進(jìn)策略,本發(fā)明所提出的SVNS算法的流程如圖2所示,其中NijN2,...,Nk表示工件塊大小分別為1,2,...,k時(shí)的鄰域。從圖2中可以看出,與傳統(tǒng)VNS相比,新的SVNS算法的特點(diǎn)主要是:(I)使用分散搜索的參考集R來(lái)產(chǎn)生VNS搜索的初始解,而小是在當(dāng)前的鄰域Nk內(nèi)隨機(jī)產(chǎn)生一個(gè)解;(2)參考集R的更新機(jī)制中同時(shí)考慮了解的質(zhì)量和分散性;(3)局域搜索基于當(dāng)前的鄰域Nk,其規(guī)??梢圆粩嘣龃蟆R韵虏糠謱?duì)圖2中各部分進(jìn)行詳細(xì)介紹。
[0018]2.1初始解產(chǎn)生方法
[0019]由于會(huì)對(duì)一般的PFSP問(wèn)題,NEH方法[6]能夠獲得高質(zhì)量的初始解,因此本文采用NHl方法來(lái)產(chǎn)生Fm / blocking/Cmax問(wèn)題的初始解,然后再對(duì)該解執(zhí)行局部搜索。該算法的過(guò)程可以描述如下:
[0020]Stepl.按照各工件在所有階段的處理時(shí)間之和的非增順序把所有的η個(gè)工件排序,并設(shè)得到的序列為X= (X (I),X (2),...,X (η))。
[0021]Step2.從這個(gè)序列中取出前兩個(gè)工件x(l)和x(2),并假定只有這兩個(gè)工件要進(jìn)行加工,然后確定這兩個(gè)工件的最優(yōu)排序,假定為V =(x/ (1),ν (2))。[0022]Step3.將I件序列x中的下一個(gè)工件插入到前面所得到的部分解x'的最好位置上(該位置能使得目標(biāo)函數(shù)的增加量最小)。重復(fù)這一過(guò)程直到所有的工件都被插入到V中,從而得到一個(gè)初始解。
[0023]Step4.對(duì)得到的初始解使用N1鄰域進(jìn)行局域搜索(基于N1鄰域的局域搜索請(qǐng)見(jiàn)2.4)。
[0024]2.2參考集的更新[0025]為了保證參考集R(其大小為b)中的解能夠具有良好的質(zhì)量和分散性,提出了以下的更新策略。針對(duì)VNS搜索過(guò)程中由局部搜索得到的改進(jìn)解s",如果參考集R中解的個(gè)數(shù)未達(dá)到b,則直接將其加入到R中。如果參考集R中解的個(gè)數(shù)已經(jīng)達(dá)到b,則需要判斷解s"是否達(dá)到可插入到R中的條件,即是否滿足(Cmax(s" )"Cmax(sworst)) / Cmax(sworst) ^ a,其中Sworst表示參考集R中質(zhì)量最差的一個(gè)解,a是一個(gè)給定的門檻值。若解s"滿足加入條件,即該解的質(zhì)量在可接受的范圍內(nèi),則先將解s"插入到R中;然后再將參考集R中分散性最差的解刪除(不包括當(dāng)前最好解)。
[0026]在此,我們給出解的分散性的定義,即該解與集合R中其它解之間的最小距離。兩個(gè)解 S1=(S1Q), S1 (2),..., S1 (η))與 S2=(Sjl), S2 (2),..., S2 (η))之間的距離定義為
d(W) = Z/=|sgn(y),其中當(dāng) Sl (j) φ s2 (j)時(shí),sgn(j)=l ;否則 sgn(j)=0。當(dāng)兩個(gè)解的分散
性指標(biāo)相等時(shí),刪除質(zhì)量較差的那個(gè)解。
[0027]2.3從參考集中產(chǎn)生解
[0028]在圖2所示的Shaking過(guò)程中,VNS搜索的起始解V從參考集R中隨機(jī)選擇。但是,每個(gè)解的選擇概率不是相等的,而是由每個(gè)解已經(jīng)被選擇進(jìn)行局域搜索的次數(shù),以及進(jìn)行搜索后是否得到更好解的結(jié)果來(lái)決定的。在算法中,我們記錄參考集R中每個(gè)解st已經(jīng)被選擇進(jìn)行局域搜索的次數(shù)selt,當(dāng)一個(gè)新解加入到R中時(shí),該次數(shù)為I (為了防止計(jì)算過(guò)程中出現(xiàn)除以O(shè)的情況)。
[0029]初始情況下,每個(gè)解的選擇概率相同;如果某一個(gè)解St被選擇進(jìn)行局域搜索,而得到的改進(jìn)解未能進(jìn)入?yún)⒖技疪中,則selt=selt+l ;否則,將維持selt不變(因?yàn)閷?duì)該解的搜索結(jié)果是可以接受的,說(shuō)明繼續(xù)對(duì)其進(jìn)行搜索有較大可能獲得更好的解)。根據(jù)selt,可以得到b個(gè)解的選擇概率:
[0030]pt=rt / Σ t e Ert
[0031]其中rt= Σ teKselt / selt。從該式中可以看出,解st被選擇的次數(shù)越多并且其改進(jìn)解進(jìn)入R中的次數(shù)越少,那么該解的選擇概率就會(huì)越小。從而保證局域搜索只針對(duì)搜索質(zhì)量較好的解進(jìn)行,避免無(wú)效搜索。
[0032]2.4基于工件塊的鄰域搜索
[0033]基于工件塊的鄰域?qū)儆趶?fù)合移動(dòng)型鄰域,在執(zhí)行一次基于工件塊的移動(dòng)來(lái)產(chǎn)生一個(gè)新的鄰域解時(shí),針對(duì)的是工件塊內(nèi)的多個(gè)工件。該移動(dòng)的思想是首先從解(一個(gè)工件序列)中刪除一個(gè)由相鄰的k(k> I)個(gè)工件構(gòu)成的工件塊,然后從該工件塊中的第一個(gè)工件開(kāi)始,依次將其插入到原工件序列的最好位置上(即使目標(biāo)函數(shù)的增加量最小)。
[0034]針對(duì)一個(gè)給定的解s=(s(l),...,s (η)),基于大小為k的工件塊的鄰域(該鄰域記為Nk)搜索過(guò)程可以描述如下:
[0035]Stepl.設(shè)置鄰域搜索的迭代次數(shù)1=1,設(shè)置最好解sb=s.[0036]Step2.隨機(jī)刪除s中k個(gè)相鄰的工件,并假設(shè)被刪除工件的順序記為S(Cl1),s (d2),…,s (dk),剩余工件所組成的部分解記為s'.[0037]Step3.令 j=l。
[0038]Step4.將s ((Ij)插入到s'中最好的位置上(即插入到該位置上后目標(biāo)函數(shù)的增加量最小)。
[0039]Step5.令 j=j+l。如果 j < k,轉(zhuǎn) Step4 ;否則,得到一個(gè)新解 s',轉(zhuǎn) Step6。
[0040]Step6.如果 Cmax(s' ) < Cmax (sb),則令 s=sb=s'
[0041]Step7.令1=1+1。如果I≤Imax (最大迭代次數(shù)),轉(zhuǎn)St印2 ;否則停止,輸出sb。
[0042]從以上描述可以看出,針對(duì)鄰域Nk的搜索不是對(duì)整個(gè)鄰域進(jìn)行全搜索,而是隨機(jī)進(jìn)行Imax次搜索,其復(fù)雜度為0(lmaxkn)。這是因?yàn)榛诠ぜK的移動(dòng)比較復(fù)雜,針對(duì)該鄰域的全搜索需要消耗大量的計(jì)算時(shí)間。經(jīng)過(guò)實(shí)驗(yàn),我們發(fā)現(xiàn)對(duì)于小規(guī)模問(wèn)題進(jìn)行Imax=IO次搜索,對(duì)于大規(guī)模問(wèn)題進(jìn)行1_=20次搜索已經(jīng)可以得到比較好的結(jié)果。此外,在SVNS算法中,我們按照鄰域從小到大的順序進(jìn)行搜索,即按照N1, N2,...,Nk的順序,以保證搜索的深度逐步增加,鄰域的規(guī)模逐漸變大,從而兼顧局域搜索和廣域搜索的平衡。經(jīng)過(guò)實(shí)驗(yàn),在算法中k取值為5,即最大的鄰域?yàn)镹5。由于Imax和k要遠(yuǎn)小于工件的數(shù)目n,因此該鄰域搜索的復(fù)雜度并不會(huì)超過(guò)針對(duì)傳統(tǒng)insertion和swap鄰域的全搜索,二者的全搜索復(fù)雜度為O (η2),從而保證了在SVNS算法中使用這種類型的鄰域搜索的效率。
【專利附圖】
【附圖說(shuō)明】
[0043]圖1傳統(tǒng)VNS算法圖
[0044]圖2分散變鄰域搜索(SVNS)算法圖。
【權(quán)利要求】
1.基于分散變鄰域搜索的阻塞流水車間調(diào)度問(wèn)題求解方法,其特征在于:針對(duì)阻塞流水車間調(diào)度問(wèn)題將將分散搜索算法的參考集嵌入到變鄰域搜索算法中,形成混合的分散變鄰域搜索算法。
2.權(quán)利要求1所述的基于分散變鄰域搜索的阻塞流水車間調(diào)度問(wèn)題求解方法,其特征還在于:當(dāng)從參考集中選擇變鄰域搜索的起始解時(shí),依照局域搜索的次數(shù)與搜索質(zhì)量的反饋結(jié)果兩個(gè)因素進(jìn)行概率選擇。
3.權(quán)利要求1所述的基于分散變鄰域搜索的阻塞流水車間調(diào)度問(wèn)題求解方法,其特征還在于:在權(quán)利要求2的基礎(chǔ)上針對(duì)傳統(tǒng)鄰域類型在搜索深度和廣度上能力不足的問(wèn)題,提出了基于工件塊的鄰域搜索,其鄰域規(guī)模能夠根據(jù)工件塊的大小進(jìn)行變化。
【文檔編號(hào)】G06Q10/04GK103577900SQ201310594139
【公開(kāi)日】2014年2月12日 申請(qǐng)日期:2013年11月19日 優(yōu)先權(quán)日:2013年11月19日
【發(fā)明者】田慧欣, 李坤 申請(qǐng)人:天津工業(yè)大學(xué)