14种混沌映射,Python代码

作品简介

 本期采用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种混沌映射画出来的结果都和这个差不多,就不一一展示了。


图片

图片

绘图代码如下:

from chaos import Chaos  #作者自己写的一个class
import numpy as np
import math
from matplotlib import pyplot as plt

dim = 1000
lb = np.zeros([dim,1])
ub = np.ones([dim,1])
chaos_ = Chaos(1, dim, lb, ub)  # 生成一个Chaos类

'''
        可选函数有:tent_initial,fuch_initial,sine_initial,singer_initial,henon_initial,cubic_initial,
                icmic_initial,bernoulli_initial,chebyshev_initial,circle_initial,logistic_initial,
                piecewise_initial,sinusoidal_initial SPM_initial
        分别对应相应的混沌映射!
    '''
poss_sols = Chaos.fuch_initial(chaos_)  # 把生成的chaos_带入具体的混沌映射函数即可!

''' 
    绘制混沌映射图
'''
x = np.array(range(0,dim)).reshape(1,-1)
plt.scatter(x,poss_sols,s=2)
plt.title('Fuch Chaos Map')
plt.xlabel('Sample points')
plt.ylabel('Chaos value')
plt.grid()
plt.show()


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



03


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


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

SPM混沌映射的WOA算法:

修改代码为下即可。


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


图片


Fuch混沌映射的WOA算法:

修改代码为下即可。


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


图片

Tent映射

修改代码为下即可。


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


图片



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


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

Icmic混沌映射的DBO算法:


修改代码为下即可。


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


图片

Fuch混沌映射的DBO算法:

修改代码为下即可。


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

图片



sinusoidal映射的DBO算法:

修改代码为下即可。


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


图片



04


结果分析


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

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

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


05


代码目录


图片

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


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






创作时间: