本發明涉及作業車間調度領域,具體地涉及柔性作業車間調度領域。
背景技術:
柔性作業車間調度是作業車間調度問題的延伸,與作業車間調度問題不同的是,柔性作業車間調度,對于一道工序可以有一組不同設備供選擇加工。柔性作業車間調度除了要解決工序的加工順序的問題還要為每道工序選擇合適的設備。為了解決柔性作業車間調度問題,提出了很多算法,比如遺傳算法。為了提高遺傳算法的性能,研究者相繼提出自適應的遺傳算法和混合遺傳算法。自適應的遺傳算法種群規模、交叉變異概率等遺傳參數在進化過程中是動態變化的;混合遺傳算法是遺傳算法與其他優化算法如模擬退火算法、禁忌搜索、免疫算法等結合。總結遺傳算法的發展過程可以看出,研究者都主要專注于研究染色體的表示方式來避免不可行解和進化策略來避免算法早熟,并且幾乎所有的交叉都是雙親遺傳,在兩條染色體上的交叉。
技術實現要素:
針對上述的不足之處,本發明提出了一種基于工序分配和設備選擇分別編碼的自交叉遺傳算法求解柔性作業車間調度問題。這種新的交叉機制基于單親遺傳,更為簡便,提高了子代解的可行性,省略了交叉操作之后的可行性驗證過程。
本算法的目標是:第一.解決遺傳算法交叉和變異過程中會產生不可行解的問題;第二.解決遺傳算法的進化過程越來越復雜的問題。
本發明針對其技術問題采用的技術方案是:第一.工序排序和設備選擇兩部分分別編碼;第二.工序部分基于工件號編碼,設備部分用概率表示選擇的設備;第三.采用基于單親遺傳的自交叉的交叉方式;第四.針對染色體兩段不同的部分采用兩種不同的變異算子。
該技術方案的實施步驟如下:
本發明的優化目標是最小化總完工時間:Cmax=max{Ci|i=1,…,n},設種群規模為N,最大迭代次數為n,交叉概率為Pc,變異概率為Pm
步驟1:初始化種群N
步驟1.1:采用基于工序和設備的雙重編碼方式,工序編碼部分按照工件號編碼,工件包含幾道工序該工件號出現幾次;設備編碼部分基于概率編碼,隨機產生0到1之間的兩位小數表示工序選擇設備的概率;
步驟1.2:采用隨機的方式初始化種群,重復以上工序和設備的編碼過程,產生指定種群 規模N的初始解
步驟2:計算染色體適應度值,以總完工時間即第一個工件開始加工到最后一個工件完工所需的時間作為為適應度函數
步驟3:判斷是否達到最大迭代次數n,是則返回最優調度方案,結束此程序,否則執行下一步驟;
步驟4:根據交叉概率Pc執行交叉,對工序部分作自交叉操作,設備部分與工序部分一起作相同的交叉變換;
步驟5:根據變異概率Pm執行變異操作,對工序部分采用交換型的變異,設備部分采用插入型的變異
步驟6::計算子代解的適應度,選擇子代解跟父代解的前N個個體作為下一次迭代的初始種群;
步驟7:返回步驟3,重復程序
本發明的有益效果是:第一.基于工件號和小數概率的編碼,保證了遺傳操作所產生的任意解都是可行的;第二.自交叉方式不需要使用特別復雜或者專門設計的交叉方式,便能使產生的所有解都是可行的;第三.采用兩種不同的變異算子,既保護了父代解中優秀的基因,又保持了種群的多樣性。
附圖說明
圖1表示本算法的流程圖。
圖2表示一個3*3的柔性作業車間調度問題的示例。
圖3表示基于圖2所示問題的一條染色體。
圖4表示圖3所示染色體解碼所得甘特圖。
圖5表示圖3所示染色體自交叉的過程。
圖6表示圖3所示染色體包含兩種變異算子的變異過程
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖和實施例對本發明進一步詳細說明。應當理解此處所描述的具體實施例僅僅用于解釋本發明并不用于限定本發明。
本發明針對目前遺傳算法求解柔性作業車間調度問題存在的不足之處,對其編碼方式,交叉,變異做出了改進,優化了遺傳算法的性能,能更好的運用到實際車間調度中。
下面結合附圖進一步描述此發明。
柔性作業車間調度問題結合圖2一個3個工件3臺設備的柔性作業車間調度問題實例(圖中“-”表示該設備不能加工到該工序)可以表述如下:n個獨立工件的集合J={J1,J2,…,Jn},m臺設備的集合M={M1,M2,…,Mm},工件Ji由ni個優先約束的工序 序列組成,這些工序根據給定的序列一個接一個的加工。每一道工序Oi,j表示工件Ji的第j道工序,必須從給定的一個子集Mi,j∈M中選擇一臺設備加工。工序的加工時間由設備決定。pi,j,k表示Oi,j在設備Mk上的加工時間。調度安排包括兩個子問題:分配每一道工序到一個合適的設備的路徑;確定所有設備上的工序序列的排序。
令Ci表示工件Ji的完工時間,優化目標是最小化總完工時間:Cmax=max{Ci|i=1,…,n}
為了簡化問題,做了如下假設:所有設備在t=0時刻都是可用的;每一個工件都有獨立的釋放時間;每一臺設備在同一時刻只能加工一道工序;一道工序一旦開始加工不允許中斷;每一個工件的工序順序是預定的不能修改;忽略設備的設置時間和工序之間的轉換時間。
一種自交叉遺傳算法解柔性作業車間調度問題,該算法的詳細流程如下:
本發明的優化目標是最小化總完工時間:Cmax=max{Ci|i=1,…,n},設種群規模為N,最大迭代次數為n,交叉概率為Pc,變異概率為Pm
步驟1:初始化種群N
步驟1.1:采用基于工序和設備的雙重編碼方式,工序編碼部分按照工件號編碼,工件包含幾道工序該工件號出現幾次;設備編碼部分基于概率編碼,隨機產生0到1之間的兩位小數表示工序選擇設備的概率;
步驟1.2:采用隨機的方式初始化種群,重復以上工序和設備的編碼過程,產生指定種群規模N的初始解
步驟2:計算染色體適應度值,以總完工時間即第一個工件開始加工到最后一個工件完工所需的時間作為為適應度函數
步驟3:判斷是否達到最大迭代次數n,是則返回最優調度方案,結束此程序,否則執行下一步驟;
步驟4:根據交叉概率Pc執行交叉,對工序部分作自交叉操作,設備部分與工序部分一起作相同的交叉變換;
步驟5:根據變異概率Pm執行變異操作,對工序部分采用交換型的變異,設備部分采用插入型的變異
步驟6::計算子代解的適應度,選擇子代解跟父代解的前N個個體作為下一次迭代的初始種群;
步驟7:返回步驟3,重復程序
所述步驟1.1的編碼方式由于柔性作業車間調度問題的編碼既要給出加工工序的先后順序,同時還需要為每個工序選擇加工機器,因此本發明采用基于工序和設備的雙重編碼方法。工序編碼部分按照工件號編碼,工件包含幾道工序該工件號出現幾次。比如圖2所示問題為3個工件7道工序的問題,編碼的染色體包含7個基因:1122233,其中1,2,3分別表示工件編號,相同編號出現的位置表示工件的工序順序,比如第5個基因位的‘2’表示工件2的第2道工序,打亂這個順序即生產新的解。設備編碼部分基于概率編碼,隨機產生0到1之間的兩位小數表示工序選擇設備的概率。比如工序O1,2對應的隨機數是0.53,參照給定的柔性作業車間調度問題可用資源信息表,O1,2可以在設備2和設備3上加工,0.53在[0.50,1)之間,O1,2在設備3上加工。所以圖3表示圖2所示問題的一條染色體。
所述步驟2在計算適應度之前,先解碼染色體,根據加工時間來計算適應度函數值。工序部分根據工序優先約束解碼;設備部分是根據可用資源信息表所表示的設備來解碼的。解碼完成之后構造一個甘特圖,以總完工時間即第一個工件開始加工到最后一個工件完工所需的時間為適應度函數。總完工時間越小,適應度越好。如圖3表示的染色體解碼表示的工序加工順序是O1,1,O2,1,O3,1,O3,2,O2,2,O1,2,O2,3;他們所選擇的設備分別為:M1,M3,M3,M1,M1,M3,M3,加工時間分別為1min,4min,3min,1min,1min,2min,2min。所得甘特圖如圖4。
所述步驟4自交叉操作是將單親遺傳算法(單親遺傳算法充分利用染色體自身的信息在一條染色體上完成相關的遺傳算子操作,搜索問題的滿意解)相關遺傳操作引入到傳統的遺傳算法上,從而充分利用染色體自身的信息,挖掘有用信息最后實現優化的目的。相比于已有的雙親遺傳算法,執行更簡單方便,不需要交叉之后校正染色體得到可行解。
所述步驟4自交叉操作對工序部分進行自交叉操作,設備部分隨工序部分做相同的交叉變化,因為僅同一件工序代表的基因變化會導致設備選擇的變化,這樣的操作保留了優良父代解的基因。
所述步驟4對工序部分自交叉操作,步驟如下:
(1):從種群中選擇一個父代染色體
(2):隨機產生工序部分兩個交叉點
(3):交換兩個交叉點兩邊的基因塊
(4):重復步驟(1)-(3),直到產生指定數量的子代
自交叉結合圖6染色體自交叉過程可以描述如下:圖中染色體前后兩個部分即工序部分和設備部分均有兩個交叉點,工序部分的交叉點為“3,3”在自交叉操作時交換這兩個點前后的基因位置,即,將“1,2”與“2,1,2”進行前后位置交換即得到子代染色體。設備部分的自交叉方式與工序部分同理。
所述步驟5本發明采用兩種變異結構,工序部分采用交換型的變異,設備部分采用插入型的變異,這樣的變異保證了種群的多樣性。結合圖6變異過程,描述如下。
所述工序部分交換型變異,步驟如下:
(1)從種群中選擇一個染色體
(2)隨機選擇工序部分兩個基因位
(3)互換兩個基因位的值
(4)重復步驟(1)-(3),直到產生指定數量的子代
所述設備部分插入型變異操作,步驟如下:
(1)從種群中選擇一個染色體
(2)隨機選擇設備部分兩個基因位
(3)將選擇的兩個基因位中的一個從原染色體中刪除,插入到選擇的另一個基因之前。
(4)重復步驟(1)-(3),直到產生指定數量的子代。