多目标优化算法:多目标鳟海鞘算法MSSA求解多目标优化问题

作品简介

一、多目标鳟海鞘算法简介

多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm,MSSA)由Seyedali Mirjalili等人于2017年提出。

MSSA算法描述如下:

参考文献:S. Mirjalili, A.H. Gandomi, S.Z. Mirjalili, S. Saremi, H. Faris, S.M. Mirjalili,Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems ,Advances in Engineering Software. DOI: http://dx.doi.org/10.1016/j.advengsoft.2017.07.002

二、算法测试

将MSSA用于求解9个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni、Viennet2、Viennet3)以及1个工程应用(盘式制动器设计),并采用IGD、GD、HV、SP进行指标评价。

%  Multi-objective Salp Swarm Algorithm (MSSA)
close all;
clear ; 
clc;
%% 博客地址 
% https://blog.csdn.net/weixin_46204734/category_11458421.html?spm=1001.2014.3001.5482
% https://www.zhihu.com/people/li-ming-60-78-27/posts
%%
%%
% TestProblem测试问题说明:
%一共10个多目标测试函数,详情如下:
%1-5:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
%6-9:Kursawe、Poloni、Viennet2、Viennet3
%10 盘式制动器设计 https://blog.csdn.net/weixin_46204734/article/details/124051747


%%
TestProblem=10;%1-10(可以修改测试函数)
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 100;        % Population size 种群大小
params.Nr = 200;        % 
params.maxgen =300;    % Maximum number of generations 最大迭代次数


% MSSA
[bestX,bestF] = MSSA(params,MultiObj);
REP.pos_fit=bestF;
%% 画结果图
figure(2)
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('MSSA','TruePF');
       else
           legend('MSSA');
       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('MSSA','TruePF');
      else
          legend('MSSA');
      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');

部分实验结果:

Kursawe:

Poloni:

Viennet2:

Viennet3:

盘式制动器设计:

三、参考代码

文件夹内包含MSSA的全部代码,点击main.m即可运行。



创作时间: