本發(fā)明涉及一種智能制造技術(shù)中的生產(chǎn)計劃制定,具體地說是一種基于遺傳算法的柔性作業(yè)車間分批調(diào)度方法,用人工智能算法中的遺傳算法來求解柔性作業(yè)車間分批調(diào)度問題。
背景技術(shù):
在生產(chǎn)作業(yè)計劃中,產(chǎn)品的生產(chǎn)品種和生產(chǎn)數(shù)量在訂單中是已知的,生產(chǎn)時間也可由工藝人員確定,但生產(chǎn)順序的安排往往是難以合理確定的,確定工件的加工順序以及分配相應(yīng)的生產(chǎn)設(shè)備來對工件進行加工,這一過程稱為作業(yè)排序或作業(yè)調(diào)度。對同一批待加工工件,不同的加工順序會產(chǎn)生不同的加工完成時間,很大程度上影響著企業(yè)的生產(chǎn)效率。作業(yè)調(diào)度的目的就是通過為工件確定合理的加工順序,對生產(chǎn)過程進行優(yōu)化,從而縮短生產(chǎn)周期,提高設(shè)備利用率。
車間作業(yè)調(diào)度問題的方法主要有:經(jīng)典算法、基于啟發(fā)式規(guī)則的構(gòu)造性算法、人工智能算法。
經(jīng)典算法:經(jīng)典算法包括數(shù)學(xué)規(guī)劃法、分支界定法、拉格朗日松弛法等。
基于啟發(fā)式規(guī)則的構(gòu)造性算法:該算法易于實現(xiàn)、計算復(fù)雜度低,被大量的研究與應(yīng)用,panwalka等總結(jié)了一百多種調(diào)度規(guī)則。
人工智能算法:人工智能算法包括遺傳算法、蟻群算法、禁忌搜索算法、免疫算法、神經(jīng)網(wǎng)絡(luò)算法等。
經(jīng)典算法對小規(guī)模問題比較有效,對較大規(guī)模問題計算時間難以承受;基于啟發(fā)式規(guī)則的構(gòu)造性算法對問題處理比較粗糙,其得出的解質(zhì)量通常不夠好;而人工智能算法優(yōu)化性能高,算法結(jié)構(gòu)簡單,通用性好,其中的遺傳算法是求解車間調(diào)度的研究熱點之一。柔性車間調(diào)度是一個np-hard問題,在車間調(diào)度中具有較高的復(fù)雜程度,而在其基礎(chǔ)上再加入分批問題,使得問題更加復(fù)雜。遺傳算法在求解柔性車間分批調(diào)度問題時,由于分批的不相同導(dǎo)致進化操作的復(fù)雜性大大增加,從而使進化尋優(yōu)不理想,因此有必要展開研究,制定出合適的方法。
技術(shù)實現(xiàn)要素:
本發(fā)明目的在于針對已有技術(shù)存在的缺陷,提供一種基于遺傳算法的柔性作業(yè)車間分批調(diào)度方法,能夠提供好的調(diào)度方案,從而提高車間生產(chǎn)效率,縮短生產(chǎn)周期。為達到上述目的,本發(fā)明采用下述技術(shù)方案:一種基于遺傳算法的柔性車間調(diào)度方法,其特征在于具體操作步驟如下:
步驟一,確定運行參數(shù)。
步驟二,初始種群生成。
步驟三,個體適應(yīng)度計算。
步驟四,選擇操作。
步驟五,交叉操作。
步驟六,變異操作。
步驟七,終止判別。
針對以上步驟進行具體說明如下:
步驟一、確定運行參數(shù)
遺傳算法的運行參數(shù)包括種群規(guī)模m,交叉概率pc,變異概率pm,迭代次數(shù)t。種群規(guī)模m一般取20~100,交叉概率pc一般取0.4~0.99,變異概率pm一般取0.0001~0.1,迭代次數(shù)t一般取100~500。
步驟二、初始種群生成
初始種群的生成依靠編碼實現(xiàn),柔性作業(yè)車間分批調(diào)度問題的編碼需要包含兩部分信息,第一部分為各工件的分批信息,它確定每種工件分多少批次,每個批次中工件有多少數(shù)量,將此部分的編碼稱為分批碼;第二部分為工件各批次的加工順序,稱為工序碼。此種編碼方法為分段編碼方法。
對于有n種工件,第i種工件數(shù)量為li,工序數(shù)為ji,其分批碼結(jié)構(gòu)如下所示:
用-1作為間隔符區(qū)分不同種類的工件,ai為工件i所分的批次,pi(ai)為工件i的第ai批次中數(shù)量,ki為工件i的分批碼。
工序碼的結(jié)構(gòu)如下所示:
2,21,1……1,12,21,1……2,2(部分片段)
其中工序碼中每個代碼(工件批次號)由兩個數(shù)字組成,前數(shù)字表示工件種類,后數(shù)字表示工件批次,如2,2表示工件2的第二批次,2,1表示工件2的第一批次,相同數(shù)字出現(xiàn)的順序代表工序順序,如上述工序碼中第一位上為2,2,第五位上也為2,2,則第一位上為工件2第二批次的第一工序,第五位上為工件2第二批次的第二工序。
(1)分批碼
采用輪盤賭方法產(chǎn)生工件分批碼,具體生成步驟如下:
1)確定批次。分為以下兩步:
①在0~1之間隨機產(chǎn)生一個數(shù);
②將此數(shù)乘以工件i的數(shù)量li,進行向上取整操作,所得到的數(shù)即為工件i的批次,記為ai。
2)確定批次中工件的數(shù)量。
按比例對工件i的總數(shù)量進行分配,首先在0~1之間隨機產(chǎn)生共ai個數(shù),記為
將所得結(jié)果四舍五入進行圓整。
若所得批次中數(shù)量為0,則加1使此批次中數(shù)量為1,通過上述方法即可確定工件i各批次中工件的數(shù)量。
通過上述方法即可確定工件i各批次中工件的數(shù)量。
按比例分配四舍五入后,工件所有批次中的數(shù)量相加可能與原工件總數(shù)量不相等,此時需要進行如下方法的處理:
ⅰ、a:如果工件i所有批次中數(shù)量相加(記為:qi)大于原工件數(shù)量(記為:li),則將各批次按數(shù)量從小到大排列,將排在最后qi-li位的批次中工件數(shù)量都減去1。
b:接著判斷工件i中是否有批次其工件數(shù)量等于0,若為0,則加1使其批次中數(shù)量為1。
c:重新返回步驟a。
ⅱ、如果工件i所有批次中數(shù)量相加(記為:qi)小于原工件數(shù)量(記為:li),則將各批次按數(shù)量從小到大排列,將排在前面li-qi位的批次中工件數(shù)量都加上1。
3)確定工件i的分批碼。
首先生成長度為li的零數(shù)列ki,然后將工件i的各批次數(shù)量
4)確定總分批碼
從工件1的分批碼k1開始,將n種工件的分批碼從左到右依次組合在一起,并在不同工件間添加-1作為分隔符以示區(qū)別,即得到總分批碼。
(2)工序碼
工序碼依據(jù)分批碼和工件的信息,采用基于工序的編碼方法產(chǎn)生。
1)對每個工件的批次依次進行工序碼的產(chǎn)生。
2)將各個工件批次生成的工序碼依次組合在一起。
3)對2)中所述工序碼進行隨機打亂,從而得到最終的工序碼。
步驟三、個體適應(yīng)度計算
計算個體適應(yīng)度時,依據(jù)工件最早完工準(zhǔn)則為各工件批次選擇機器,計算時間,獲得總完工時間,然后取總完工時間的倒數(shù)作為適應(yīng)度值。顯然完工時間越短,適應(yīng)度值越高。
步驟四、選擇操作
選擇操作采用輪盤賭選擇方法,選擇概率依據(jù)個體的適應(yīng)度大小而定。適應(yīng)度越大的個體被選中的概率越大,適應(yīng)度越小的個體被選中的概率越小,符合遺傳算法“優(yōu)勝劣汰,適者生存”的思想。
步驟五、交叉操作
對于柔性分批問題,交叉分為分批碼交叉與工序碼交叉。
(1)分批碼交叉
分批碼進行相同位置的多點交叉,交叉后需要進行工序碼的修復(fù)。如果進行分批碼交叉后工件批次增多,則在工序碼中選擇隨機位置插入新增加工件的批次;如果進行分批碼交叉后工件批次減少,則在工序碼位置中選中減少的工件批次的位置,接著刪除這些位置上的信息。
(2)工序碼交叉
交叉操作都在染色體長度相同的情況下進行,但是柔性作業(yè)車間分批調(diào)度問題中,由于分批的不同會導(dǎo)致個體的工序碼長度不同,這樣被選中的兩個個體難以實現(xiàn)交叉。如果工序碼不交叉的話,那么不利于個體進化,影響尋優(yōu)結(jié)果,因此從種群進化角度考慮,需要實現(xiàn)工序碼的交叉。但是強行將不同長度的工序碼進行交叉,不僅會導(dǎo)致交叉后工序碼與對應(yīng)的前段分批碼的批次數(shù),因此必須對交叉后的工序碼進行修正。
修正操作分兩種情況:一種是交叉后工件批次增多,另一種交叉后工件批次減少。
1)交叉后工件批次增多
依據(jù)前段分批碼中的工件批次信息,在工序碼中找到增多的工件批次號,然后將此刪除。
2)交叉后工件批次減少
依據(jù)前段分批碼中的工件批次信息,在工序碼中隨機產(chǎn)生插入位置,然后插入所需要的工件批次號。
附圖2是以兩點交叉為例的工序碼修正過程示意圖。
通過以上操作,實現(xiàn)了不同長度的工序碼交叉,并能得到合法的工序碼子代。注:上述的修正方法適應(yīng)于不同交叉操作得到的子代。
(3)交叉執(zhí)行準(zhǔn)則
本發(fā)明中的個體為兩段編碼,如果只進行工序碼的交叉,則工序碼對應(yīng)的分批碼信息都由初始種群決定,在進化過程中沒有得到變化,使尋優(yōu)范圍受到限制;如果只進行分批碼的交叉,則工序碼只是按照子代分批碼進行合法化修正,對工序碼的進化促進甚小,而工序碼又是決定著總完工時間;綜合考慮上述因素,這里提出分批碼和工序碼的分段編碼交叉操作執(zhí)行準(zhǔn)則:設(shè)置一個交叉段選擇系數(shù)t,在交叉時首先產(chǎn)生一個隨機數(shù),當(dāng)隨機數(shù)小于t時,只進行分批碼的交叉,而大于等于t時,只進行工序碼的交叉,見附圖3。
步驟六、變異操作
首先進行分批碼的多點變異,接著進行工序碼的逆序變異。
步驟七、終止判別
判斷世代數(shù)是否滿足終止條件,滿足則停止,輸出最優(yōu)調(diào)度方案,否則轉(zhuǎn)到步驟三。
本發(fā)明與現(xiàn)有技術(shù)相比較,具有如下顯而易見的突出實質(zhì)性特點和顯著技術(shù)進步:針對工序碼長度不同而難以實現(xiàn)交叉操作的問題,經(jīng)過交叉后依據(jù)原有工件批次的信息進行工序碼的增加或者刪除的修正操作,使編碼合法化,從而實現(xiàn)了不同長度的工序碼交叉;同時提出分批碼和工序碼的分段編碼交叉操作執(zhí)行準(zhǔn)則,使分批碼和工序碼都得到了進化,有利于尋優(yōu);通過使用輪盤賭的方法,使工件分批碼能得到方便地產(chǎn)生。采用本發(fā)明的方法進行調(diào)度,能得到滿意的調(diào)度方案,縮短了加工時間,提高了生產(chǎn)率。
附圖說明
圖1為基于遺傳算法的柔性作業(yè)車間分批調(diào)度方法的流程框圖。
圖2為工序碼交叉后修復(fù)示意圖。
圖3為交叉執(zhí)行準(zhǔn)則示意圖。
圖4為三次進化歷程圖。
圖5為分批調(diào)度結(jié)果圖。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步說明。
實施例一:如附圖1所示,本基于遺傳算法的柔性車間分批調(diào)度方法的操作步驟如下:
步驟一,確定運行參數(shù)。
步驟二,初始種群生成。
步驟三,個體適應(yīng)度計算。
步驟四,選擇操作。
步驟五,交叉操作。
步驟六,變異操作。
步驟七,終止判別。
實施例二:參見圖1~圖5,本實施例與實施例一基本相同,特別之處如下:
所述運行參數(shù)為種群規(guī)模m,交叉概率pc,變異概率pm和迭代次數(shù)t。
所述初始種群產(chǎn)生時使用分段編碼方法得到分批碼和工序碼,產(chǎn)生個體,并且其中分批碼使用輪盤賭方法來產(chǎn)生。
所述個體適應(yīng)度計算時依據(jù)工件最早完工準(zhǔn)則為各工件批次選擇機器,計算時間,獲得總完工時間,然后取總完工時間的倒數(shù)作為適應(yīng)度值;顯然完工時間越短,適應(yīng)度值越高。
所述選擇操作采用輪盤賭選擇方法,選擇概率依據(jù)個體的適應(yīng)度大小而定。
所述交叉操作,首先確定分批碼和工序碼的分段編碼交叉操作執(zhí)行準(zhǔn)則;進行分批碼或工序碼的交叉,交叉結(jié)束后進行工序碼的修復(fù)操作。
所述變異操作,首先進行分批碼的多點變異,接著進行工序碼的逆序變異。
所述終止判別,判斷世代數(shù)是否滿足終止條件,滿足則停止,輸出最優(yōu)調(diào)度方案,否則轉(zhuǎn)到步驟三。
實施例三:本實施例與實施例一基本相同,特別之處如下:
對各步驟具體詳述如下:
步驟一、確定運行參數(shù)
遺傳算法的運行參數(shù)包括種群規(guī)模m,交叉概率pc,變異概率pm,迭代次數(shù)t。種群規(guī)模m一般取20~100,交叉概率pc一般取0.4~0.99,變異概率pm一般取0.0001~0.1,迭代次數(shù)t一般取100~500。
步驟二、初始種群生成
初始種群的生成依靠編碼實現(xiàn),柔性作業(yè)車間分批調(diào)度問題的編碼需要包含兩部分信息,第一部分為各工件的分批信息,它確定每種工件分多少批次,每個批次中工件有多少數(shù)量,將此部分的編碼稱為分批碼;第二部分為工件各批次的加工順序,稱為工序碼。此種編碼方法為分段編碼方法。
對于有n種工件,第i種工件數(shù)量為li,工序數(shù)為ji,其分批碼結(jié)構(gòu)如下所示:
用-1作為間隔符區(qū)分不同種類的工件,ai為工件i所分的批次,pi(ai)為工件i的第ai批次中數(shù)量,ki為工件i的分批碼。
工序碼的結(jié)構(gòu)如下所示:
2,21,1……1,12,21,1……2,2(部分片段)
其中工序碼中每個代碼(工件批次號)由兩個數(shù)字組成,前數(shù)字表示工件種類,后數(shù)字表示工件批次,如2,2表示工件2的第二批次,2,1表示工件2的第一批次,相同數(shù)字出現(xiàn)的順序代表工序順序,如上述工序碼中第一位上為2,2,第五位上也為2,2,則第一位上為工件2第二批次的第一工序,第五位上為工件2第二批次的第二工序。
(1)分批碼
工序碼依據(jù)分批碼和工件的信息,采用基于工序的編碼方法產(chǎn)生。
1)對每個工件的批次依次進行工序碼的產(chǎn)生。
2)將各個工件批次生成的工序碼依次組合在一起。
3)對2)中所述工序碼進行隨機打亂,從而得到最終的工序碼。
步驟三、個體適應(yīng)度計算
計算個體適應(yīng)度時,依據(jù)工件最早完工準(zhǔn)則為各工件批次選擇機器,計算時間,獲得總完工時間,然后取總完工時間的倒數(shù)作為適應(yīng)度值。顯然完工時間越短,適應(yīng)度值越高。
步驟四、選擇操作
選擇操作采用輪盤賭選擇方法,選擇概率依據(jù)個體的適應(yīng)度大小而定。適應(yīng)度越大的個體被選中的概率越大,適應(yīng)度越小的個體被選中的概率越小,符合遺傳算法“優(yōu)勝劣汰,適者生存”的思想。
步驟五、交叉操作
對于柔性分批問題,交叉分為分批碼交叉與工序碼交叉。
(1)分批碼交叉
分批碼進行相同位置的多點交叉,交叉后需要進行工序碼的修復(fù)。如果進行分批碼交叉后工件批次增多,則在工序碼中選擇隨機位置插入新增加工件的批次;如果進行分批碼交叉后工件批次減少,則在工序碼位置中選中減少的工件批次的位置,接著刪除這些位置上的信息。
(2)工序碼交叉
交叉操作都在染色體長度相同的情況下進行,但是柔性作業(yè)車間分批調(diào)度問題中,由于分批的不同會導(dǎo)致個體的工序碼長度不同,這樣被選中的兩個個體難以實現(xiàn)交叉。如果工序碼不交叉的話,那么不利于個體進化,影響尋優(yōu)結(jié)果,因此從種群進化角度考慮,需要實現(xiàn)工序碼的交叉。但是強行將不同長度的工序碼進行交叉,不僅會導(dǎo)致交叉后工序碼與對應(yīng)的前段分批碼的批次數(shù),因此必須對交叉后的工序碼進行修正。
修正操作分兩種情況:一種是交叉后工件批次增多,另一種交叉后工件批次減少。
1)交叉后工件批次增多
依據(jù)前段分批碼中的工件批次信息,在工序碼中找到增多的工件批次號,然后將此刪除。
2)交叉后工件批次減少
依據(jù)前段分批碼中的工件批次信息,在工序碼中隨機產(chǎn)生插入位置,然后插入所需要的工件批次號。
附圖2是以兩點交叉為例的工序碼修正過程示意圖。
通過以上操作,實現(xiàn)了不同長度的工序碼交叉,并能得到合法的工序碼子代。注:上述的修正方法適應(yīng)于不同交叉操作得到的子代。
(3)交叉執(zhí)行準(zhǔn)則
本發(fā)明中的個體為兩段編碼,如果只進行工序碼的交叉,則工序碼對應(yīng)的分批碼信息都由初始種群決定,在進化過程中沒有得到變化,使尋優(yōu)范圍受到限制;如果只進行分批碼的交叉,則工序碼只是按照子代分批碼進行合法化修正,對工序碼的進化促進甚小,而工序碼又是決定著總完工時間;綜合考慮上述因素,這里提出分批碼和工序碼的分段編碼交叉操作執(zhí)行準(zhǔn)則:設(shè)置一個交叉段選擇系數(shù)t,在交叉時首先產(chǎn)生一個隨機數(shù),當(dāng)隨機數(shù)小于t時,只進行分批碼的交叉,而大于等于t時,只進行工序碼的交叉,見附圖3。
步驟六、變異操作
首先進行分批碼的多點變異,接著進行工序碼的逆序變異。
步驟七、終止判別
判斷世代數(shù)是否滿足終止條件,滿足則停止,輸出最優(yōu)調(diào)度方案,否則轉(zhuǎn)到步驟三。
實施例四:以某企業(yè)車間生產(chǎn)數(shù)據(jù)為實例,例中工件種類為4種,每種工件所需加工數(shù)量均為8個,機器數(shù)為8臺。具體的可加工機器、加工時間及啟動時間均能從表1中得到,表中括號里的第一個數(shù)字表示加工時間,第二個數(shù)字表示啟動時間,如第一工件第一工序可在機器1、機器7和機器8上加工,在機器1上加工時間為4,啟動時間為5。
運行參數(shù):種群規(guī)模30,交叉概率0.8,變異概率0.05,迭代次數(shù)為300。
對實施例進行上述遺傳算法的操作,運行三次,它們的結(jié)果相差只有1分鐘,其中最佳值為110分鐘。附圖4為最佳值的進化歷程圖,從圖可知種群進化良好。調(diào)度結(jié)果的甘特圖如附圖5所示,圖中第一位數(shù)字為工件號,第二位數(shù)字為批次號,括號中數(shù)字為工序號,細橫線為啟動時間,長方形框為加工時間。
表1工件加工信息圖
min