優(yōu)化算法筆記(二十六)和聲搜索算法

1. 和聲搜索算法簡介

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
和聲搜索算法(Harmony Search)是受音樂中的和聲啟發(fā)而提出的啟發(fā)式算法,其提出(發(fā)表)年份為2001年,算是一個比較老的算法了。和聲搜索算法放在現(xiàn)在,其性能非常一般,不過它提出了一種領域搜索的具體實現(xiàn)方式,可以和不同的算法融合,提高其他算法的性能。

來自百度百科

單獨看一個和聲意義不大,一個和聲的一個維度會根據(jù)群體中該維度的所以取值來確定其領域范圍,然后再進行領域搜索。

2. 算法流程

原算法受音樂啟發(fā),所以它所解決的目標問題也是離散的問題。
和聲搜索算法中的一個個體被稱為和聲記憶(Harmony Memory,HM),群體中和聲記憶的數(shù)量為N,每個和聲記憶中的音數(shù)(維度)為D。每一維的取值范圍為L={l_1,l_2,...l_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ù)f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2,a=b=90
實驗一: 思路一

問題維度(維度) 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) ★★★★☆☆☆☆☆☆
改進點 ★★★★★☆☆☆☆☆

目錄
上一篇 優(yōu)化算法筆記(二十五)飛蛾撲火算法
下一篇 優(yōu)化算法筆記(二十七)蜉蝣算法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容