带你走进和声搜索算法(Harmony search )的世界!
和聲搜索算法的理論和應用
- 一、HS算法簡介
- 二、HS算法的基本理論和應用
- 三、HS應用
一、HS算法簡介
和聲搜索(HS)算法首先由Geem等人在2001年提出,和其他元啟發式算法一樣,它受到音樂家即興和聲的基本原則的啟發。該算法簡單、搜索效率高。
已成功應用于函數優化、機械結構設計、管網優化和數據分類系統優化等領域。
二、HS算法的基本理論和應用
音樂家在譜寫和聲時,通常會嘗試記憶存儲中各種音調的可能組合。這種尋找完美和聲的過程實際上類似于尋找工程問題的最優解的過程。HS方法實際上是受和聲即興創作的工作原理的啟發。圖1顯示了基本HS方法的流程圖,其中包括四個主要步驟。
算法流程:
步驟一:
初始化HS的內存(HM)。內存中包含考慮到的隨機的解。對于一個N維問題,HM可以表示為:
[xi1,xi2,…,xin] (i=1,2,…,HMS)是一個候選解。HMS通常設定為50-100.
步驟二:
從內存中取出候選解進行改進[x’1,x’2,…,x’n]。利用和聲內存率(HMCR)獲取 xj’ 的每個組分。
HMCR定義為從HM中選取某個組分的概率。1-HMCR 是隨機生成的概率。
如果xj’ 取自隨機HM成員的第j 維度,可以根據PAR(Pitching Adjust Rate)進一步改變。
PAR決定著HM中需要改變的候選解的概率。
步驟三:
更新HM。評估步驟二獲得解,如果產生的值優于最壞的解,就會替換掉最壞的解,否則,就消除這個解。
步驟四:
重復步驟2和步驟3直到預設終止標準,比如達到最大迭代次數。
三、HS應用
%%%實值和聲搜索算法求函數極值%%%% 初始化 clear all; %清除所有變量 close all; %清圖 clc; %清屏 HMS=3; %和聲庫的大小 HMCR=0.95; %記憶庫取值概率 PAR=0.1; %微調概率 bw=1; %音調微調帶寬 Tmax=200; %創作的次數 M=3; %樂器(變量)個數 Mmin=[-5 -5 -5]; %樂器的音調下限 Mmax=[5 5 5]; %樂器的音調上限% 和聲記憶庫初始化 X=zeros(HMS,M); % 隨機產生和聲記憶庫 for i=1:HMSfor j=1:MX(i,j)=rand()*(Mmax(j)-Mmin(j))+Mmin(j);end end% 初始化新的樂器組合 xnew=zeros(1,M); % 初始化最優解為第一個樂器組合 yBest=func(X(1,:)); xBest=X(1,:);% 迭代周期為Tmax for iter=1:Tmaxiter;% 以概率HMCR在和聲庫中隨機選取if rand()<HMCRxnew=X(round(rand()*(HMS-1))+1,:);% 以概率1-HMCR在樂器音調范圍內隨機產生elsefor j=1:Mxnew(j)=rand()*(Mmax(j)-Mmin(j))+Mmin(j);endend% 以概率PAR進行擾動if rand()<PARfor j=1:Mxnew(j)=xnew(j)+2*bw*rand()-bw;endend% 計算新樂器組合的和聲為ynewynew=func(xnew);% 更新和聲庫,判斷新解是否比和聲庫中最差的解更好,是則替換for j=1:HMSif ynew<func(X(j,:))X(j,:)=xnew;break;end% 記錄最美的和聲if yBest>func(X(j,:))yBest=func(X(j,:)); xBest=X(j,:);endend% 記錄每個周期的最美和聲trace(iter)=yBest;tracef(iter,:)=xBest; end% 繪制結果 xBest %最好和聲組合 trace(end) %最好和聲 figure plot(trace) xlabel('迭代次數') ylabel('目標函數值') title('適應度進化曲線')
由圖像可以看出,和聲搜索可以較快收斂到最優解3附近。
原文參考:
https://www.hindawi.com/journals/cin/2015/258491/
加深理解
代碼參考鏈接
總結
以上是生活随笔為你收集整理的带你走进和声搜索算法(Harmony search )的世界!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: network3D: 交互式桑基图
- 下一篇: 分享 C++命名空间的解释