本發(fā)明用于制訂多目標(biāo)柔性作業(yè)車(chē)間調(diào)度的生產(chǎn)調(diào)度計(jì)劃。
背景技術(shù):
柔性作業(yè)車(chē)間調(diào)度問(wèn)題是傳統(tǒng)作業(yè)車(chē)間調(diào)度問(wèn)題的一般化。不同于傳統(tǒng)作業(yè)車(chē)間調(diào)度問(wèn)題中每個(gè)工序只能在唯一一臺(tái)機(jī)器上加工的特點(diǎn),柔性作業(yè)車(chē)間調(diào)度問(wèn)題中的每個(gè)工序通常能夠在多臺(tái)機(jī)器上加工,問(wèn)題因此變得更加復(fù)雜,是一個(gè)NP困難問(wèn)題。而實(shí)際生產(chǎn)環(huán)境中通常又會(huì)有多個(gè)目標(biāo),將問(wèn)題變得更加復(fù)雜。以遺傳搜索和鄰域搜索組合的混合遺傳算法已經(jīng)被廣泛運(yùn)用于這類(lèi)問(wèn)題的求解,這種組合使算法同時(shí)具備了全局搜索能力和局部搜索能力。然而,算法對(duì)每個(gè)得到的解的利用仍有待提高。
技術(shù)實(shí)現(xiàn)要素:
本算法是針對(duì)多目標(biāo)柔性作業(yè)車(chē)間調(diào)度的混合遺傳算法,通過(guò)對(duì)混合遺傳算法的改進(jìn)使算法對(duì)每個(gè)得到的解利用率大大提高。本算法對(duì)混合遺傳算法的改進(jìn)主要包括以下方面:
本算法對(duì)傳統(tǒng)遺傳局部搜索算法的改進(jìn)主要包括以下方面:第一,多目標(biāo)柔性作業(yè)車(chē)間調(diào)度方案的編碼方式的復(fù)雜性;第二,可行的解(調(diào)度方案)在經(jīng)過(guò)交叉、變異操作后可能產(chǎn)生不可行的解(調(diào)度方案);第三,局部搜索可能作用于局部最優(yōu)解,會(huì)產(chǎn)生無(wú)意義的搜索過(guò)程;第四,搜索過(guò)的解可能被重復(fù)搜索;第五,以加權(quán)法解決多目標(biāo)問(wèn)題時(shí)各目標(biāo)函數(shù)的加權(quán)值不易確定;第六,一個(gè)解的鄰域解數(shù)量非常多,占用計(jì)算時(shí)間過(guò)多;第七,已經(jīng)產(chǎn)生的優(yōu)良解(調(diào)度方案)可能在之后的迭代過(guò)程中被遺失。
本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:第一,采用一種新的編碼方式;第二,采用一種專(zhuān)門(mén)用于本編碼方式的交叉算子和突變算子;第三,采用一種通過(guò)各目標(biāo)的相對(duì)重要性為各目標(biāo)函數(shù)賦加權(quán)值;第四,對(duì)每個(gè)解同時(shí)進(jìn)行遺傳搜索和局部搜索;第五,在對(duì)每個(gè)解進(jìn)行遺傳搜索與局部搜索的同時(shí),對(duì)劣解執(zhí)行救濟(jì)算子;第六,在局部搜索中,只隨機(jī)選取每個(gè)當(dāng)前解的部分鄰域解進(jìn)行檢測(cè);第七,設(shè)置精英組保存搜索過(guò)程中發(fā)現(xiàn)的非支配解。
本發(fā)明的有益效果:第一,簡(jiǎn)化了編碼過(guò)程;第二,避免了可行的解(調(diào)度方案)經(jīng)交叉和突變后出現(xiàn)不可行的解(調(diào)度方案);第三,使各目標(biāo)函數(shù)加權(quán)值更加符合實(shí)際生產(chǎn)情況;第四,對(duì)每個(gè)得到的解的利用率提高;第五,救濟(jì)算子使劣解也得到了充分的利用;第六,避免了局部搜索占用過(guò)多的計(jì)算時(shí)間;第七,避免了非支配解的遺失。
附圖說(shuō)明
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明型進(jìn)一步說(shuō)明。
圖1是柔性作業(yè)車(chē)間調(diào)度的示例圖。
圖2是編碼結(jié)構(gòu)的示意圖。
圖3是機(jī)器選擇部分編碼方式的示例圖。
圖4是工序序列部分編碼方式的示例圖。
圖5是解碼過(guò)程的示例圖。
圖6是非支配解的示意圖。
圖7是救濟(jì)算子的示例圖。
圖8目標(biāo)函數(shù)相對(duì)重要性的示例圖。
圖9是兩點(diǎn)交叉算子示意圖。
圖10是基于工序編碼交叉算子的示例圖。
圖11是機(jī)器選擇部分編碼的突變算子的示例圖。
圖12是工序序列部分編碼的突變算子的示例圖。
圖13是含救濟(jì)算子的混合遺傳算法的流程的示意圖
圖14是算法詳細(xì)流程的示意圖。
具體實(shí)施方式
一、柔性作業(yè)車(chē)間調(diào)度問(wèn)題
在傳統(tǒng)的作業(yè)車(chē)間調(diào)度問(wèn)題中,每個(gè)工序只能在唯一一臺(tái)機(jī)器上加工。而對(duì)于柔性作業(yè)車(chē)間調(diào)度問(wèn)題而言,每個(gè)工序能夠在多臺(tái)機(jī)器上加工,這從圖1的示例中可以看出(圖1中的“-”表示該機(jī)器無(wú)法加工此工序)。這種改變使問(wèn)題模型更加符合實(shí)際的生產(chǎn)情境,但同時(shí)也加大了問(wèn)題的復(fù)雜性。
二、生產(chǎn)信息的表示
1.n個(gè)工件:J1,J2,…,Jn。
2.m臺(tái)機(jī)器:M1,M2,…,Mm。
3.工件Ji的第j道工序:Oij。
4.工序集W:將J1-Jn上的工序依次排列,
W={w1,w2,…},
(1)
“w”的下標(biāo)為工序集中每個(gè)工序的編號(hào),從1開(kāi)始依次編號(hào)。
5.工件集中工序wi在第j臺(tái)機(jī)器的加工時(shí)間:tij。
6.工序的機(jī)器集Mij:可加工工序Oij的機(jī)器的集合
Mij={m1,m2,…},
(2)
“m”的下標(biāo)為機(jī)器集中每臺(tái)機(jī)器的編號(hào),從1開(kāi)始依次編號(hào)。
7.全部工件的全部加工時(shí)間T:
每一行依次表示工序集(式(1))中的工序,每一列以此表示機(jī)器集(式(2))中的機(jī)器。如果工序i無(wú)法在機(jī)器j上加工,則tij=-1。
三、編碼方式
如圖2所示的編碼結(jié)構(gòu),本編碼方式對(duì)每個(gè)解的編碼分為兩個(gè)部分,分別為機(jī)器選擇部分和工序序列部分。
1.機(jī)器選擇部分的編碼
如圖3所示的編碼示例(生產(chǎn)信息對(duì)應(yīng)圖1),編碼的每一位依次對(duì)應(yīng)工序集(式(1))上的工序,編碼的每一位的值為加工該工序的機(jī)器在機(jī)器集(式(2))中的編號(hào)。
2.工序序列部分的編碼
如圖4所示的編碼示例(生產(chǎn)信息對(duì)應(yīng)圖1),每個(gè)工件的每個(gè)工序都用此工件的編號(hào)表示,以同一編碼值出現(xiàn)的順序依次表示每個(gè)工件的各 工序,編碼的順序表示各工序的加工順序。
3.解碼過(guò)程
如圖5所示的解碼示例(生產(chǎn)信息對(duì)應(yīng)圖1),首先將工序序列部分的工序依次在機(jī)器選組部分找到加工機(jī)器,然后將這些工序依次加入對(duì)應(yīng)機(jī)器,即可得到生產(chǎn)調(diào)度方案。
四、非支配解
對(duì)于最大化n個(gè)目標(biāo)函數(shù)f1(x),f2(x),…,fn(x),當(dāng)兩個(gè)解x、y滿(mǎn)足:
則稱(chēng)解y支配解x。
如果一個(gè)解不被多目標(biāo)優(yōu)化問(wèn)題的任何其他解支配,那么這個(gè)解被稱(chēng)為一個(gè)非支配解。
對(duì)于兩目標(biāo)優(yōu)化問(wèn)題(最大化目標(biāo)函數(shù))的非支配解可以被圖6形象地描述出來(lái)。
五、精英組
通過(guò)將每一代中的非支配解加入精英組,并在每一代更新精英組(即刪掉加入新的解后精英組中不再是非支配解的解)。
六、救濟(jì)算子
救濟(jì)算子是一種優(yōu)化劣解的算子。
救濟(jì)空間用來(lái)存儲(chǔ)種群中的優(yōu)良個(gè)體的共有序列。
如圖7所示的示例(生產(chǎn)信息對(duì)應(yīng)圖1),救濟(jì)算子的執(zhí)行過(guò)程如下:
1.選擇工件
隨機(jī)選擇一個(gè)工件。
2.確定救濟(jì)空間
對(duì)于機(jī)器選擇部分,從最優(yōu)解將被選擇工件的工序所使用的加工機(jī)器編號(hào)提取;對(duì)于工序序列部分,從最優(yōu)解中將被選擇工件的工序的位置提取。將提取到的信息記入救濟(jì)空間。
3.優(yōu)化劣解
對(duì)于劣解的機(jī)器選擇部分,將被選擇工件的工序所使用的加工機(jī)器的編號(hào)更換為救濟(jì)空間中的機(jī)器編號(hào);對(duì)于劣解的工序序列部分,將被選擇工件的工序先加入對(duì)應(yīng)位置,再將其他工件的工序按照原有的相對(duì)位置加入供需序列部分的空位。
七、通過(guò)相對(duì)重要性的權(quán)值確定法
實(shí)際生產(chǎn)中,各目標(biāo)函數(shù)間的相對(duì)重要性通常由生產(chǎn)者根據(jù)實(shí)際情況得出。加權(quán)法解決多目標(biāo)(f1(x),f2(x),…,fn(x))問(wèn)題時(shí),適應(yīng)度函數(shù)為
f(x)=w1f1(x)+w2f2(x)+…+wnfn(x), (6)
其中
wi≥0,i=1,2,…,n, (7)
w1+w2+…+wn=1. (8)
以如圖8所示的三個(gè)目標(biāo)函數(shù)的相對(duì)重要性示例為例,加權(quán)值的確定方法
如下:
1.將相對(duì)重要性表(圖8)轉(zhuǎn)化為矩陣:
2.對(duì)得到的矩陣的各列進(jìn)行標(biāo)準(zhǔn)化(即對(duì)每列分別乘以一個(gè)數(shù),使各列的和為1):
3.對(duì)各列標(biāo)準(zhǔn)化后的矩陣的各行進(jìn)行標(biāo)準(zhǔn)化(即先將每行求和,再對(duì)每行分別乘以一個(gè)數(shù),使各行的和為1):
4.對(duì)行標(biāo)準(zhǔn)化后的矩陣的每行依次表示三個(gè)目標(biāo)函數(shù)的加權(quán)值,即f1、f2、f3的加權(quán)值分別為w1=0.578、w2=0.302、w3=0.120。
八、兩點(diǎn)交叉算子
在本算法中,兩點(diǎn)交叉算子被用于編碼機(jī)器選擇部分的交叉。
如圖9所示,兩點(diǎn)交叉算子的步驟為:
1.隨機(jī)選擇編碼中兩個(gè)不同的位置。
2.交換兩個(gè)位置點(diǎn)之間的部分。
九、基于工序編碼交叉算子
在本算法中,基于工序編碼交叉算子被用于編碼的工序序列部分的交叉。
如圖10的示例所示,基于工序編碼交叉算子的步驟為:
1.隨機(jī)地從工件中產(chǎn)生兩個(gè)子工件集Js1和Js2。
2.把父代1中屬于Js1的元素復(fù)制入子代1中的相同位置,把父代2中屬于Js2的元素復(fù)制入子代2中的相同位置。
3.把父代2中除Js2所含元素以外的其他元素按順序填入子代1的空位置,把父代1中除Js1所含元素以外的其他元素按順序填入子代2的空位置。
十、機(jī)器選擇部分的突變算子
如圖11的示例所示,機(jī)器選擇部分的突變算子為:
1.在機(jī)器選擇部分隨機(jī)選擇一個(gè)位置。
2.從該位置對(duì)應(yīng)工序的機(jī)器集中隨機(jī)選擇一臺(tái)機(jī)器(的編號(hào))替換當(dāng)前機(jī)器(的編號(hào))。
十一、工序序列部分的突變算子
如圖12的示例所示,工序序列部分的突變算子為:
1.在工序序列部分隨機(jī)選擇兩個(gè)位置。
2.交換這兩個(gè)位置對(duì)應(yīng)的值(工序)。
十二、只檢測(cè)部分鄰域解的局部搜索算法
預(yù)先指定鄰域解檢測(cè)個(gè)數(shù)k。
那么,對(duì)于當(dāng)前解的局部搜索過(guò)程如下:
1.隨機(jī)選擇當(dāng)前解的一個(gè)鄰域解。
2.如果此鄰域解比當(dāng)前解更優(yōu),則鄰域解作為新的當(dāng)前解替換原來(lái)的當(dāng)前解,并返回本步驟1;否則執(zhí)行下一步。
3.如果已經(jīng)檢測(cè)了當(dāng)前解的k個(gè)鄰域解,即當(dāng)前解被檢測(cè)的k個(gè)鄰域解中沒(méi)有更優(yōu)的解,則程序結(jié)束;否則返回本步驟1。
十三、輪盤(pán)賭選擇法
預(yù)先制定要選擇的解的個(gè)數(shù)為n。
輪盤(pán)賭選擇法的過(guò)程如下:
1.計(jì)算每個(gè)個(gè)體(xi)被遺傳到下一代的概率P(xi):
其中N為待選擇種群的種群規(guī)模。
2.計(jì)算每個(gè)個(gè)體(xi)的積累概率qi:
3.在[0,1]之間產(chǎn)生一個(gè)隨機(jī)數(shù)r。
4.如果r<q1,則個(gè)體x1被選擇;如果qk-1<r≤qk,則選擇個(gè)體xk。
5.對(duì)本步驟3、步驟4重復(fù)n次。
十四、含救濟(jì)算子的混合遺傳算法
如圖13,假設(shè)種群規(guī)模為Npop,含救濟(jì)算子的混合遺傳算法的執(zhí)行步驟為:
1.更新救濟(jì)空間,即隨機(jī)選擇一個(gè)工件,在救濟(jì)空間中記錄最優(yōu)解中與該工件有關(guān)的信息。
2.隨機(jī)選擇Npop/2個(gè)個(gè)體,進(jìn)行遺傳搜索(交叉、突變)。
3.(與2同時(shí)進(jìn)行)隨機(jī)選擇Npop/2個(gè)個(gè)體,進(jìn)行遺傳搜索(交叉、突變)。
4.(與2同時(shí)進(jìn)行)選擇適應(yīng)度最差的Npop/2個(gè)個(gè)體,執(zhí)行救濟(jì)算子。
5.將通過(guò)本步驟2、步驟3、步驟4產(chǎn)生的解合并,從中選擇Npop個(gè)解進(jìn)入下一代。
十五、算法詳細(xì)流程如下
如圖14。
設(shè)種群規(guī)模為Npop;突變概率為Pm;局部搜索中對(duì)每個(gè)當(dāng)前解檢測(cè)k個(gè)鄰域解;算法迭代的終止條件為已經(jīng)迭代了n次。
步驟一—初始化種群
1.根據(jù)生產(chǎn)信息分別產(chǎn)生全部工件的工序集W(式(1))和全部工序的機(jī)器集Mij(式(2))。
2.按照工序集中工序的順序,依次從相應(yīng)工序的機(jī)器集中隨機(jī)選擇一臺(tái)機(jī)器,以機(jī)器集中的編號(hào)組成機(jī)器選擇部分的編碼。
3.根據(jù)每個(gè)工件的工序數(shù)產(chǎn)生相應(yīng)個(gè)數(shù)的數(shù)值為工件編號(hào)的數(shù),并將這些數(shù)隨機(jī)排列組成工序序列部分的編碼。
4.機(jī)器選擇部分的編碼在前,工序序列部分的編碼在后,將它們組合。
5.返回本步驟2,直至已經(jīng)產(chǎn)生Npop個(gè)解。
步驟二—更新精英組
1.將當(dāng)前種群中的非支配解復(fù)制入精英組。
2.檢測(cè)精英組中的解,將被其他解所支配的解從精英組中刪除。
步驟三——更新救濟(jì)空間
1.選擇工件
隨機(jī)選擇一個(gè)工件。
2.確定救濟(jì)空間
對(duì)于機(jī)器選擇部分,從最優(yōu)解將被選擇工件的工序所使用的加工機(jī)器編號(hào)提取;對(duì)于工序序列部分,從最優(yōu)解中將被選擇工件的工序的位置提取。將提取到的信息記入救濟(jì)空間。
步驟四—計(jì)算適應(yīng)度函數(shù)值
1.根據(jù)生產(chǎn)者給出的相對(duì)重要性關(guān)系,通過(guò)式(9)、式(10)、式(11)確定各目標(biāo)函數(shù)的加權(quán)值。
2.通過(guò)式(6)計(jì)算每個(gè)解的適應(yīng)度函數(shù)值。
步驟五——遺傳搜索
1.隨機(jī)選擇Npop/2個(gè)個(gè)體。
2.交叉
隨機(jī)將被選擇的解兩兩一組作為一對(duì)父代解。
對(duì)每個(gè)解的機(jī)器選擇部分使用如圖9所示的兩點(diǎn)交叉算子進(jìn)行交叉,對(duì)每個(gè)解的工序序列部分采用如圖10所示的基于工序編碼交叉算子進(jìn)行交叉。
3.根據(jù)突變概率Pm計(jì)算進(jìn)行交叉的解的數(shù)目,并隨機(jī)選出相應(yīng)數(shù)目的解。對(duì)每個(gè)解的機(jī)器選擇部分和工序序列部分分別采用如圖11所示的突變算子和如圖12所示的突變算子進(jìn)行突變。
步驟六—局部搜索(與步驟五同時(shí)進(jìn)行)
(對(duì)每個(gè)解)
1.隨機(jī)選擇當(dāng)前解的一個(gè)鄰域解,鄰域解通過(guò)遺傳搜索中的突變算子產(chǎn)生。
2.如果鄰域解優(yōu)于當(dāng)前解,則以鄰域解作為當(dāng)前解替換原當(dāng)前解,返回本步驟1;否則,執(zhí)行下一步。
3.如果已經(jīng)檢測(cè)了當(dāng)前解的k個(gè)鄰域解,則局部搜索結(jié)束,當(dāng)前解即為局部搜索的結(jié)果;否則,返回本步驟1。
步驟七——救濟(jì)算子(與步驟五同時(shí)進(jìn)行)
1.獲取步驟三得到的救濟(jì)空間中的信息,包括被選擇的工件及其加工機(jī)器和工序位置。
2.選擇適應(yīng)度最差的Npop/2個(gè)個(gè)體。
3.對(duì)于劣解的機(jī)器選擇部分,將被選擇工件的工序所使用的加工機(jī)器的編號(hào)更換為救濟(jì)空間中的機(jī)器編號(hào);對(duì)于劣解的工序序列部分,將被選擇工件的工序先加入對(duì)應(yīng)位置,再將其他工件的工序按照原有的相對(duì)位置加入供需序列部分的空位。
步驟七—選擇
采用輪盤(pán)賭選擇法選擇:
1.通過(guò)式(12)計(jì)算每個(gè)個(gè)體(xi)被遺傳到下一代的概率P(xi)。
2.通過(guò)式(13)計(jì)算每個(gè)個(gè)體(xi)的積累概率qi。
3.在[0,1]之間產(chǎn)生一個(gè)隨機(jī)數(shù)r。
4.如果r<q1,則個(gè)體x1被選擇;如果qk-1<r≤qk,則選擇個(gè)體xk。
5.對(duì)3、4重復(fù)Npop次,以選擇到Npop個(gè)個(gè)體。
步驟八—迭代
1.如果算法已經(jīng)迭代了指定次數(shù),則執(zhí)行下一步驟(更新精英組);否則,返回步驟二。
步驟十一—更新精英組
1.將當(dāng)前種群中的非支配解復(fù)制入精英組。
2.檢測(cè)精英組中的解,將被其他解所支配的解從精英組中刪除。