式中:τ0--GA算法中所有染色體轉換為ACO算法中有效路徑後,路徑片段(i,j)上的信息素濃度。該值不超過MMAS算法中的最高信息素濃度τmax。
Δτkij--GA算法染色體k轉換為ACO算法路徑後,路徑片段(i,j)上新增的信息素濃度。
Δτkij=fitnesskave(fitness),
式中:fitnessk為染色體k的適應值,ave(fitness)為種群全體染色體適應值的平均數。
隻要確定了GA算法的算子和ACO算法的allowedk,本書後麵用於各算例的GA.ACO算法即可按上述算法流程構建。
HACO算法的原理
將GA算法中的選擇、雜交和變異算子應用到ACO算法中,產生一種新的組合算法--混雜蟻群算法HACO(hybridantcolonyoptimization),其中ACO算法采用MMAS算法。改進算法主要在MMAS算法的基礎上增加了選擇算子、雜交算子和變異算子。
在雜交之前需要選擇父體螞蟻,本書的算法采用的是輪盤賭方法。采用這種選擇策略需要先計算第k隻螞蟻本次循環所產生的路徑的長度,並根據這個長度按式(3.7)計算各隻螞蟻被選擇的概率[125]:
用這種方式選擇,1/Lk較大的螞蟻(即Lk較小的螞蟻)被選中的幾率更大。選擇螞蟻雜交後,對被吸收的螞蟻執行全局更新規則。
雜交過程為:先隨機選擇兩個雜交點。然後交換兩父體中、在所選雜交點之間的部分,這個部分被稱為雜交段。將父體1的雜交段位置不變地複製到後代2中,同樣也將父體2的雜交段位置不變地複製到後代1中。父體1中的其他元素不變,用沒有經過的部分按先後順序代替父體1中與父體2雜交段相同的元素。對父體2進行同樣的操作。計算雜交後生成路徑的目標函數值,如果比雜交前更優,則保留雜交;否則,取消雜交。
如同GA算法一樣,本書使用小隨機概率來決定每隻螞蟻是否發生變異,即發生變異的螞蟻是隨機選定的。在本書中采用逆轉變異方式。
設選定的某個個體所走過路徑為:i0,i1,i2,…,in-1,其中i0,i1,…,in-1∈{0,1,2,…,n-1}。本書使用兩個隨機數來決定變異點,將這兩個變異點之間的路徑按與原來相反的順序排列。重新計算這個個體所走過的路程對應的目標函數值,如果比變異前更優,則保留變異;否則,取消變異。
HACO算法過程描述如下:
(1)在起點N放置h個螞蟻,在代表從i節點到j節點的路徑(i,j)上設置相同的初始信息素τij(0)。
(2)用啟發式規則確定t時刻k螞蟻(k=1,2,…,h)在路徑(i,j)上的啟發信息ηij(t)。
(3)按式(3.1)計算t時刻k螞蟻在i節點處選擇路徑(i,j)的尋徑概率。
(4)用輪盤賭方法選擇i節點處k螞蟻前進的路徑。
(5)當i節點處k螞蟻前進的路徑確定後,可能其他節點的某些路徑不再可行(如JSP中的“死鎖”路徑[126,127]),應在k螞蟻的allowedk中刪除這些不能選擇的路徑,但仍保留其信息素值,以供其他螞蟻及後續計算使用。
(6)當所有螞蟻回到終點F後,各進行一次變異和雜交操作。雜交過程為:先隨機選擇兩條路徑為父代,並隨機確定兩個雜交點。雜交點之間的部分被稱為雜交段。將父體1除雜交段之外的部分路徑保留至子代1中,將父代2中與父代1雜交段相同的路徑段按原有順序複製到父代1的雜交段中,由此構成了完整的子代1。對父體2也進行同樣的操作,雜交完成。變異操作采用逆轉變異方式,操作過程為:隨機選取一條路徑為父代,並確定兩個隨機變異點,分析這兩個變異點之間
的路徑屬於哪些加工階段,將兩個變異點之間的每個階段的路徑按與原來相反的順序排列。重新計算經交叉、變異後個體所走過的路程對應的目標函數值。如果有所優化,則保留。
(7)判斷是否滿足結束條件。若滿足,則輸出計算結果,計算結束;若不滿足,則更新各條路徑的信息素。