1. 和聲搜索算法簡介
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
和聲搜索算法(Harmony Search)是受音樂中的和聲啟發(fā)而提出的啟發(fā)式算法,其提出(發(fā)表)年份為2001年,算是一個比較老的算法了。和聲搜索算法放在現(xiàn)在,其性能非常一般,不過它提出了一種領域搜索的具體實現(xiàn)方式,可以和不同的算法融合,提高其他算法的性能。
單獨看一個和聲意義不大,一個和聲的一個維度會根據(jù)群體中該維度的所以取值來確定其領域范圍,然后再進行領域搜索。
2. 算法流程
原算法受音樂啟發(fā),所以它所解決的目標問題也是離散的問題。
和聲搜索算法中的一個個體被稱為和聲記憶(Harmony Memory,HM),群體中和聲記憶的數(shù)量為N,每個和聲記憶中的音數(shù)(維度)為D。每一維的取值范圍為。
2.1離散算法(原算法)
原算法中每個維度的取值范圍L是一組有序的離散的值,即在指定的變量值中選取一個作為和聲記憶的值。
每個和聲記憶每次迭代只能變?yōu)槠漕I域的值。
和聲算法中有兩種操作:1.移動到領域,2.變異到領域
其概率分別為Harmony Memory Considering Rate(HMCR)和Pitch Adjusting Rate(PAR)。
其中HMCR取值約為0.95,PAR取值約為0.10。
可以看出該算法的步驟和數(shù)值參考了遺傳算法,而且兩者都是為了處理離散問題。
2.2.1移動到鄰域
例子如下:
和聲記憶的數(shù)量為3,維度為2,其中第1維的取值范圍為{A,B,C,D,E,F,G},第2維的取值為{3,4,5,6}。
第1代,三個個體的取值如下
個體_代數(shù) | 取值 |
---|---|
1_1 | (A,3) |
2_1 | (G,5) |
3_1 | (D,4) |
在計算第2代時,每個個體的每一維只能去到該維度的鄰域的值。
個體1_2能取到的值為(A,3) (A,4) (B,3) (B,4)
個體2_2能取到的值為(F,4)(F,5)(F,6)(G,4)(G,5)(G,6)
個體3_2能取到的值為(C,3)(C,4)(C,5)(D,3)(D,4)(D,5)(E,3)(E,4)(E,5),
圖中標出了這三個個體能夠到達的鄰域。
2.2.2 變異到領域
變異到鄰域到操作也很簡單,該操作是對標了遺傳算法中的變異操作。
變異到鄰域操作時,該維度不會變異到當前已有的值。
如個體1_1變異第1維,由于群體中第1維的取值為{A,D,G}故該維度只能取到{B,C,E,F}。
下圖中標有顏色的塊出了變異操作無法到達的位置,空白位置為變異操作能夠到達的位置。(如果沒有空白位置呢?概率非常小,畢竟個體位置遠少于解空間位置,如果出現(xiàn)了,不變異或者隨機一個位置都行)
迭代過后,如果新的位置更好,則保留該和聲記憶,并去除最差的和聲記憶。
最后文章給出了判斷找到的解是否是最優(yōu)解的判斷函數(shù)
其中Hr=HMCR,Hi會在該維度找到更好值時隨著迭代次數(shù)遞增。該公式的作用主要是為了判斷何時去結束算法程序,不過在之前我們都是使用的最大迭代次數(shù)來結束算法程序,所有好像沒多大用處。
算法的流程也挺簡單的:
2.2連續(xù)數(shù)值算法
和聲搜索的原算法是根據(jù)音樂中和聲概念提出的,音符是離散的,所有算法也是離散的,對標遺傳算法用于處理離散解空間問題,那么如何修改和聲搜索算法使其能處理連續(xù)數(shù)值問題呢?
最關鍵的點是如何處理“鄰域”,在連續(xù)解空間上,很難定義出一個點的領域,而且每個維度上的取值數(shù)量也是無窮的。
為和聲搜索算法定義鄰域也有幾種思路:
1. 將所有的個體定義為該個體的鄰域,即每次隨機從群體中選擇一個個體,該維度移動到所選中的個體處。
如圖A,B,C為當前的三個和聲記憶,則其中橙色塊所在的點為其可移動到的領域,配合上變異操作,該方式退化成了遺傳算法的一種形式。
2. 將群體中的每一維進行排序,在排序成的序列中的鄰域進行移動。
其中黑色框代表的是解空間范圍,藍色區(qū)域代表的是A的鄰域,橙色區(qū)域代表的是B的鄰域,綠色區(qū)域代表的是C的鄰域。
A的鄰域:x軸上小于C,y軸上大于B,與解空間范圍圍成的區(qū)域。
B的鄰域:x軸上大于A小于B,y軸上小于B, 與解空間范圍圍成的區(qū)域。
C的鄰域:x軸上大于C,y軸上大于C小于A, 與解空間范圍圍成的區(qū)域。
每次移動到鄰域只需要在自己的鄰域內隨機一個位置即可,其他操作與離散時相同。
3. 由于思路2中會出重疊的部分,所以我們可以取兩個鄰域的中點作為邊界。
其中D,E,F分別為AB,AC,BC的中點,A,B,C三個和聲記憶的鄰域將由DEF這三個點及解空間邊界決定,此時的鄰域比思路2中的更小,也不會出現(xiàn)重疊部分。
當某一維度的兩個領域值相等時,上述(二維)的鄰域(面)將會退化成鄰域(線),可能會導致該維度快速收斂到該值,故此時需要忽略重復值,將鄰域重新展開(成為面)。
在連續(xù)算法中,當滿足HCMR條件時,算法將根據(jù)上面的色塊在鄰域中隨機選擇一個值;當滿足PAR條件時,由于無法剔除指定值,簡單起見,直接移動到隨機的和聲記憶的該維度。
后續(xù)的實驗由于是求解連續(xù)函數(shù)最值,故會選擇上述連續(xù)算法中的三種思路來進行。
3. 實驗
適應度函數(shù)。
實驗一: 思路一
問題維度(維度) | 2 |
總群數(shù)量(種群數(shù)) | 20 |
最大迭代次數(shù) | 50 |
取值范圍 | (-100,100) |
實驗次數(shù) | 10 |
HMCR | 0.95 |
PAR | 0.10 |
從圖像可以看出,思路一的策略與遺傳算法非常的相似,移動路線類似于十字架,最終也收斂到了正解附近。前期搜索主要靠鄰域移動,后期移動則是靠變異。
值 | |
---|---|
最優(yōu)值 | 0.2598391280329598 |
最差值 | 11.025864333873304 |
平均值 | 3.838399992672996 |
從結果也可以看出與遺傳算法的差距不大,算法不是很穩(wěn)定,其策略是飛到相鄰的和聲記憶上,所以跨越度比較大,精度全靠變異。
實驗二: 思路二
問題維度(維度) | 2 |
總群數(shù)量(種群數(shù)) | 20 |
最大迭代次數(shù) | 50 |
取值范圍 | (-100,100) |
實驗次數(shù) | 10 |
HMCR | 0.95 |
PAR | 0.10 |
從圖像中可以看出,種群的搜索路徑不在像實驗一中那樣直來直去的十字路徑,收斂的速度也慢了不少,但是仍能在正解附近收斂。
值 | |
---|---|
最優(yōu)值 | 1.7331457825051476E-4 |
最差值 | 0.23379313138956984 |
平均值 | 0.04418160460843435 |
從結果中可以看出,思路二的結果好了不少,同時也更加穩(wěn)定(誤,運氣好,之前實驗出現(xiàn)過不好的結果,沒能重現(xiàn))。該思路的鄰域搜索面積會更大,且個體之間的鄰域存在重疊部分,故會有可能收斂于不好的位置,不過概率也較小。
實驗三: 思路三
問題維度(維度) | 2 |
總群數(shù)量(種群數(shù)) | 20 |
最大迭代次數(shù) | 50 |
取值范圍 | (-100,100) |
實驗次數(shù) | 10 |
HMCR | 0.95 |
PAR | 0.10 |
圖像逐漸貪吃蛇化!前期的圖像與思路一相似,后期的圖像有點類似遺傳算法,可能是鄰域的面積逐漸縮小成了長條狀所致,不過最終“貪吃蛇”還是吃到了食物。
值 | |
---|---|
最優(yōu)值 | 4.682263307072644E-4 |
最差值 | 3.8583145408178465 |
平均值 | 0.7887457234044545 |
結果可以看出,思路三的穩(wěn)定性不太行,當全部個體收斂到了一點后會開始進行思路一的替換操作,但無論如何替換都是相同的值,難以找到更優(yōu)的位置,于是會出現(xiàn)一個較差的結果。這里也可以增加范圍隨機來跳出局部最優(yōu)。
4. 總結
和聲搜索算法是根據(jù)和聲樂理知識提出的算法。由于音符是離散的值,算法也對標了遺傳算法,故原算法也是針對離散問題提出的。在解決連續(xù)性問題時,需要對其鄰域概念進行擴展和修改,最終的效果與遺傳算法相差不大。
在現(xiàn)在看來,和聲搜索算法的效果屬實一般,對于其的針對性研究也不太多,該算法主要提出了其不同于遺傳算法的遍歷解空間的方式。所以在很多論文中都能看到用和聲搜索算法與其他算法融合來進行改進的例子。
與遺傳算法相比,和聲搜索算法的鄰域概念,將遺傳算法的基因由線擴展到了面上。這一點有點類似于SVM和卷積神經(jīng)網(wǎng)絡的關系,不過,遺傳算法和和聲搜索算法的差別并沒有那么大,只是搜索方式不同罷了。
參考文獻
Geem Z W , Kim J H , Loganathan G V . A New Heuristic Optimization Algorithm: Harmony Search[J]. Simulation, 2001, 2(2):60-68. 提取碼:4udl
Omran M , Mahdavi M . Global-best harmony search[J]. Applied Mathematics and Computation, 2008, 198(2):643-656. 提取碼:pk3s
以下指標純屬個人yy,僅供參考
指標 | 星數(shù) |
---|---|
復雜度 | ★★☆☆☆☆☆☆☆☆ |
收斂速度 | ★★★★★☆☆☆☆☆ |
全局搜索 | ★★★★☆☆☆☆☆☆ |
局部搜索 | ★★★☆☆☆☆☆☆ |
優(yōu)化性能 | ★★★☆☆☆☆☆☆☆ |
跳出局部最優(yōu) | ★★★★☆☆☆☆☆☆ |
改進點 | ★★★★★☆☆☆☆☆ |