改进蜣螂算法合集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

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

由于改进蜣螂算法涉及到很多细节,需要根据具体的应用场景进行调整,因此下面提供的是一个基于改进蜣螂算法的 LSTM 迁移学习的 Python 代码框架,需要根据实际情况进行具体实现。 ```python import numpy as np import tensorflow as tf from tensorflow.keras import layers, models, optimizers from sklearn.utils import shuffle # 定义 LSTM 模型 def build_lstm_model(input_shape, output_shape): model = models.Sequential() model.add(layers.LSTM(units=128, input_shape=input_shape)) model.add(layers.Dense(units=64, activation='relu')) model.add(layers.Dense(units=output_shape, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model # 定义改进蜣螂算法 def improved_firefly_algorithm(x_train, y_train, x_test, y_test, alpha=0.5, beta=1, gamma=1, delta=2, n_iter=50, n_pop=20): # 初始化种群 pop = [] for i in range(n_pop): model = build_lstm_model(x_train.shape[1:], y_train.shape[1]) pop.append(model) # 计算适应度 def fitness(model, x, y): loss, acc = model.evaluate(x, y, verbose=0) return acc # 迭代寻优 for iteration in range(n_iter): # 排序种群 pop = sorted(pop, key=lambda x: fitness(x, x_train, y_train), reverse=True) # 根据适应度更新位置 for i in range(n_pop): for j in range(n_pop): if fitness(pop[j], x_train, y_train) > fitness(pop[i], x_train, y_train): r = np.sqrt(np.sum((np.array(pop[i].get_weights()) - np.array(pop[j].get_weights())) ** 2)) beta0 = beta * np.exp(-gamma * r ** delta) pop[i].set_weights([w + alpha * beta0 * (v - w) + np.random.normal(0, 1, v.shape) for w, v in zip(pop[i].get_weights(), pop[j].get_weights())]) # 返回最优模型 return pop[0] # 加载数据集 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train = x_train / 255.0 x_test = x_test / 255.0 y_train = tf.keras.utils.to_categorical(y_train, 10) y_test = tf.keras.utils.to_categorical(y_test, 10) # 定义迁移学习模型 transfer_model = build_lstm_model(x_train.shape[1:], y_train.shape[1]) # 训练迁移学习模型 transfer_model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test)) # 使用改进蜣螂算法优化迁移学习模型 opt_model = improved_firefly_algorithm(x_train, y_train, x_test, y_test, alpha=0.5, beta=1, gamma=1, delta=2, n_iter=50, n_pop=20) # 测试优化后的模型 opt_model.evaluate(x_test, y_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘个代码_

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值