本發(fā)明涉及計算機執(zhí)行制造系統(tǒng)領域,具體來說就是通過算法解決作業(yè)車間調(diào)度的組合優(yōu)化問題。
背景技術:
作業(yè)車間調(diào)度問題(Job-Shop Scheduling Problem)是制造執(zhí)行系統(tǒng)研究的核心和重點之一,它的研究不僅具有重大的現(xiàn)實意義,而且具有深遠的理論意義。作業(yè)車間調(diào)度問題,(簡稱JSP),就是根據(jù)產(chǎn)品制造需求合理分配產(chǎn)品制造資源,進而達到合理利用產(chǎn)品制造資源、提高企業(yè)經(jīng)濟效益的目的。JSP是產(chǎn)品制造行業(yè)中共存的問題,它與計算機集成制造系統(tǒng)(Computer Integrated Manufacturing Systems,簡稱CIMS)的工廠管理、產(chǎn)品制造層次緊密相關,是CIMS領域中研究的重要課題。JSP是一個典型的NP-hard問題,它的研究必然會對NP問題的研究起到有意義的影響。
在過去的幾十年,各種算法被應用來解決作業(yè)車間調(diào)度問題。傳統(tǒng)的,一般都采用最優(yōu)化方法和近似方法來解決作業(yè)車間調(diào)度方案的自動生成問題。最優(yōu)化方法包括枚舉法和數(shù)學規(guī)劃技術。近似法通常使用分支定界法、優(yōu)先規(guī)則、啟發(fā)式方法、迭代局部搜索算法和進化算法。
迭代局部搜索算法是一種單點出發(fā)的元啟發(fā)式算法,它包括構造初始解、局部搜索、接受條件和擾動方法4個組成部分,它能在較短的計算時間內(nèi)獲得不錯的解,近年來的研究表明該算法對許多NP難題的求解具有良好的效果。因此,各種版本的迭代局部搜索被專門設計來解決作業(yè)車間調(diào)度問題。但是他們易受陷入局部最優(yōu)的影響,由此很多改進的迭代局部搜索算法相繼提出來,比如:進化算法與局部搜索結合,多鄰域結構的局部搜索,模擬退火算法等。但是依然存在計算復雜,有時不能逃離局部最優(yōu)等問題。
技術實現(xiàn)要素:
針對現(xiàn)有技術中存在的上述不足之處,本發(fā)明要解決的技術問題是提供一種新的擾動方式來提高迭代局部搜索求解性能。
本發(fā)明的目的則是克服現(xiàn)有技術中存在的:迭代局部搜索容易陷入局部最優(yōu);一些已有的擾動方式不能幫助解逃離局部最優(yōu);迭代局部搜索僅對當前最優(yōu)解進行擾動,縮小了搜索范圍的問題。
本發(fā)明為實現(xiàn)上述目的所采用的技術方案是:一種求解作業(yè)車間調(diào)度問題的改進擾動方式 的迭代局部搜索算法,該算法包括以下步驟:
步驟1:產(chǎn)生初始解,令當前最優(yōu)解Δbest=Δ,計算該解所產(chǎn)生的總完工時間。
步驟2:設置精英池容量。
步驟3:判斷是否到達停止條件,是則返回最優(yōu)解,否則執(zhí)行下一步。
步驟4:對Δ執(zhí)行鄰域搜索,隨機選擇兩種鄰域結構,產(chǎn)生鄰域解Δ′。
步驟5:如果Δ′優(yōu)于Δ,即該解下的調(diào)度方案使得總完工時間更小,則令Δ=Δ′;否則返回步驟4。
步驟6:如果Δ優(yōu)于Δbest,即該解下的調(diào)度方案使得總完工時間更小,則令Δbest=Δ,flag=true;否則令flag=false。
步驟7:執(zhí)行精英池策略的擾動方法。
步驟8:返回執(zhí)行步驟3,重復以上步驟。
所述的產(chǎn)生初始解的方式是:采用優(yōu)先調(diào)度規(guī)則安排每一臺設備上的加工工序,以得到一個初始解。步驟如下:
步驟1.1:按照每個工序的工藝順序由小到大排序。
步驟1.2:如果加工工藝順序相同,按照加工時間由小到大排序。
步驟1.3:如果加工時間依然相同,按照工件編號由小到大排序。
所述的精英池相當于一個存儲空間,將上一步驟產(chǎn)生的最優(yōu)解存儲,能夠避免迭代局部搜索僅對當前最優(yōu)解進行擾動從而縮小搜索范圍的問題。本算法中我們設置精英池容量pool size,令其中pool用來存放精英解;pool size表示其容量大小,本算法設定容量大小為5。
所述的領域結構,目前有三種:插入型鄰域結構,交換型鄰域結構,破壞-構造型鄰域結構,本算法我們采用插入型和交換型兩種鄰域結構對初始解進行迭代鄰域搜索。插入型鄰域結構是根據(jù)已知調(diào)度方案的有向圖,隨機選擇一道工序,并隨機插入到同一設備加工序列中的任意位置;交換型鄰域結構是根據(jù)已知調(diào)度方案的有向圖,任意選擇相同設備中的兩道工序,進行互換。
所述的執(zhí)行精英池策略的擾動方法,有以下幾個步驟:
步驟7.1:如果flag為true,則清空pool。
步驟7.2:如果Δ在pool中不存在,則將Δ插入到pool中。
步驟7.3:如果pool中的解多于pool size,則刪除pool中最差的解。
步驟7.4:如果pool中的解少于pool size,則令Δ*=Δbest;反之,從pool中隨機選擇 一個解記作Δ*。
步驟7.5:對Δ*執(zhí)行擾動,得到Δ,返回步驟3。
其中,對Δ*執(zhí)行擾動的步驟如下:
步驟7.5.1:是Δ*相關的有向圖。
步驟7.5.2:中最長路徑中選擇一個隨機連接弧(Oik,Ojk)。
步驟7.5.3:交換Oik和Ojk。
步驟7.5.4:令Ou=Oik。
步驟7.5.5:當Ou不是工件Ji的第一道工序:
獲得工件Ji的工序Ou的前一道工序,記作:Ofu;
如果Ofu不是設備Mu上第一個加工的工序,獲得設備Mu上在Ofu前面緊鄰加工的工序,如果不會創(chuàng)造一個環(huán),則交換這兩道工序。
步驟7.5.6:令Ov=Ojk。
步驟7.5.7:當Ov不是工件Jv的第一道工序:
獲得工件Jv的工序Ov前一道工序,記作:Ofv;
如果Ofv不是設備Mv上第一個加工的工序,獲得設備Mv上在Ofv前面緊鄰加工的工序,如果不會創(chuàng)造一個環(huán)則交換這兩道工序,讓Ov=Ofv。
步驟7.5.8:返回Δ。
本發(fā)明的有益效果是:
1.兩種鄰域結構拓寬了鄰域搜索方向和范圍,限制了搜索時陷入局部最優(yōu)的情況;
2.增強的擾動方式使搜索避免局部最優(yōu);
3.精英池策略保留了之前幾代搜索得到的好的結果,提高了搜索的開發(fā)性和穩(wěn)定性。
附圖說明
圖1為本發(fā)明的算法流程圖。
圖2為精英池策略的擾動流程圖。
圖3為改進的擾動方式流程圖
圖4為4個工件3個設備的作業(yè)車間調(diào)度問題實例。
圖5為圖4所示問題的析取圖。
圖6為圖4所示問題的一個可行解甘特圖。
圖7為圖6所示可行解的有向析取圖。
圖8為圖4所示問題初始解生成方式說明。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖和實施例對本發(fā)明進一步詳細說明。應當理解此處所描述的具體實施例僅僅用于解釋本發(fā)明并不用于限定本發(fā)明。
為了克服傳統(tǒng)迭代局部搜索在求解作業(yè)車間調(diào)度問題的不足之處,本發(fā)明設計了一種新的擾動方式與精英池策略,提出了一種求解作業(yè)車間調(diào)度問題的改進擾動方式的迭代局部搜索算法。傳統(tǒng)的迭代局部搜索雖能在較短的計算時間內(nèi)獲得不錯的解,但是容易陷入局部最優(yōu)的問題。所以本算法將兩種鄰域結構、精英池策略引進,并對傳統(tǒng)迭代局部搜索的擾動方式進行改進,從而拓寬了鄰域搜索方向和范圍,限制了搜索時陷入局部最優(yōu)的問題,提高了搜索的開發(fā)性和穩(wěn)定性。
結合圖4一個4*3的JSP實例,作業(yè)車間問題(JSP)可以描述為n個工件{Ji|(i=1,2,…,n)}在m臺機器{Mk|(k=1,2,…,m)}上加工,Oik表示工件Ji在設備Mk上加工的工序。工件加工過程需滿足的約束條件包括:工序Oik的加工時間pik是提前知道的,沒有工序搶占,即工序在機器上一旦開始加工就不能中斷直至完成;Ji在同一時刻只能在一談設備上加工;Mk在同一時刻只能加工一個工件,目標是滿足所有的優(yōu)先級和容量限制,最小化總完工時間的條件下確定每一個工序的開始加工時間。
用一個析取圖G=(O,A,E)表示作業(yè)車間調(diào)度問題,O表示工序節(jié)點集,A表示同一工件相鄰工序連接弧集,E表示同一設備相鄰工序的析取弧集,析取圖G的結構如下:
1)每一道工序Oik都有一個待加工時間的節(jié)點;
2)同一工件相鄰的一對工序之間都有一條有向弧。需要在同一臺設備加工的每一對工序間有一條無向析取弧。因此,有向弧表示工件優(yōu)先約束,析取弧表示設備容量約束
3)增加兩個節(jié)點:s和t,加工時間為0,和如下的連接?。簊到每一個工件的第一道工序的連接弧,每一個工件的最后一道工序到t之間的連接弧。圖5表示圖4所示問題的析取圖
析取圖中,基本調(diào)度方案就是對應確定每一條析取弧的方向,確定了所有的析取弧方向即得到一個調(diào)度方案。如果得到的有向析取圖是無環(huán)的,確定的方向即是有效的。它的長度等于無環(huán)析取圖里s到t最大值的路徑長度。圖7表示圖6所示可行解的有向圖。
本發(fā)明設計插入型與交換型兩種鄰域結構,使算法在執(zhí)行過程中可以根據(jù)已知調(diào)度方案的有向圖,隨機選擇一道工序并隨機插入到同一設備加工序列中的任意位置或者任意選擇相同設備中的兩道工序進行互換。這樣每次在運行時都有兩種方案隨機選擇(各自方案的概率為 二分之一),可以拓寬鄰域搜索的方向和范圍限制了搜索時陷入局部最優(yōu)的情況。
本發(fā)明設計的精英池相當于一個存儲空間,將上一步驟產(chǎn)生的最優(yōu)解存儲,并設置精英池容量pool size,令其中pool用來存放精英解;pool size表示其容量大小,本算法設定容量大小為5,這樣的設計避免了迭代局部搜索僅對當前最優(yōu)解進行擾動從而縮小搜索范圍的問題。
一種求解作業(yè)車間調(diào)度問題的改進擾動方式的迭代局部搜索算法,其具體執(zhí)行步驟如圖1所示,執(zhí)行步驟如下:
步驟1:產(chǎn)生初始解,令當前最優(yōu)解Δbest=Δ,計算該解所產(chǎn)生的總完工時間。
步驟2:設置精英池容量pool size,令其中pool用來存放精英解;pool size表示其容量大小,本算法設定容量大小為5。
步驟3:判斷是否到達停止條件,是則返回最優(yōu)解,否則執(zhí)行下一步。
步驟4:對Δ執(zhí)行鄰域搜索,隨機選擇兩種鄰域結構,產(chǎn)生鄰域解Δ′。
步驟5:如果Δ′優(yōu)于Δ,即該解下的調(diào)度方案使得總完工時間更小,則令Δ=Δ′;否則返回步驟4。
步驟6:如果Δ優(yōu)于Δbest,即該解下的調(diào)度方案使得總完工時間更小,則令Δbest=Δ,flag=true;否則令flag=false。
步驟7:執(zhí)行精英池策略的擾動方法。
步驟8:返回執(zhí)行步驟3,重復以上步驟。
所述產(chǎn)生初始解即確定每一道工序在設備上的排序順序,其產(chǎn)生方式如圖8表示圖4所示問題的初始解產(chǎn)生實例,圖中O11,O22,O31,O42為四個工件的第一道工序,其中O11,O31在第一臺設備上加工,且O11和O33的加工時間都為1min,O11的工件號1小于O31的工件號3,所以設備1上的這兩道工序的加工順序是O11,O31。O42的加工時間為1min,小于O22的加工時間2min,所以設備2上這兩道工序的加工順序是O42,O22。O13,O21,O32,O41是四個工件的第二道工序,由于第一道工序完成第二道工序才能開始,所以O13排在設備3上1min之后開始加工,以此類推,得到初始解。步驟如下:
步驟1.1:按照每個工序的工藝順序由小到大排序。
步驟1.2:如果加工工藝順序相同,按照加工時間由小到大排序。
步驟1.3:如果加工時間依然相同,按照工件編號由小到大排序。
所述的精英池相當于一個存儲空間,將上一步驟產(chǎn)生的最優(yōu)解存儲,能夠避免迭代局部搜索僅對當前最優(yōu)解進行擾動從而縮小搜索范圍的問題。本算法中我們設置精英池容量pool size,令其中pool用來存放精英解;pool size表示其容量大小,本算法設定容量大小為5。
所述精英池策略的擾動方式結合圖2,步驟如下:
步驟7.1:如果flag為true,則清空pool。
步驟7.2:如果Δ在pool中不存在,則將Δ插入到pool中。
步驟7.3:如果pool中的解多于pool size,則刪除pool中最差的解。
步驟7.4:如果pool中的解少于pool size,則令Δ*=Δbest;反之,從pool中隨機選擇一個解記作Δ*。
步驟7.5:對Δ*執(zhí)行擾動,得到Δ,返回步驟3。
其中對Δ*執(zhí)行擾動,結合圖3改進的擾動方式,其步驟如下:
步驟7.5.1:是Δ*相關的有向圖
步驟7.5.2:中最長路徑中選擇一個隨機連接弧(Oik,Ojk)
步驟7.5.3:交換Oik和Ojk
步驟7.5.4:令Ou=Oik
步驟7.5.5:當Ou不是工件Ji的第一道工序:
獲得工件Ji的工序Ou的前一道工序,記作:Ofu
如果Ofu不是設備Mu上第一個加工的工序,獲得設備Mu上在Ofu前面緊鄰加工的工序,如果不會創(chuàng)造一個環(huán),則交換這兩道工序
步驟7.5.6:令Ov=Ojk
步驟7.5.7:當Ov不是工件Jv的第一道工序:
獲得工件Jv的工序Ov前一道工序,記作:Ofv
如果Ofv不是設備Mv上第一個加工的工序,獲得設備Mv上在Ofv前面緊鄰加工的工序,如果不會創(chuàng)造一個環(huán)則交換這兩道工序,讓Ov=Ofv;
步驟7.5.8:返回Δ。
上述僅本發(fā)明較佳可行的實施例,非因此局限本發(fā)明保護范圍,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。