改进蜣螂算法合集4原创+3复现,Python代码和MATLAB代码

有小伙伴后台不断留言,要求将推出的改进蜣螂算法的MATLAB语言变更为Python语言。话不多说,安排!

往期改进蜣螂算法的MATLAB对应原理介绍,可以跳转相应链接查看学习。

往期改进蜣螂算法:

多策略改进蜣螂优化--螺旋搜索+最优值引导+反向学习策略(原创)

改进蜣螂优化--采用莱维飞行和三角形游走策略(原创)

融合鱼鹰与自适应t分布的蜣螂优化算法(OTDBO)(原创,力荐)

随机游走与纵横交叉的蜣螂优化算法,精品力荐!MATLAB代码(原创,力荐)

改进正弦算法引导的蜣螂优化算法(MSADBO)(文献复现)

融合麻雀追随机制扰动与柯西变异的蜣螂优化算法,历史位置图,平均适应度收敛图一次性全部搞定,MATLAB代码(文献复现)

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码(文献复现)

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

本期重点就是将上述所有改进蜣螂算法的MATLAB语言改编为Python代码。

本期改进蜣螂算法目录如下:

9b4c633daaa3a8b72da325bd9d33ae39.jpeg

二级目录为:

083ae33ef887c0e97e3b047fd9d0dec7.jpeg

所需要的包为:

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

95ed4beb93e784eb41532a41a0bcd7d0.png

56fd38950732517d4ffa23fe30242071.png

改进蜣螂(最优解的接受程度+麻雀追随机制+柯西高斯变异)

改进蜣螂(最优解的接受程度+麻雀追随机制+柯西高斯变异)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplt
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZiYkply

5b7efd819e5773a0e07c9967d47470da.png

3a3efbe1a8f8537fc12581d6ecadba2e.png

改进蜣螂(混沌初始化+三角形游走+莱维飞行)

改进蜣螂(混沌初始化+三角形游走+莱维飞行)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplx
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJ2VlpZt

970075444b41f1e3d850c410d1161165.png

f0bce23775027107d3ed8841172276db.png

改进蜣螂(混沌初始化+改进正弦引导+混合高斯柯西变异)

改进蜣螂(混沌初始化+改进正弦引导+混合高斯柯西变异)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmphv
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJyVlJZu

cbbaffa46bbe3fdb1b9bc4d994709b2a.png

23ec537d80f03c4f60276904d1a1ee2e.png

改进蜣螂Python(随机游走+纵横交叉)

改进蜣螂Python(随机游走+纵横交叉)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmppq
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZmclZ5x

faf0447bdb9229f0dd516a27a526f9fc.png

cf25c2d03677805fd3a356c05a1a9a09.png

改进蜣螂(混沌初始化+鱼鹰算法+t分布)

改进蜣螂(混沌初始化+鱼鹰算法+t分布)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmplv
Matlab代码:
https://mbd.pub/o/bread/mbd-ZZWTmZ1w

2fcea1ffa6cffd10000e5d94b9ace8c4.png

2dfde39d6fd3eff2ca0ab357b23f8a46.png

改进蜣螂算法(螺旋搜索+最优值引导+透镜反向学习)

改进蜣螂算法(螺旋搜索+最优值引导+透镜反向学习)
代码链接:
Python代码:
https://mbd.pub/o/bread/ZZuYmpht
Matlab代码:
https://mbd.pub/o/bread/mbd-ZJ6XmZZy

661480456d43420ef4676e59de4c98ed.png

543426a8442461862eaa0665ef690eb9.png

部分代码展示

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

温馨提示:老朋友也应该都知道了,关于蜣螂算法,作者也陆陆续续一直在发文。在此承诺,此全家桶一经购买,永久更新!以后只要有新的改进蜣螂算法,都会添加至此全家桶!购买的小伙伴也可以直接跳转这两个全家桶链接下载最新的!

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用提供了蜣螂优化算法Python代码,可以用于函数极值寻优。你可以在Python环境中运行这段代码,根据自己的需求进行修改和使用。以下是代码的基本结构和使用方法: 1.导入必要的库和模块: import numpy as np import random 2.定义蜣螂优化算法的类: class DBO: def __init__(self, func, dim, size, iter_num, lb, ub): self.func = func # 待优化的目标函数 self.dim = dim # 变量的维度 self.size = size # 种群大小 self.iter_num = iter_num # 迭代次数 self.lb = lb # 变量的下界 self.ub = ub # 变量的上界 self.best_x = None # 最优解 self.best_f = np.inf # 最优解对应的函数值 self.swarm = np.random.uniform(low=self.lb, high=self.ub, size=(self.size, self.dim)) # 初始化种群 self.fitness = np.array([self.func(x) for x in self.swarm]) # 计算种群适应度 def optimize(self): for i in range(self.iter_num): for j in range(self.size): # 选择一个随机的蜣螂 k = random.randint(0, self.size - 1) while k == j: k = random.randint(0, self.size - 1) # 计算新位置 new_x = self.swarm[j] + np.random.uniform() * (self.swarm[j] - self.swarm[k]) # 边界处理 new_x = np.clip(new_x, self.lb, self.ub) # 计算新适应度 new_f = self.func(new_x) # 更新最优解 if new_f < self.best_f: self.best_x = new_x self.best_f = new_f # 更新种群 if new_f < self.fitness[j]: self.swarm[j] = new_x self.fitness[j] = new_f 3.定义待优化的目标函数: def func(x): return np.sum(x ** 2) 4.创建DBO对象并运行优化算法: dbo = DBO(func, dim=10, size=50, iter_num=1000, lb=-100, ub=100) dbo.optimize() 5.输出最优解和最优解对应的函数值: print('best_x:', dbo.best_x) print('best_f:', dbo.best_f)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值