基于生物地理学的优化算法(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代码实现

相关文章
|
12天前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
31 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
13天前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
39 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
12天前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
27 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
1月前
|
算法 数据安全/隐私保护
基于GA遗传优化算法的Okumura-Hata信道参数估计算法matlab仿真
在MATLAB 2022a中应用遗传算法进行无线通信优化,无水印仿真展示了算法性能。遗传算法源于Holland的理论,用于全局优化,常见于参数估计,如Okumura-Hata模型的传播损耗参数。该模型适用于150 MHz至1500 MHz的频段。算法流程包括选择、交叉、变异等步骤。MATLAB代码执行迭代,计算目标值,更新种群,并计算均方根误差(RMSE)以评估拟合质量。最终结果比较了优化前后的RMSE并显示了SNR估计值。
37 7
|
1月前
|
机器学习/深度学习 数据采集 算法
Python实现WOA智能鲸鱼优化算法优化支持向量机分类模型(SVC算法)项目实战
Python实现WOA智能鲸鱼优化算法优化支持向量机分类模型(SVC算法)项目实战
112 4
|
3月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
3月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
3月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
3月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)

热门文章

最新文章