Multi-objective optimization algorithm (MATLAB): multi-objective brown bear optimization algorithm (Multi-objective Brown-bear Optimization Algorithm, MOBOA)

1. Brown Bear Optimization Algorithm

The Brown-bear Optimization Algorithm (BOA) was proposed by Tapan Prakash et al. in 2022. It was inspired by simulating the scent marking and sniffing behavior of brown bears. It has the advantages of fast optimization speed and high solution accuracy.

references:

[1] Tapan Prakash, Praveen Prakash Singh, Vinay Pratap  Singh, and Sri Niwas Singh. "A Novel Brown-bear  Optimization Algorithm for Solving Economic Dispatch Problem." In Advanced Control & Optimization Paradigms for Energy System Operation and Management, , 2022, pp.137-164.

2. Multi-objective Brown Bear Optimization Algorithm

Multi-objective optimization algorithm: Multi-objective Brown-bear Optimization Algorithm (MOBOA) MATLAB - Know (zhihu.com)

Multi-objective Brown-bear Optimization Algorithm (MOBOA) is formed by BOA fusion multi-objective strategy. In order to verify the effectiveness of the proposed MOBOA, it was tested in 46 multi-objective test functions (ZDT1, ZDT2 , ZDT3, ZDT4, ZDT6, DTLZ1-DTLZ7, WFG1-WFG10, UF1-UF10, CF1-CF10, Kursawe, Poloni, Viennet2, Viennet3) and 1 engineering application ( disc brake design) experiment, and adopt IGD, GD, HV, SP four evaluation indicators for evaluation.

Part of the code:

close all;
clear ; 
clc;
%%
% TestProblem测试问题说明:
%一共46个多目标测试函数(1-46)+1个工程应用(47),详情如下:
%1-5:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
%6-12:DTLZ1-DTLZ7
%13-22:wfg1-wfg10
%23-32:uf1-uf10
%33-42:cf1-cf10
%43-46:Kursawe、Poloni、Viennet2、Viennet3
%47 盘式制动器设计 https://blog.csdn.net/weixin_46204734/article/details/124051747


%%
TestProblem=1;%1-47
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 200;        % Population size 种群大小
params.Nr = 200;        % Repository size 外部存档中最大数目,可适当调整大小,越大,最终获得的解数目越多
params.maxgen =200;    % Maximum number of generations 最大迭代次数




REP = MOBOA(params,MultiObj);
%% 画结果图
figure
if(size(REP.pos_fit,2)==2)
    h_rep = plot(REP.pos_fit(:,1),REP.pos_fit(:,2),'ok'); hold on;
       if(isfield(MultiObj,'truePF'))
            h_pf = plot(MultiObj.truePF(:,1),MultiObj.truePF(:,2),'.r'); hold on;
            legend('MOBOA','TruePF');
       else
           legend('MOBOA');
       end


        grid on; xlabel('f1'); ylabel('f2');
end
if(size(REP.pos_fit,2)==3)
    h_rep = plot3(REP.pos_fit(:,1),REP.pos_fit(:,2),REP.pos_fit(:,3),'ok'); hold on;
      if(isfield(MultiObj,'truePF'))
            h_pf = plot3(MultiObj.truePF(:,1),MultiObj.truePF(:,2),MultiObj.truePF(:,3),'.r'); hold on;
            legend('MOBOA','TruePF');
      else
          legend('MOBOA');
      end
        grid on; xlabel('f1'); ylabel('f2'); zlabel('f3');
end
title(MultiObjFnc)


Obtained_Pareto=REP.pos_fit;
if(isfield(MultiObj,'truePF'))%判断是否有参考的PF
True_Pareto=MultiObj.truePF;
%%  Metric Value
% ResultData的值分别是IGD、GD、HV、Spacing  (HV越大越好,其他指标越小越好)
ResultData=[IGD(Obtained_Pareto,True_Pareto),GD(Obtained_Pareto,True_Pareto),HV(Obtained_Pareto,True_Pareto),Spacing(Obtained_Pareto)];
else
    %计算每个算法的Spacing,Spacing越小说明解集分布越均匀
    ResultData=Spacing(Obtained_Pareto);%计算的Spacing
end
%%
% Display info
disp('Repository fitness values are stored in REP.pos_fit');
disp('Repository particles positions are store in REP.pos');
    

Partial results:

3. Complete MATLAB code

Guess you like

Origin blog.csdn.net/weixin_46204734/article/details/131280667