✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:​​Matlab科研工作室​

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

​智能优化算法​​  ​​神经网络预测​​ ​​雷达通信 ​​ ​​无线传感器​

​信号处理​​ ​​图像处理​​ ​​路径规划​​ ​​元胞自动机​​ ​​无人机 ​​ ​​电力系统​

⛄ 内容介绍

多目标蜉蝣优化算法(MOMA)附Matlab代码_迭代

多目标蜉蝣优化算法(MOMA)附Matlab代码_迭代_02

多目标蜉蝣优化算法(MOMA)附Matlab代码_迭代_03

⛄ 部分代码

%%

cl;清除; 关闭所有;

%% 问题定义

% 目标函数

ANSWER=listdlg('PromptString','Choose Objective Function','SelectionMode','single', 'ListString', {'1.ZDT', '2.ZDT2', '3.ZDT3'});

如果当量(答案,1);ObjectiveFunctinotallow=@(x) ZDT(x); funcname='ZDT';

elseif eq(ANSWER,2); 目标函数=@(x) ZDT2(x); funcname='ZDT2';

elseif eq(ANSWER,3); 目标函数=@(x) ZDT3(x); funcname='ZDT3';

别的; disp('终止'); 返回

结尾

问题大小=[1 10]; % 决策变量大小

下界=0;% 决策变量下限

上界=1;% 决策变量上限

%% 蜉蝣参数

methname='蜉蝣算法';

最大值=100;% 最大迭代次数

nPop=20;nPopf=20;% 人口规模(男性和女性)

n帕累托=50;% 存储库大小

g=0.8;% 惯性重量

gdamp=1;% 惯性重量阻尼比

a1=1.0;% 个人学习系数

a2=1.5;a3=1.5;% 全球学习系数

贝塔=2;% 视距系数

舞蹈=0.77;% 突变系数

dance_damp=0.99; % 突变系数阻尼比

fl=0.77;% 随机飞行

fl_damp=0.99;

% 交配参数

n交叉=20;% Parnets 数量(后代)

nMutatinotallow=round(0.5*nPop); % 突变体数量

亩=0.02;% 突变率

% 速度限制

VelMax=1*(上界-下界)*5;VelMin=-VelMax;

%% 初始化

%运行初始

empty_mayfly.Positinotallow=[];

empty_mayfly.Velocity=[];

empty_mayfly.Cost=[];

empty_mayfly.Best.Positinotallow=[];

empty_mayfly.Best.Cost=[];

empty_mayfly.Rank=[];

empty_mayfly.Dominatinotallow=[];

empty_mayfly.DownedCount=[];

empty_mayfly.CrowdingDistance=[];

蜉蝣=repmat(empty_mayfly,nPop,1);

蜉蝣f=repmat(empty_mayfly,nPopf,1);

对于 i=1:nPop

    % 初始化男性位置

    蜉蝣(i).Positinotallow=unifrnd(LowerBound,UpperBound,ProblemSize);

    % 初始化速度

    蜉蝣(i).Velocity=zeros(ProblemSize);

    % 评估

    蜉蝣(i).Cost=ObjectiveFunction(蜉蝣(i).Position);

    % 更新个人最好成绩

    蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;

    蜉蝣(i).Best.Cost=蜉蝣(i).Cost;

    % 初始化女性位置

    如果 i<=nPopf

        Mayflyf(i).Positinotallow=unifrnd(LowerBound,UpperBound,ProblemSize);

        蜉蝣f(i).Velocity=zeros(ProblemSize);

        Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);

        蜉蝣f(i).Best.Positinotallow=蜉蝣f(i).Position;

        蜉蝣f(i).Best.Cost=蜉蝣f(i).Cost;

    结尾

结尾

% 合并

帕累托=[蜉蝣;蜉蝣];

% 非支配排序

[帕累托,F]=帕累托排序(帕累托);

% 计算拥挤距离

帕累托=计算CD(帕累托,F);

% 排序人口

帕累托=排序解决方案(帕累托);

