当前位置:   article > 正文

14种混沌映射,python代码,可自由切换,以鲸鱼和蜣螂算法为例,方便应用于所有算法..._tent映射和bernoulli映射相似

tent映射和bernoulli映射相似

 本期采用PYTHON代码实现14种常见的和不常见的混沌映射用于优化群智能算法,作者写好了一个Chaos类,方便调用,代码可一键切换,可用于所有智能算法优化,本篇文章以鲸鱼和蜣螂算法为例进行介绍

本文涉及14种混沌映射算法,用于在初始化智能算法粒子时使用,14种混沌映射算法包括:Tent映射、Fuch映射、Henon映射、SPM映射、Logistic映射、Cubic映射、chebyshev映射、Piecewise映射、sinusoidal映射、Sine映射,ICMIC映射, Circle映射,Bernoulli映射,Singer映射。关于每个方法映射的原理,本文就不再一一介绍。

01

选择混沌映射有什么用

经实验证明,采用混沌映射产生随机数的适应度函数值有明显提高,用混沌映射取代常规的均匀分布的随机数发生器可以得到更好的结果,特别是搜索空间中有许多局部解时,更容易搜索到全局最优解。一句话来讲就是:混沌映射可以增强粒子的随机性和多样性。

02

混沌映射可视化图片

采用python代码,实现对混沌映射的绘图。以SPM映射和Fuch映射为例,展示一下结果图。当然这个用肉眼也确实看不出太大区别,其他12种混沌映射画出来的结果都和这个差不多,就不一一展示了。

484492cbc35836a3c7f2f2dc03082ba4.png

ae7077027cc6483cebac32a867301dab.png

绘图代码如下:

  1. from chaos import Chaos #作者自己写的一个class
  2. import numpy as np
  3. import math
  4. from matplotlib import pyplot as plt
  5. dim = 1000
  6. lb = np.zeros([dim,1])
  7. ub = np.ones([dim,1])
  8. chaos_ = Chaos(1, dim, lb, ub)  # 生成一个Chaos类
  9. '''
  10.         可选函数有:tent_initial,fuch_initial,sine_initial,singer_initial,henon_initial,cubic_initial,
  11.                 icmic_initial,bernoulli_initial,chebyshev_initial,circle_initial,logistic_initial,
  12.                 piecewise_initial,sinusoidal_initial SPM_initial
  13.         分别对应相应的混沌映射!
  14.     '''
  15. poss_sols = Chaos.fuch_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!
  16. ''
  17.     绘制混沌映射图
  18. '''
  19. x = np.array(range(0,dim)).reshape(1,-1)
  20. plt.scatter(x,poss_sols,s=2)
  21. plt.title('Fuch Chaos Map')
  22. plt.xlabel('Sample points')
  23. plt.ylabel('Chaos value')
  24. plt.grid()
  25. plt.show()

可以看到,在代码中调用了作者自己写的一个Chaos类,有了这个类,大家就可以像调用python库一样,调用不同的混沌映射方法。

03

14种混沌映射优化鲸鱼算法

以SPM、Fuch、Tent混沌映射为例,在CEC2005,F2函数dim=50。上进行测试。采用不同混沌映射优化鲸鱼算法结果如下:

SPM混沌映射的WOA算法:

修改代码为下即可。

poss_sols = Chaos.SPM_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

f552ed75d64d1de079f476cb30a76280.png

Fuch混沌映射的WOA算法:

修改代码为下即可。

poss_sols = Chaos.fuch_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

74601a6ba0fce066cd0df9de076f517c.png

Tent映射

修改代码为下即可。

poss_sols = Chaos.tent_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

08e278f9f2263b90ab13ad612c1c6b3f.png

14种混沌映射优化蜣螂算法

以Icmic、Fuch、Sinusoida混沌映射为例,在CEC2022,F1函数dim=20。上进行测试。采用不同混沌映射优化蜣螂算法结果如下:

Icmic混沌映射的DBO算法:

修改代码为下即可。

X= Chaos.icmic_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

2ee08688848468b0983f0c8fc5d0c9a4.png

Fuch混沌映射的DBO算法:

修改代码为下即可。

X= Chaos.fuch_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

6dd3458bfa25387dce00ae657c833aed.png

sinusoidal 映射的DBO算法:

修改代码为下即可。

X= Chaos.sinusoidal_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

3234ddc13f05030cf8d95a81d9dd32cf.png

04

结果分析

    可以看到,加了混沌映射后的函数,在算法寻优的前期,往往能更快的找到较小的值。这说明混沌映射起到了作用!   

    这里要特别说明一下,混沌映射优化智能算法,从理论上来讲,只是将初始化的粒子变得更随机更多样了,这样确实是可以加速算法的收敛速度,但是,一旦循环开始,剩下的就没有混沌优化什么事情了。

    换句话说,就是如果我直接用rand函数生成一堆粒子,也是有一定概率比混沌优化生成的粒子更好的,虽然这个概率不大,但确确实实是有的,所以如果偶尔出现混沌优化的效果不好使,那也不要气馁,毕竟混沌优化只是优化智能算法的一种手段,大家可以结合别的手段一起优化。

05

代码目录

fbc6cdc378bbde9bbb353a86a4e67005.png

其中,chaos.py是作者写好的14种混沌映射的类。在主函数“14种混沌映射DBO.py”方便调用,也可方便用于别的算法改进中。plotchaos.py文件是用来绘制混沌映射图的。chaos的英文名是混乱,感觉这么命名还是挺有道理的哈哈,这样大家就可以一键更换了,而且很容易扩展到其他代码上。

友情提示:如果说,大家在用混沌映射优化时效果不好,可以手动修改chaos.m中的每个混沌映射方法的混沌系数。

本期代码获取链接:https://mbd.pub/o/bread/ZZuXkp1u

或点击下方卡片获取

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/521381
推荐阅读
相关标签
  

闽ICP备14008679号