有小伙伴后台不断留言,要求将推出的改进蜣螂算法的MATLAB语言变更为Python语言。话不多说,安排!
往期改进蜣螂算法的MATLAB对应原理介绍,可以跳转相应链接查看学习。
往期改进蜣螂算法:
多策略改进蜣螂优化--螺旋搜索+最优值引导+反向学习策略(原创)
融合鱼鹰与自适应t分布的蜣螂优化算法(OTDBO)(原创,力荐)
随机游走与纵横交叉的蜣螂优化算法,精品力荐!MATLAB代码(原创,力荐)
改进正弦算法引导的蜣螂优化算法(MSADBO)(文献复现)
融合麻雀追随机制扰动与柯西变异的蜣螂优化算法,历史位置图,平均适应度收敛图一次性全部搞定,MATLAB代码(文献复现)
中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码(文献复现)
14种混沌映射,python代码,可自由切换,以鲸鱼和蜣螂算法为例,方便应用于所有算法
本期重点就是将上述所有改进蜣螂算法的MATLAB语言改编为Python代码。
本期改进蜣螂算法目录如下:
二级目录为:
所需要的包为:
matplotlib~=3.8.2
numpy~=1.26.3
scipy~=1.12.0
opfunu~=1.0.1
结果展示
利用python强大的opfunu库,集成了CEC2005/2008/2010/2013等11个CEC函数库。
pip install opfunu # 参考文档:https://github.com/thieu1995/opfunu
本期文章将改进的蜣螂算法与原始算法在多个CEC函数集上进行对比。并画出函数图像,迭代曲线。这里采用CEC2022展示各算法效果。
改进蜣螂(Fuch映射+反向学习+自适应步长+随机差分变异)
改进蜣螂(Fuch映射+反向学习+自适应步长+随机差分变异)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuWkpts
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZuVlJZv
改进蜣螂(最优解的接受程度+麻雀追随机制+柯西高斯变异)
改进蜣螂(最优解的接受程度+麻雀追随机制+柯西高斯变异)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplt
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZiYkply
改进蜣螂(混沌初始化+三角形游走+莱维飞行)
改进蜣螂(混沌初始化+三角形游走+莱维飞行)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplx
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJ2VlpZt
改进蜣螂(混沌初始化+改进正弦引导+混合高斯柯西变异)
改进蜣螂(混沌初始化+改进正弦引导+混合高斯柯西变异)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmphv
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJyVlJZu
改进蜣螂Python(随机游走+纵横交叉)
改进蜣螂Python(随机游走+纵横交叉)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmppq
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZmclZ5x
改进蜣螂(混沌初始化+鱼鹰算法+t分布)
改进蜣螂(混沌初始化+鱼鹰算法+t分布)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplv
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZWTmZ1w
改进蜣螂算法(螺旋搜索+最优值引导+透镜反向学习)
改进蜣螂算法(螺旋搜索+最优值引导+透镜反向学习)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmpht
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJ6XmZZy
部分代码展示
import numpy as np
from matplotlib import pyplot as plt
# In[]:
import opfunu # 参考:https://github.com/thieu1995/opfunu
import copy # 导入copy模块,用于对象的复制。
import math
'''
适应度函数及维度dim的选择
cec函数名字格式:函数名+年份,比如要选择2022的F1函数,func_num = 'F1'+'2022'
cec2005:F1-F25, 可选 dim = 10, 30, 50
cec2008:F1-F7, 可选 2 <= dim <= 1000
cec2010:F1-F20, 可选 100 <= dim <= 1000
cec2013:F1-F28, 可选 dim = 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
cec2014:F1-F30, 可选 dim = 10, 20, 30, 50, 100
cec2015:F1-F15, 可选 dim = 10, 30
cec2017:F1-F29, 可选 dim = 2, 10, 20, 30, 50, 100
cec2019:F1-F10, 可选 dim: F1=9,F2=16,F3=18,其他=10
cec2020:F1-F10, 可选 dim = 2, 5, 10, 15, 20, 30, 50, 100
cec2021:F1-F10, 可选 dim = 2, 10, 20
cec2022:F1-F12, 可选 dim = 2, 10, 20
'''
'''边界检查函数'''
def boundary(pop, lb, ub):
# 定义一个边界检查函数,确保种群中的个体不超出预定义的边界。
pop = pop.flatten()
lb = lb.flatten()
ub = ub.flatten()
# 将输入参数扁平化,以便进行元素级操作。
# 防止跳出范围,除学习率之外 其他的都是整数
pop = [int(pop[i]) if i > 0 else pop[i] for i in range(lb.shape[0])]
# 将除了学习率以外的参数转换为整数。
for i in range(len(lb)):
if pop[i] > ub[i] or pop[i] < lb[i]:
# 检查个体是否超出边界。
if i == 0:
pop[i] = (ub[i] - lb[i]) * np.random.rand() + lb[i]
# 如果是学习率,则在边界内随机选择一个值。
else:
pop[i] = np.random.randint(lb[i], ub[i])
# 对于整数参数,随机选择一个边界内的整数值。
return pop
# 返回修正后的个体。
''' 种群初始化函数 '''
def initial(pop, dim, ub, lb):
# 定义一个初始化种群的函数。
X = np.zeros([pop, dim])
# 创建一个形状为[种群大小, 维度]的零矩阵。
for i in range(pop):
for j in range(dim):
X[i, j] = np.random.rand() * (ub[j] - lb[j]) + lb[j]
# 在边界内随机初始化每个个体的每个参数。
return X, lb, ub
# 返回初始化后的种群及边界。
'''计算适应度函数'''
def CaculateFitness(X):
# 定义一个计算适应度的函数。
pop = X.shape[0]
# 获取种群的大小。
fitness = np.zeros([pop, 1])
# 创建一个形状为[种群大小, 1]的零矩阵来存储适应度。
for i in range(pop):
fitness[i] = cec_fun(X[i, :])
# 对每个个体调用适应度函数进行计算。
return fitness
# 返回计算得到的适应度。
'''适应度排序'''
def SortFitness(Fit):
# 定义一个对适应度进行排序的函数。
fitness = np.sort(Fit, axis=0)
# 按适应度大小进行排序。
index = np.argsort(Fit, axis=0)
# 获取排序后的索引。
return fitness, index
# 返回排序后的适应度和索引。
'''根据适应度对位置进行排序'''
def SortPosition(X, index):
# 定义一个根据适应度排序位置的函数。
Xnew = np.zeros(X.shape)
# 创建一个与X形状相同的零矩阵。
for i in range(X.shape[0]):
Xnew[i, :] = X[index[i], :]
# 根据适应度的排序结果重新排列位置。
return Xnew
# 返回排序后的位置
也可直接购买改进蜣螂算法全家桶
改进蜣螂python代码全家桶:
https://mbd.pub/o/bread/ZZuYmpts
改进蜣螂matlab代码全家桶:
https://mbd.pub/o/bread/ZZmVl5hv
温馨提示:老朋友也应该都知道了,关于蜣螂算法,作者也陆陆续续一直在发文。在此承诺,此全家桶一经购买,永久更新!以后只要有新的改进蜣螂算法,都会添加至此全家桶!购买的小伙伴也可以直接跳转这两个全家桶链接下载最新的!