Duck Swarm Algorithm (DSA)--鸭群算法 Python实现

 DSA算法及测试函数

        最近在学习粒子群优化算法。在arxiv上看到篇比较有趣的文章,其中提出的鸭群算法对比其它算法在许多测试函数上表现都较好,原文中对比了海洋捕食者算法(MPA)、阿基米德优化算法(AOA)、灰狼优化算法(GWO)、鸡群优化算法(CSO)、粒子群优化算法(PSO)、萤火虫算法(FA)、Sine cosine算法(SCA)。

原文链接:  Duck swarm algorithm: a novel swarm intelligence algorithm 

根据论文中的伪代码,实现了对应的Python代码,附上github地址
https://github.com/czwchenzhun/DSA.git

目前只做了 PSO 和 DSA 的对比
并且实现了优化算法中使用的17个测试函数
测试函数参考了下面两篇博文实现

第十九弹——23种标准测试函数解析~图像&公式&代码 第二十弹——不常见的标准测试函数~图像&代码&公式

下面是两个测试函数的适应度取半对数后的曲线图

 论文的个人感受

 在多次测试下找到了鸭群算法收敛速度快的关键,在位置更新的公式中存在这样一个式子:

\large x_i^{t+1}=x_i^{t}+\mu * x_i^{t} * sign(r-0.5)

        其中x表示位置,i表示第i个粒子(鸭子),t表示第t次迭代
        μ是随着迭代次数变换的控制因子其值域为[0,2]
        sign是符号函数,r是属于[0,1]的随机数,当(r-0.5)<0时sign函数返回值为-1,否则返回值为1
        因此这个式子可以解读为:下一轮迭代中鸭子的位置等于鸭子当前位置加或减(加减各一半概率)μ乘以鸭子当前位置,所以对于适应度最优的位置各个维度的值都为0(即x=[0,0,...,0,0])的测试函数,DSA算法能够快速的收敛。
        对于论文中的其它式子,个人猜测其目的是为了优化其它类型的测试函数。由于我英文不太好,看了这篇文章感觉这个算法和鸭子扯上关系有点牵强。还有一点,这个算法中一次迭代对所有个体进行了两次更新适应度的操作,各人感觉这里设定相同的迭代次数去将DSA算法和其它算法对比不妥。比如使用DSA和PSO对比,个体数目相同的情况下,如果DSA设定迭代次数为100,那么PSO应该设定迭代次数为200较为恰当。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值