帕累托=帕累托(F{1});

% 截断

如果数字(帕累托)>n帕累托

    帕累托=帕累托(1:n帕累托);

结尾

%% 蜉蝣主循环

对于它=1:MaxIt

    对于 i=1:nPop

        领导者=帕累托(兰迪(大小(帕累托,2)));

        % 更新女性

        如果 i<=nPopf

            如果支配(蜉蝣(i),蜉蝣f(i))

                rmf=norm(蜉蝣(i).Position-蜉蝣f(i).Position);

                蜉蝣f(i).Velocity = g*Mayflyf(i).Velocity ...

                    +a3*exp(-beta*rmf^2).*(Mayfly(i).Position-Mayflyf(i).Position);

            别的

                e=unifrnd(-1,+1,ProblemSize);

                蜉蝣f(i).Velocity = g*Mayflyf(i).Velocity+fl*(e);

            结尾

            % 应用速度限制

            蜉蝣f(i).Velocity = max(蜉蝣f(i).Velocity,VelMin);

            蜉蝣f(i).Velocity = min(Mayflyf(i).Velocity,VelMax);

            % 更新位置

            蜉蝣f(i).Position = Mayflyf(i).Position + Mayflyf(i).Velocity;

            % 速度镜像效果

            IsOutside=(Mayflyf(i).Position<LowerBound | Mayflyf(i).Position>UpperBound);

            蜉蝣f(i).Velocity(IsOutside)=-Mayflyf(i).Velocity(IsOutside);

            % 应用头寸限制

            蜉蝣f(i).Position = max(蜉蝣f(i).Position,LowerBound);

            蜉蝣f(i).Position = min(蜉蝣f(i).Position,UpperBound);

            % 评估

            Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);

            蜉蝣f(i).Best.Positinotallow=蜉蝣f(i).Position;

            蜉蝣f(i).Best.Cost=蜉蝣f(i).Cost;

        结尾

        % 更新男性

        % 更新速度

        如果支配(领导者,蜉蝣(i))

            rpbest=norm(蜉蝣(i).Best.Position-蜉蝣(i).Position);

            rgbest=norm(leader.Position-Mayfly(i).Position);

            蜉蝣(i).Velocity = g*Mayfly(i).Velocity ...

                +a1*exp(-beta*rpbest^2).*(Mayfly(i).Best.Position-Mayfly(i).Position) ...

                +a2*exp(-beta*rgbest^2).*(leader.Position-Mayfly(i).Position);

        别的

            e=unifrnd(-1,+1,ProblemSize);

            蜉蝣(i).Velocity = g*Mayfly(i).Velocity+dance*(e);

        结尾

        % 应用速度限制

        蜉蝣(i).Velocity = max(蜉蝣(i).Velocity,VelMin);

        蜉蝣(i).Velocity = min(蜉蝣(i).Velocity,VelMax);

        % 更新位置

        蜉蝣(i).Position =蜉蝣(i).Position +蜉蝣(i).Velocity;

        % 速度镜像效果

        IsOutside=(Mayfly(i).Position<LowerBound | Mayfly(i).Position>UpperBound);

        蜉蝣(i).Velocity(IsOutside)=-蜉蝣(i).Velocity(IsOutside);

        % 应用头寸限制

        蜉蝣(i).Position = max(蜉蝣(i).Position,LowerBound);

        蜉蝣(i).Position = min(蜉蝣(i).Position,UpperBound);

        % 评估

        蜉蝣(i).Cost=ObjectiveFunction(蜉蝣(i).Position);

        % 更新个人最好成绩

        如果占主导地位(蜉蝣(i),蜉蝣(i).Best)

            蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;

            蜉蝣(i).Best.Cost=蜉蝣(i).Cost;

        elseif 占优(蜉蝣(i).Best,蜉蝣(i))

            % 没做什么

        别的

            如果兰德<0.5

                蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;

                蜉蝣(i).Best.Cost=蜉蝣(i).Cost;

            结尾

        结尾

    结尾

    % 伴侣

    popc=repmat(empty_mayfly,nCrossover/2,2);

    对于 k=1:nCrossover/2

        % 选择父母

        i1=兰迪(数字(帕累托));

        i2=兰迪(数字(帕累托));

        %p1=蜉蝣(i1).Best;

        %p2=蜉蝣f(i2).Best;

        % 应用交叉

        [popc(k,1).Position, popc(k,2).Position]=Crossover(Pareto(i1).Position,Pareto(i2).Position);

        % 评估

        popc(k,1).Position = max(popc(k,1).Position, LowerBound);

        popc(k,1).Position = min(popc(k,1).Position, UpperBound);

        popc(k,1).Cost=ObjectiveFunction(popc(k,1).Position);

        % 评估

        popc(k,2).Position = max(popc(k,2).Position, LowerBound);

        popc(k,2).Position = min(popc(k,2).Position, UpperBound);

        popc(k,2).Cost=ObjectiveFunction(popc(k,2).Position);

        popc(k,1).Best.Position = popc(k,1).Position;

        popc(k,1).Best.Cost = popc(k,1).Cost;

        popc(k,1).Velocity= zeros(ProblemSize);

        popc(k,2).Best.Position = popc(k,2).Position;

        popc(k,2).Best.Cost = popc(k,2).Cost;

        popc(k,2).Velocity= zeros(ProblemSize);

    end

    % break

    popc=popc(:);

    % Mutation

    popm=repmat(empty_mayfly,nMutation,1);

    for k=1:nMutation

        i=randi(numel(Pareto));

        popm(k)=Pareto(i);

        popm(k).Positinotallow=Mutate(popm(k).Position,mu,LowerBound,UpperBound);

        % Evaluation

        popm(k).Position = max(popm(k).Position, LowerBound);

        popm(k).Position = min(popm(k).Position, UpperBound);

        popm(k).Cost=ObjectiveFunction(popm(k).Position);

    end

    % Create Merged Population

    popc=[popc

        popm]; %#ok

    split=round((nCrossover/2+nMutation)/2);

    males=popc(1:split);

    Mayfly=[Mayfly

        males]; %#ok

    males=popc(split+1:nCrossover/2+nMutation);

    Mayflyf=[Mayflyf

        males]; %#ok

    % SHORT

    % Non-Dominated Sorting

    [Mayfly, F]=ParetoSorting(Mayfly);

    Mayfly=CalcCD(Mayfly,F);

    [Mayfly, F]=SortSolutions(Mayfly);

    [Mayflyf, F]=ParetoSorting(Mayflyf);

    Mayflyf=CalcCD(Mayflyf,F);

    [Mayflyf, F]=SortSolutions(Mayflyf);

    Mayfly=Mayfly(1:nPop);

    Mayflyf=Mayflyf(1:nPopf);

    Pareto=[Pareto

        Mayfly

        Mayflyf]; %#ok

    all=Pareto;

    % Non-Dominated Sorting

    [Pareto, F]=ParetoSorting(Pareto);

    % Calculate Crowding Distance

    Pareto=CalcCD(Pareto,F);

    % Sort Population

    [Pareto, F]=SortSolutions(Pareto);

    % Store F1

    Pareto=Pareto(F{1});

    % Truncate

    if numel(Pareto)>nPareto

        Pareto=Pareto(1:nPareto);

    end

    % Show Iteration Information

    disp(['迭代' num2str(it) ': 存储库中的解数 = ' num2str(numel(Pareto))]);

    % 绘制 F1 成本

    图1);

    PlotCosts(全部,帕累托);

    %暂停(0.01);

    g=g*gdamp;

    舞蹈=舞蹈*dance_damp;

    fl = fl*fl_damp;

结尾

%% 结果

⛄ 运行结果

多目标蜉蝣优化算法(MOMA)附Matlab代码_ide_04

⛄ 参考文献

[1]陈伟超, and 符强. "基于倒位变异的蜉蝣优化算法." 计算机系统应用 30.8:7.

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除