基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

简介: 基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

一、 概述

来源:

多层感知器(MLP)作为使用最广泛的神经网络(NN)之一,已被应用于许多实际问题。MLP 需要针对特定应用程序进行培训,经常会遇到局部最小值、收敛速度和初始化敏感性问题。本文建议使用最近开发的基于生物地理学的优化(BBO)算法来训练MLP以减少这些问题。为了研究BBO在训练MLP中的效率,使用了五个分类数据集以及六个函数近似数据集。将结果与5种著名的启发式算法反向传播(BP)和极限学习机(ELM)在局部最小值的捕获、结果精度和收敛率方面进行了比较。结果表明,利用BBO训练MLP明显优于目前的启发式学习算法和BP。此外,结果表明,与ELM相比,BBO能够提供非常有竞争力的结果。


二、运行结果

三、参考文献

[1]Seyedali Mirjalili (2022). Biogeography-Based Optimizer (BBO) for training Multi-Layer Perceptron (MLP) .


https://doi.org/10.1016/j.ins.2014.01.038


部分代码:

完整代码:回复关键字——基于生物地理学的优化算法

function [MinCost,Best] = ACO(ProblemFunction, DisplayFlag)
% Ant colony optimization algorithm for optimizing a general function.
% INPUTS: ProblemFunction is the handle of the function that returns 
%         the handles of the initialization, cost, and feasibility functions.
%         DisplayFlag says whether or not to display information during iterations and plot results.
if ~exist('DisplayFlag', 'var')
    DisplayFlag = true;
end
[OPTIONS, MinCost, AvgCost, InitFunction, CostFunction, FeasibleFunction, ...
    MaxParValue, MinParValue, Population] = Init(DisplayFlag, ProblemFunction);
Keep = 2; % elitism parameter: how many of the best individuals to keep from one generation to the next
% ACO parameter initialization
tau0 = 1e-6; % initial pheromone value, between 0 and 0.5
Q = 20; % pheromonone update constant, between 0 and 100
q0 = 1; % exploration constant, between 0 and 1
rhog = 0.9; % global pheromone decay rate, between 0 and 1
rhol = 0.5; % local pheromone decay rate, between 0 and 1
alpha = 1; % pheromone sensitivity, between 1 and 5
beta = 5; % visibility sensitivity, between 0 and 15
tau = tau0 * ones(MaxParValue-MinParValue+1, 1); % initial pheromone values
p = zeros(size(tau)); % allocate array for probabilities
% Begin the optimization loop
for GenIndex = 1 : OPTIONS.Maxgen
    % pheromone decay
    tau = (1 - rhog) * tau;
    % Use each solution to update the pheromone for each parameter value
    for k = 1 : OPTIONS.popsize
        Cost = Population(k).cost;
        Chrom = Population(k).chrom;
        for i = 1 : length(Chrom)
            j = Chrom(i);
            j=floor(j);
            if (Cost == 0)
                tau(j-MinParValue+1) = max(tau);
            else
                tau(j-MinParValue+1) = tau(j-MinParValue+1) + Q / Cost;
            end
        end    
    end
    % Use the probabilities to generate new solutions
    for k = Keep+1 : OPTIONS.popsize
        for j = 1 : OPTIONS.numVar
            % Generate probabilities based on pheromone amounts
            p = tau .^ alpha;
            p = p / sum(p);
            [Maxp, Maxpindex] = max(p);
            if rand < q0
                Select_index = Maxpindex;
            else
                SelectProb = p(1);
                Select_index = 1;
                RandomNumber = rand;
                while SelectProb < RandomNumber
                    Select_index = Select_index + 1;
                    if Select_index >= MaxParValue - MinParValue + 1
                        break;
                    end
                    SelectProb = SelectProb + p(Select_index);
                end
            end
            Population(k).chrom(j) = MinParValue + Select_index - 1;
            % local pheromone update
            tau(Select_index) = (1 - rhol) * tau(Select_index) + rhol * tau0;     
        end
    end
    % Make sure the population does not have duplicates. 
    Population = ClearDups(Population, MaxParValue, MinParValue);
    % Make sure each individual is legal.
    Population = FeasibleFunction(OPTIONS, Population);
    % Calculate cost
    Population = CostFunction(OPTIONS, Population);
    % Sort from best to worst
    Population = PopSort(Population);
    % Compute the average cost of the valid individuals
    [AverageCost, nLegal] = ComputeAveCost(Population);
    % Display info to screen
    MinCost = [MinCost Population(1).cost];
    AvgCost = [AvgCost AverageCost];
    if DisplayFlag
        disp(['The best and mean of Generation # ', num2str(GenIndex), ' are ',...
            num2str(MinCost(end)), ' and ', num2str(AvgCost(end))]);
    end
