基于健身-距离平衡和基于学习的人工蜂群的强大优化算法(Matlab代码实现)

简介: 基于健身-距离平衡和基于学习的人工蜂群的强大优化算法(Matlab代码实现)

💥1 概述

FDB-TLABC是一种基于健身-距离平衡和基于学习的人工蜂群的强大优化算法。


基于教学学习的人工蜂群(TLABC)是一种基于混合群体的元启发式搜索算法。它将基于教学学习的优化(TLBO)的开发与人工蜂群(ABC)的探索相结合。通过这两种自然启发的群体智能算法的混合,提出了一种鲁棒的方法来解决全局优化问题。然而,与基于群的算法一样,使用TLABC方法,有效地模拟选择过程是一项巨大的挑战。健身-距离平衡(FDB)是最近开发的一种强大的方法,可以有效地模仿自然界中的选择过程。在本研究中,使用FDB方法重新设计了TLABC算法的三个搜索阶段。通过这种方式,开发了更有效地模仿自然并具有强大搜索性能的FDB-TLABC算法。为了研究所提出的算法的开发、探索和平衡搜索能力,在标准和复杂的基准测试套件(经典、IEEE CEC 2014、IEEE CEC 2017 和 IEEE CEC 2020)上对其进行了测试。为了验证所提出的FDB-TLABC在全局优化问题和光伏参数估计问题(一个受约束的真实世界工程问题)中的性能,根据IEEE CEC标准进行了非常全面和合格的实验研究。统计分析结果证实,与其他优化方法相比,所提出的FDB-TLABC提供了最佳的最优解,并产生了更好的性能。


📚2 运行结果

主函数代码:

function []=fdb_tlabc()
[popsize, D, maxFES, lbArray, ubArray] = problem_terminate();
lu = [lbArray; ubArray];
Xmin = lu(1,:);
Xmax = lu(2,:);
trial=zeros(1,popsize);
limit = 200;
CR = 0.5;
X = repmat(Xmin, popsize, 1) + rand(popsize, D) .* (repmat(Xmax-Xmin, popsize, 1));
val_X = zeros(1, popsize);
    for i = 1 : popsize
        val_X(i) = problem(X(i, :));
    end
[val_gBest, min_index] = min(val_X); 
gBest = X(min_index(1),:);
FES = 0;
while FES<maxFES 
    % == == == == == =  Teaching-based employed bee phase  == == == == == = 
    for i=1:popsize 
        [~,sortIndex] = sort(val_X);
        mean_result = mean(X);        % Calculate the mean
        Best = X(sortIndex(1),:);     % Identify the teacher   
        TF=round(1+rand*(1));
        Xi = X(i,:) + (Best -TF*mean_result).*rand(1,D); 
        % Diversity learning
        r = generateR(popsize, i);
        F = rand; 
        V = X(r(1),:) + F*(X(r(2),:) - X(r(3),:));
        flag = (rand(1,D)<=CR);
        Xi(flag) = V(flag);  
        Xi = boundary_repair(Xi,Xmin,Xmax,'reflect'); 
        % Accept or Reject 
        val_Xi = problem(Xi);
        FES = FES+1;
        if val_Xi<val_X(i)
            val_X(i) = val_Xi; X(i,:) = Xi;
            trial(i) = 0;
        else
            trial(i) = trial(i)+1; 
        end 
    end
    % == == == == == =  Learning-based onlooker bee phase== == == == == =
    Fitness = calculateFitness(val_X); 
    for k=1:popsize  
        i = fitnessDistanceBalance( X, Fitness);
        j = randi(popsize);
        while j==i,j=randi(popsize); end
        if val_X(i)<val_X(j)
            Xi = X(i,:) + rand(1,D).*(X(i,:)-X(j,:));
        else
            Xi = X(i,:) + rand(1,D).*(X(j,:)-X(i,:));
        end  
        Xi = boundary_repair(Xi,Xmin,Xmax,'reflect'); 
        %  Accept or Reject
        val_Xi = problem(Xi);
        FES = FES+1;
        if  val_Xi<val_X(i)
            val_X(i) = val_Xi; X(i,:) = Xi;
        end 
    end
    % == == == == == = Generalized oppositional scout bee phase  == == == == == =
    ind = find(trial==max(trial));
    ind = ind(1);
    if (trial(ind)>limit)
        trial(ind) = 0;
        sol = (Xmax-Xmin).*rand(1,D)+Xmin;
        solGOBL = (max(X)+min(X))*rand-X(ind,:);
        newSol = [sol;solGOBL];
        newSol = boundary_repair(newSol,Xmin,Xmax,'random');
        val_sol = zeros(1,2);
        for i = 1 : 2
            val_sol(i) = problem(newSol(i, :));
        end
        FES = FES+2;
        [~,min_index] = min(val_sol);
        X(ind,:) = newSol(min_index(1),:);
        val_X(ind) = val_sol(min_index(1)); 
    end  
    % The best food source is memorized  
    if min(val_X)<val_gBest
        [val_gBest, min_index] = min(val_X); 
        gBest = X(min_index(1),:);
    end 
