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


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

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

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

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

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

    ⛄ 内容介绍

    ⛄ 部分代码

    %%

    cl;清除; 关闭所有;

    %% 问题定义

    % 目标函数

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

    如果当量(答案,1);ObjectiveFunction=@(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 数量(后代)

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

    亩=0.02;% 突变率

    % 速度限制

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

    %% 初始化

    %运行初始

    empty_mayfly.Position=[];

    empty_mayfly.Velocity=[];

    empty_mayfly.Cost=[];

    empty_mayfly.Best.Position=[];

    empty_mayfly.Best.Cost=[];

    empty_mayfly.Rank=[];

    empty_mayfly.DominationSet=[];

    empty_mayfly.DownedCount=[];

    empty_mayfly.CrowdingDistance=[];

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

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

    对于 i=1:nPop

        % 初始化男性位置

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

        % 初始化速度

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

        % 评估

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

        % 更新个人最好成绩

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

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

        % 初始化女性位置

        如果 i<=nPopf

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

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

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

            蜉蝣f(i).Best.Position=蜉蝣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).PositionUpperBound);

                蜉蝣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.Position=蜉蝣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).PositionUpperBound);

            蜉蝣(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.Position=蜉蝣(i).Position;

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

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

                % 没做什么

            别的

                如果兰德<0.5

                    蜉蝣(i).Best.Position=蜉蝣(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).Position=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;

    结尾

    %% 结果

    ⛄ 运行结果

    ⛄ 参考文献

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

    ❤️ 关注我领取海量matlab电子书和数学建模资料

    ❤️部分理论引用网络文献,若有侵权联系博主删除

  • 相关阅读:
    视频服务HDR Vivid 还原色彩,让所见成“真”
    【深入浅出 Yarn 架构与实现】5-1 Yarn 资源调度器基本框架
    vue路由和nodeJS环境搭建
    promise执行顺序面试题令我头秃,你能作对几道
    【CKA考试笔记】二十、升级k8s
    【人工智能数学基础】几何解释——最小二乘法
    第七篇 python IO操作
    【Java】Spring Cloud OAuth2之密码模式实战
    计算机操作系统-并发控制
    Capto2024专为Mac电脑设计的屏幕录制和视频编辑软件
  • 原文地址:https://blog.csdn.net/qq_59747472/article/details/127711190