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

本文介绍了一种名为FDB-TLABC的优化算法,该算法融合了健身-距离平衡(FDB)和基于教学学习的人工蜂群(TLABC)。FDB-TLABC旨在解决全局优化问题,特别是在处理复杂问题时表现出色。通过在标准和复杂基准测试上的实验,证明了该算法相对于其他方法能提供最优解和更优性能。此外,还给出了Matlab代码示例,展示了算法的实施过程,并应用于光伏参数估计这一实际工程问题。
摘要由CSDN通过智能技术生成

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥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. 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值