本發明屬于作業車間技術領域,尤其適用于動態作業車間生產調度優化問題。
背景技術:
現實世界中制造系統通常會涉及到不確定或者動態的變化,尤其是在面向訂單的作業車間環境下。這種情形下的調度是一種挑戰,因為要根據車間的變化及時作出可靠的調度決策,在這種情況下,調度規則由于其實施簡單和具備應對動態環境問題的能力,已經被普遍應用。然而,由于每個制造系統的特殊化,還是沒有一個通用的調度規則能在所有的環境下起作用。因此,從業人員不得不人工改變他們的調度規則以應對他們獨特的操作環境。這也暗示著需要一種自動的方法來幫助調度規則的選擇或設計。
一些啟發式算法和人工智能算法已經被開發出來幫助根據不同的車間情況選擇合適的調度規則。嚴格的依賴于候選規則來選擇規則的方法雖然取得了良好的效果,但是這些候選規則當中可能沒有適合某個別制造造環境或者個別性能指標。即使這些規則是適合的,他們也不一定就是最優的一個。因此,設計一個有效的提高調度性能的調度規則依然是一個關鍵的問題。因為設計一個有效的規則是一個很難的任務,會很費時,所以自動設計方法被提出來幫助完成這個任務。
受啟發于生物進化的遺傳編程是基于遺傳算法的一種新的引入該領域的進化計算方法,它根據適應度函數進化計算機程序。以層次化結構表示個體的方式讓程序變得更加簡潔和方便。盡管,一些遺傳編程的方法已用于設計調度規則,但他們依然存在著應對動態調度問題時由于程序龐大,導致計算時間過長,計算成本過高的問題,以及解決復雜調度問題時開發能力較弱的問題。
針對這些問題,我們提出了一種新的基于局部搜索的遺傳編程算法。
技術實現要素:
本發明解決的問題是:第一.解決目前很多高級的優化算法受靜態調度約束的問題;第二.針對特定的問題,也許沒有合適的規則可供選擇,或者有但是未必是最優的問題;第三.解決遺傳編程在處理有多個沖突的目標和特征要求時開發能力不足的問題;第四.解決局部搜索容易陷入局部最優的問題;第五.解決遺傳編程用樹的形式表示程序時所需存儲空間大,且處理動態問題時程序規模龐大而導致計算成本過高的問題。
本發明針對其技術問題采用的技術方案是:第一.采用調度規則解決調度優化問題;第二.用遺傳編程方法自動設計調度規則;第三.結合局部搜索啟發式方法;第四.對局部搜索的當前最優解進行攝動操作;第五.在局部搜索過程中引入禁忌搜索策略。
本發明的有益效果是:第一.調度規則易于實施,且能夠應對動態環境調度問題;第二.該算法能找到比已有規則更有效的調度規則;第三.改進的遺傳編程算法的搜索開發能力比單獨的遺傳編程方法更強;第四.避免了局部最優,讓算法找到了全局最優解;第五.避免了不必要的重復搜索,減小了計算時間。
附圖說明
下面結合附圖和實施例對本發明進一步說明。
圖1表示生成樹形調度規則所需的端點集和函數集,其中t表示作出調度決策的時間。
圖2表示基于局部搜索的遺傳編程實施過程。
圖3表示限制子樹變異操作示例,陰影節點代表新生成的子樹。
圖4表示子樹提取操作示例。
圖5表示調度規則的實施過程,樹形框所示程序為遺傳編程所求的調度規則Dbest。
圖6為該方法流程簡圖。
具體實施方式
一.動態車間調度問題
實際生產中的調度問題,通常要面對更多的工件,更多樣化的機器以及其它一些突發的工況,如機器故障、新工件到達等,因此車間環境多是動態的,且部分系統信息是不確定的并會隨時間發生變化,工件往往會受到這些隨機擾動的影響,這就是動態車間作業調度問題。
二.確定目標函數
平均流動時間:
最大流動時間:Fmax=maxj∈J{fj} (2)
延遲工件百分比:
平均延遲時間:
最大延遲時間:Tmax=maxj∈Q{Cj-dj} (5)
其中,J是工件的集合,Q={j∈J:Cj-dj>0}是延遲工件的集合,Cj、dj、fj分別表示工件j完工時間、截止時間、流動時間。
二.參數設定
最大搜索步長:100
最大迭代次數:200
初始解生成方式:生長法(最大深度為3)
鄰域確定方式:限制子樹變異(最大深度為2)
攝動操作方式:限制子樹變異(最大深度為3),子樹提取
三.端點集和函數集確定
如圖1,相似于參考文獻基于樹的遺傳編程TGP的應用,本方法的調度規則也用樹的形式表示。這里的規則將扮演一個優先函數的角色,這個函數決定等待加工工件的優先級。考慮瓶頸設備,有很多更復雜的調度規則表示法來提高進化規則的質量。但是,當多個瓶頸設備同時存在的時候,瓶頸設備的使用并不會有太大的幫助,還可能會顯著增加調度規則的搜索空間。而且,太復雜的表達法可能會造成過擬合問題。因此,在這里,我們只考慮簡單的樹表示調度規則。建立調度規則的端點集和函數集如圖1.圖中,上半部分給出了大部分調度規則中的表達方式。另一部分給出了兩個反應后續設備狀態的表達方式。
四.禁忌搜索策略
禁忌搜索策略是引用禁忌表記錄搜索中已搜索過的解,以避免重復搜索之前計算過的解而浪費計算時間。本遺傳編程方法在局部搜索和攝動過程中引入禁忌表,用它記錄局部搜索過程中搜索過的鄰域解和攝動產生的解。當禁忌表中記錄的解再次出現時,搜索步長加1,重新尋找鄰域。
五.基于局部搜索的遺傳編程實現流程
1)下載仿真復制
為了測量所獲得的調度規則(或者程序)的有效性,我們將使用一個作業車間的離散變量仿真。隨機生成若干仿真復制R={R1,R2,...,RN}(隨機產生若干工件的到達時間、加工時間、工序個數、路徑)。
2)生成初始程序
使用生長法生成初始程序D,隨機生成根節點,然后隨機產生子樹作為根節點的子節點,如果某個節點的深度小于給定的最大深度3層就從函數集和終點集中選擇,否則就從終點集中選擇。
3)計算初始程序適應度
調度規則D的適應度通過應用D到每一個訓練復制Ri∈R求得,適應度值可以計算如下:
N為訓練仿真復制的數量,為調度規則D在復制Ri下獲得的的性能(目標函數值)。這個適應度表明了D通過不同仿真復制的平均性能。本遺傳編程方法考慮的所有目標(平均流動時間、最大流動時間、平均延遲時間、最大延遲時間、延遲工件百分比)都是最小化問題,因此擁有更低適應度值的規則將更好。
4)初始化最優程序
D復制到Dbest和禁忌表,迭代次數為0。
5)迭代
判斷是否到達最大迭代次數,是則返回最優程序,結束進化;否則進行局部搜索。
6)局部搜索
①判斷是否為最大局部搜索步長,是則迭代次數加1,執行攝動操作,否則對當前程序進行鄰域搜索獲得新的程序Dnew;
該局部搜索算法通過限制子樹變異(RSM)來產生鄰域程序Dnew,與遺傳編程中子樹變異類似,限制子樹變異在程序D中隨機選擇一個節點,用生長方法隨機生成一個最大深度為2層的子樹來替換那個節點的子樹。圖3給出了該變異操作的示例。
②檢查禁忌表確認Dnew是否重復搜索并更新禁忌表,是則搜索步長加1,返回執行①;否則執行③;
③計算新程序Dnew的適應度,若Dnew的適應度優于D的適應度,當前程序D被替換,搜索步長加1,返回執行①。
7)攝動
①如果局部搜索的最優程序D優于Dbest,Dbest被替換,判斷D是否為局部最優;否則直接判斷D是否為局部最優;
②如果D是局部最優,對Dbest進行攝動操作,生成一個新的初始程序D;否則返回執行5);
③檢查禁忌表確認攝動生成的新解是否重復并更新禁忌表,是則返回①重新進行攝動操作;否則執行5)。
該攝動操作有兩種方式:1)限制子樹變異(RSM),2)子樹提取(SE)。第一種攝動除了新生成的子樹最大深度為3層以使新生成的程序與Dbest更加不同以外,與前一部分尋找鄰域程序的方法相同。子樹提取是從Dbest隨機選擇一個節點,從這個節點開始的子樹將作為一個新的程序。實例如圖4。因為每種攝動操作都有它自己的優勢,所以這兩種我們都會應用到本算法中。搜索過程中,如果一種攝動操作沒有幫助找到更優的Dbest,我們將換另一種攝動操作。
8)循環以上5)—7)的操作直到達到最大迭代次數,返回最優程序Dbest。五.所得調度規則實施調度流程
調度規則是優先規則的一種特例,用來將工件分配給機器。每當有機器閑置時,它就給在隊列中等待的每個工件分配一個優先值,這個優先值一般是基于工件、機器或者車間的特征信息的,然后為機器選擇具有最高優先值的工件進行加工。
圖5給出了一個調度規則的例子。為了給等待加工的工件一個優化的分配,關于工件的信息將會提取到圖1中的端點集。然后,表示調度規則的程序樹將會被計算,計算的輸出將作為給定工件的優先級分配到給定工件。這個程序將會循環執行指導所有的排隊工件都分到了一個優先級,然后優先級最高的工件就會開始加工。