end
fprintf('Best Fitness: %d\n', val_gBest);
disp('Best Solution:'); 
disp(gBest);
end
function r = generateR(popsize, i) 
    %  Generate index 
    %  r = [r1 r2 r3 r4 r5]
    r1 = randi(popsize);
    while r1 == i
        r1 = randi(popsize); 
    end
    r2 = randi(popsize);
    while r2 == r1 || r2 == i
        r2 = randi(popsize); 
    end
    r3 = randi(popsize);
    while r3 == r2 || r3 == r1 || r3 == i
        r3 = randi(popsize); 
    end
    r4 = randi(popsize);
    while r4 == r3 || r4 == r2 || r4 == r1 || r4 == i
        r4 = randi(popsize); 
    end
    r5 = randi(popsize);
    while  r5 == r4 || r5 == r3 || r5 == r2 || r5 == r1 || r5 == i
        r5 = randi(popsize); 
    end
    r = [r1  r2  r3  r4  r5];
end
function u = boundary_repair(v,low,up,str)
    [NP, D] = size(v);   
    u = v; 
    if strcmp(str,'absorb')
        for i = 1:NP    
        for j = 1:D 
            if v(i,j) > up(j) 
                u(i,j) = up(j);
            elseif  v(i,j) < low(j)
                u(i,j) = low(j);
            else
                u(i,j) = v(i,j);
            end  
        end
        end   
    end
    if strcmp(str,'random')
        for i = 1:NP    
        for j = 1:D 
            if v(i,j) > up(j) || v(i,j) < low(j)
                u(i,j) = low(j) + rand*(up(j)-low(j));
            else
                u(i,j) = v(i,j);
            end  
        end
        end   
    end
    if strcmp(str,'reflect')
        for i = 1:NP
        for j = 1:D 
            if v(i,j) > up(j)
                u(i,j) = max( 2*up(j)-v(i,j), low(j) );
            elseif v(i,j) < low(j)
                u(i,j) = min( 2*low(j)-v(i,j), up(j) );
            else
                u(i,j) = v(i,j);
            end  
        end
        end   
    end
end
function fFitness = calculateFitness(fObjV)
    fFitness = zeros(size(fObjV));
    ind = find(fObjV>=0);
    fFitness(ind) = 1./(fObjV(ind)+1);
    ind = find(fObjV<0);
    fFitness(ind) = 1+abs(fObjV(ind));
end

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Duman, S., Kahraman, H. T., Sonmez Y., Guvenc, U., Katı, M., Aras, S. (2022) A Powerful Meta-Heuristic Search Algorithm for Solving Global Optimization and Real-World Solar Photovoltaic Parameter Estimation Problems. Engineering Applications of Artificial Intelligence, https://doi.org/10.1016/j.engappai.2022.104763.  


相关文章
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
202 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
129 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
91 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
6月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
6月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
6月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
6月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
6月前
|
算法 调度 SoC
电动汽车充放电V2G模型(Matlab代码)
电动汽车充放电V2G模型(Matlab代码)
下一篇
无影云桌面