1. 什么是JobShop問題
- Job,中文翻譯成工件。一個工件又由若干道工序加工完成。
- resource, 資源。在本文的車間調度中資源指的是機器,每道工序要在某個特定機器上加工。
- Constraint, 約束。在車間調度中約束主要有以下兩種:
- 同一個工件包含的工序有先后順序。
- 每個機器不能同時處理兩道工序,因此這台機器上完成工序時要串行,不能並行。
- Objective,目標。JobShop問題的一個常見目標是使所有工件完成的總時間最小,這個總時間英語叫做Makespan。
一個JobShop問題可以用一個表格來刻畫,例如下面的表格:
θ(1,1) | θ(1,2) | θ(2,1) | θ(2,2) | |
r (i,j) | 1 | 2 | 2 | 1 |
D (i,j) | 3 | 2 | 5 | 1 |
θ表示工序,例如, θ(1,1)就表示第1個工件的第1道工序。
r (i,j)表示機器編號,例如,r(1,1)=1,表示第一個工件的第一道工序的加工機器號為1。
D (i,j) 表示加工時間,例如,D(1,1)=3,表示第一個工件的第一道工序的加工需要3個單位的時間。
JobShop問題的一個解可以用一個加權有向無環圖來表示,請看下面的一個有向無環圖:
這個加權有向無環圖就代表上述JobShop問題的一個解,我們可以看到每個工序作為圖中的一個節點出現,權重就是這個節點對應的加工時間。工序之間的先后順序用箭頭表示,在這里需要注意的是:除了同一個工件下面的工序之間有先后順序外,同一台機器上加工的工序也要串行。另外,我們增加了兩個虛節點,分別為 θI 和 θF,表示開始和結束。從θI有箭頭指向每個工件的第一道工序,從每個工件的最后一道工序出發用箭頭指向 θF。虛節點的加工時間為0。
一個有向無環圖中有若干條從θI到θF的路徑,在這些路徑中我們找出那條路徑上所有節點的權重相加最大的那一條,這個最大的權重和就是這個解對應的makespan,即所有工件加工完畢所需的時間。
注意:所有工件都完成的總時間(Makespan)不是3+2+5+1=11,而是上面那個有向完全圖中所有能從開始節點到達結束節點的全體路徑中那條所需時間最長的路徑花費的時間,即7.下面是另外兩個有向圖,即另外兩個解的例子:
2. 遺傳算法與JobShop
遺傳算法是一種隨機搜索算法,它主要分為六大功能模塊:編碼、交叉、變異、解碼、評價、選擇。整個算法的流程如下:
-
編碼:
我們利用工件號的排列來表示工序的先后順序,例如:1212這個排列中第一個1代表第一個工件的第一道工序,第二個1代表第一個工件的第二道工序,第一個2代表第二個工件的第一道工序,第二個2代表第2個工件的第二道工序。可見,1212這個排列可以完全體現出上面的有向無環圖中體現的節點先后順序。
需要說明的是一個有向無環圖可能對應多個工件號的排列方式,例如,1212,2121,1221,2112都對應上面的有向無環圖。
在遺傳算法中首先做的就是編碼,即隨機生成若干個工件號的排列,這些個隨機生成的排列構成的集合被稱為種群,每個排列被稱為染色體。
如圖所示,種群大小為4,該種群中包含4條染色體,分別為2211,1212,1122,2121。請思考為什么1111為非法染色體?