和声搜索算法——个人解读

来源:互联网 发布:广东人事考试中心 网络 编辑:程序博客网 时间:2024/05/19 04:04

联系方式:860122112@qq.com

和声搜索算法(Harmony search, HS)是一种新兴的智能优化算法,通过反复调整记忆库中的解变量,使函数值随着迭代次数的增加不断收敛,从而来完成优化。算法概念简单、可调参数少、容易实现。

类似于模拟退火算法对物理退火的模拟、遗传算法对生物进化的模仿、以及粒子群优化算法对鸟群的模仿等,和声算法模拟了音乐演奏的原理,它是 2001 年韩国学者 Geem Z W 等人提出的一种新颖的智能优化算法。算法模拟了音乐创作中乐师们凭借自己的记忆,通过反复调整乐队中各乐器的音调, 最终达到一个美妙的和声状态的过程。
举个例子:
假设一个需要优化的函数f(X),且X={x1,x2,,xn}Rn。那么,可以把X看成一个由n个成员组成的乐队,他们用不同的乐器演奏出来音乐xi的和声对应X={x1,x2,,xn}f(X)可以看成是对这组和声的评价,成员们根据评价不断调整自己演奏的xi(搜索过程),直到评价达到要求。

一. 一般HS算法步骤

(1)定义问题和参数值
a. 假设一个最小化问题,即:
minf(X)X={x1,x2,,xn}Rn

b. 确定参数值

  • 和声记忆库的大小HMS:理解成和声种群的大小
  • 和声记忆库取值概率HMCR:从现有种群(HM和声库)中拿出一个和声的概率
  • 音调微调概率 PAR:对拿出的和声进行微调的概率
  • 音调微调带宽 BW:微调的幅度
  • 创作的次数 Tmax:调整(迭代)的次数

(2)初始化和声记忆库HMS
X的解空间里随机生成 HMS 个和声(理解成种群)X1,X2,,XHMS放入和声记忆库,并记录对应的f(X),和声库的形式为:

HM=X1X2XHMS=x11x21xHMS1x12x22xHMS2x1nx2nxHMSn|f(X1)|f(X2)|f(XHMS)

(3) 生成一个新的和声
[0,1]之间产生一个随机数r1,与HMCR进行比较

  • r1<HMCR,从和声记忆库中随机拿出一个和声变量
  • 否则,从解空间随机生成一个和声变量
  • 由上得到一个和声变量,若这个和声变量是从和声库中得到的,就需要对这个和声变量进行微调,在[0,1]之间产生一个随机数r2
  • r2<PAR,根据微调带宽BW来对得到的和声变量进行调整,得到一个新的和声变量
  • 否则,不做任何调整

最后得到新的和声Xnew

(4)更新和声记忆库
Xnew进行评估,即f(Xnew),若优于 HM 中的函数值最差的一个,即f(Xnew)<f(Xworst),则将Xnew代替HM中函数值最差的和声Xworst;否则,不做修改。

(5)检查算法是否终止
重复步骤 (3)和 (4),直到创作(迭代)次数达到 Tmax 为止。

HS流程图:
这里写图片描述

算法
这里写图片描述

第11行的UBjLBj是变量xj的上界和下界,即确定解空间范围;最后一行的NI相当于前面提到的Tmax,即迭代次数。

二. 改进的HS算法(The improved harmony search (IHS) algorithm)

令PAR和BW能随迭代次数的变化而变化
这里写图片描述
初始化时先确定PARmin,PARmax,BWmin,BWmaxt为当前迭代次数,可以看出越往后PARBW越小。

二. 全局最优HS算法(Global best harmony search (GHS) algorithm)

先直接看算法
这里写图片描述

相比一般的HS,算法只改了一行(图中红框)。xB(对应上文是XB)表示的是和声库HM当前最好的和声,也就是从xB中随机挑选一个变量k作为新和声的第j个变量。(注意k不一定等于j

二. 自适应全局最优HS算法(The self-adaptive GHS (SGHS) algorithm)

  • 变量生成规则修改:

    这里写图片描述

    相比GHS,SGHS的变量生成规则做了两处修改
    第一处修改意在增加变异,避免掉入局部最优解;第二处修改即把GHS对应行的xB(k)改成xB(j),从HM中拿出的最好和声与当前要生成的变量在和声中的位置是相同的。因为如果像GHS那样,位置的不同有很大概率使新生成的和声xnew性能比xB糟糕。

  • 参数自适应
    在SGHS中,四个参数HMS, HMCR, PAR 和 BW,除了HMS是初始化后固定外,其他三个参数都是随迭代搜索而动态调整,其中HMCR和PAR为自适应调整。
    HMCR是从HM中选择一个和声的概率。 大的HMCR值有利于局部搜索,从而增加算法的收敛速度,而小的HMCR值增加了和声库的多样性。 通过广泛的模拟,Omran和Mahdavi提出,通常使用较大的HMCR值(即> = 0.9)更好。 PAR是从xB选择音调的调整率。 大的PAR值有利于将xB的信息传递到下一代,从而增强了算法在xB周围的局部开发能力,而小的PAR值使得新的和声向量能够通过扰乱和声库中相应维度的值, 从而扩大了搜索区域和增加和声库的多样性。 由于在搜索过程中局部利用和全局探索总是矛盾的,因此难以确定HMCR和PAR的值。
    在SGHS论文中,HCMR和PAR通过进入HM生成和声的历史记录而动态地调整适当的范围。假设HMCR(PAR)值服从均值HMCRm(PARm)为[0.9,1.0]([0.0,1.0])、标准差为0.01(0.05)的正态分布。最初,HMCRm(PARm)设定为0.98(0.9)。然后SGHS根据正态分布生成的HMCR(PAR)开始搜索。在迭代过程中,记录下Xnew成功替换HM中Xworst时所对应的HMCR(PAR)的值。在经过指定迭代次数LP(论文设为100)之后,通过求在此期间记录的所有HMCR(PAR)值的均值来重新生成HMCRm(PARm)。随着新的均值和固定的标准差0.01(0.05),产生新的HMCR(PAR)并用于随后的迭代。重复上述步骤。因此,可以逐渐学习适当的HMCR(PAR),以适应特定问题和特定阶段的搜索。

BW的调整
这里写图片描述
NI是需要迭代的总次数,t是当前迭代次数。

SGHS算法:
这里写图片描述

博主之前做的是使用HS和SGHS优化FCMAC(模糊小脑神经网络),部分代码链接:
https://github.com/DajunZhou/SGHS-CMAC
参考文献
Pan Q K, Suganthan P N, Tasgetiren M F, et al. A self-adaptive global best harmony search algorithm for continuous optimization problems[J]. Applied Mathematics and Computation, 2010, 216(3): 830-848.

原创粉丝点击