end
Best=Conclude(DisplayFlag, OPTIONS, Population, nLegal, MinCost);
return;


四、Matlab代码实现

相关文章
|
1天前
|
机器学习/深度学习 算法 网络架构
基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真
摘要:该内容展示了一个基于YOLOv2的单人口罩佩戴检测和人脸定位算法的应用。使用MATLAB2022A,YOLOv2通过Darknet-19网络和锚框技术检测图像中的口罩佩戴情况。核心代码段展示了如何处理图像,检测人脸并标注口罩区域。程序会实时显示检测结果,等待一段时间以优化显示流畅性。
|
2天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的CNN-GRU-Attention的时间序列回归预测matlab仿真
摘要: 该文介绍了使用 MATLAB 2022a 进行时间序列预测的算法优化。优化前后对比显示效果改善明显。算法基于CNN、GRU和注意力机制的深度学习模型,其中GWO(灰狼优化)用于优化超参数。CNN提取时间序列的局部特征,GRU处理序列数据的长期依赖,注意力机制聚焦关键信息。GWO算法模拟灰狼行为以实现全局优化。提供的代码片段展示了网络训练和预测过程,以及预测值与真实值的比较。
|
4天前
|
机器学习/深度学习 算法
m基于GA-GRU遗传优化门控循环单元网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,一个基于遗传算法优化的GRU网络展示显著优化效果。优化前后的电力负荷预测图表显示了改进的预测准确性和效率。GRU,作为RNN的一种形式,解决了长期依赖问题,而遗传算法用于优化其超参数,如学习率和隐藏层单元数。核心MATLAB程序执行超过30分钟,通过迭代和适应度评估寻找最佳超参数,最终构建优化的GRU模型进行负荷预测,结果显示预测误差和模型性能的提升。
19 4
|
4天前
|
机器学习/深度学习 算法 数据可视化
基于BP神经网络的16QAM解调算法matlab性能仿真
这是一个关于使用MATLAB2022a实现的16QAM解调算法的摘要。该算法基于BP神经网络,利用其非线性映射和学习能力从复数信号中估计16QAM符号,具有良好的抗噪性能。算法包括训练和测试两个阶段,通过反向传播调整网络参数以减小输出误差。核心程序涉及数据加载、可视化以及神经网络训练,评估指标为误码率(BER)和符号错误率(SER)。代码中还包含了星座图的绘制和训练曲线的展示。
|
6天前
|
机器学习/深度学习 算法
基于BP神经网络的QPSK解调算法matlab性能仿真
该文介绍了使用MATLAB2022a实现的QPSK信号BP神经网络解调算法。QPSK调制信号在复杂信道环境下受到干扰,BP网络能适应性地补偿失真,降低误码率。核心程序涉及数据分割、网络训练及性能评估,最终通过星座图和误码率曲线展示结果。
|
7天前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真
该内容是一个关于基于YOLOv2的鱼眼镜头人员检测算法的介绍。展示了算法运行的三张效果图,使用的是matlab2022a软件。YOLOv2模型结合鱼眼镜头畸变校正技术,对鱼眼图像中的人员进行准确检测。算法流程包括图像预处理、网络前向传播、边界框预测与分类及后处理。核心程序段加载预训练的YOLOv2检测器,遍历并处理图像,检测到的目标用矩形标注显示。
|
10天前
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
39 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
|
11天前
|
算法
MATLAB|【免费】融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型
这段内容介绍了一个使用改进的麻雀搜索算法优化CNN-BiLSTM模型进行多输入单输出预测的程序。程序通过融合正余弦和柯西变异提升算法性能,主要优化学习率、正则化参数及BiLSTM的隐层神经元数量。它利用一段简单的风速数据进行演示,对比了改进算法与粒子群、灰狼算法的优化效果。代码包括数据导入、预处理和模型构建部分,并展示了优化前后的效果。建议使用高版本MATLAB运行。
|
14天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
14天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章