多目标水母搜索(MOJS)算法(Matlab实现)

时间:2022-11-06 15:05:29

????????????????????????欢迎来到本博客❤️❤️❤️????????????

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

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

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Matlab代码实现

????1 概述

本研究开发了一种多目标水母搜索(MOJS)算法,以最佳地解决具有多个目标的工程问题。将Lévy飞行、精英人口、固定大小档案、混沌地图和基于冲日的跳跃方法集成到MOJS中,以获得帕累托最优解。这些技术用于定义海蜇在洋流中的运动或多目标搜索空间中的群体。

详细文章:

Chou, Jui-Sheng, and Dinh-Nhat Truong. “Multiobjective Optimization Inspired by Behavior of Jellyfish for Solving Structural Design Problems.” Chaos, Solitons & Fractals, vol. 135, Elsevier BV, June 2020, p. 109738, doi:10.1016/j.chaos.2020.109738.

????2 运行结果

多目标水母搜索(MOJS)算法(Matlab实现)

部分代码:


clear all; clc;
%% Parameters
params.Np = 100;        % Population size
params.Nr = 100;        % Archive size
params.maxiter = 2000;  % Maximum number of iteration
params.ngrid = 20;      % Number of grids in each dimension
i=1;                    % Select function
%% Multi-objective function
switch i
    case 1
        MultiObjFnc = 'Schaffer';
    case 2
        MultiObjFnc = 'Kursawe';
    case 3
        MultiObjFnc = 'Poloni';
end
%% Detail of each function
switch MultiObjFnc
    case 'Schaffer'         
        MultiObj.fun = @(x) [x(:).^2, (x(:)-2).^2];
        MultiObj.nVar = 1;
        MultiObj.var_min = -5;
        MultiObj.var_max = 5;
     case 'Kursawe'          
        MultiObj.fun = @(x) [-10.*(exp(-0.2.*sqrt(x(:,1).^2+x(:,2).^2)) + exp(-0.2.*sqrt(x(:,2).^2+x(:,3).^2))), ...
            sum(abs(x).^0.8 + 5.*sin(x.^3),2)];
        MultiObj.nVar = 3;
        MultiObj.var_min = -5.*ones(1,MultiObj.nVar);
        MultiObj.var_max = 5.*ones(1,MultiObj.nVar);
    case 'Poloni'           
        A1 = 0.5*sin(1)-2*cos(1)+sin(2)-1.5*cos(2);
        A2 = 1.5*sin(1)-cos(1)+2*sin(2)-0.5*cos(2);
        B1 = @(x,y) 0.5.*sin(x)-2.*cos(x)+sin(y)-1.5.*cos(y);
        B2 = @(x,y) 1.5.*sin(x)-cos(x)+2.*sin(y)-0.5.*cos(y);
        f1 = @(x,y) 1+(A1-B1(x,y)).^2+(A2-B2(x,y)).^2;
        f2 = @(x,y) (x+3).^2+(y+1).^2;
        MultiObj.fun = @(x) [f1(x(:,1),x(:,2)), f2(x(:,1),x(:,2))];
        MultiObj.nVar = 2;
        MultiObj.var_min = -pi.*ones(1,MultiObj.nVar);
        MultiObj.var_max = pi.*ones(1,MultiObj.nVar);
end
%% MOJS operation
tic;
[PARETOFRONT] = MOJS(params,MultiObj);
time=toc;
%% Save result
save('result.mat','time','PARETOFRONT');
display('Parato optimal front is stored in PARETOFRONT.pos_fit');
display('Parato optimal solution is stored in PARETOFRONT.pos');

????3 参考文献

[1]Chou, Jui-Sheng, and Dinh-Nhat Truong. “Multiobjective Optimization Inspired by Behavior of Jellyfish for Solving Structural Design Problems.” Chaos, Solitons & Fractals, vol. 135, Elsevier BV, June 2020, p. 109738, doi:10.1016/j.chaos.2020.109738.

????4 Matlab代码实现