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

news2024/11/28 16:33:27

✅作者简介:热爱科研的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).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.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).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.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电子书和数学建模资料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

统计信号处理基础 习题解答6-6

题目 在本题中&#xff0c;我们扩展标量BLUE的结果。假定 其中θ 是待估计的未知参数&#xff0c;β 是已知常数&#xff0c;数据矢量x 的协方差矩阵是C 。在本题我们定义修正的线性估计量为 证明BLUE为&#xff1a; 另外求最小方差。 解答&#xff1a; 首先确保线性估计量是…

TFT-LCD显示中英文

TFT-LCD显示中英文 在前面编写了屏幕显示ASCII字符和字符串后&#xff0c;本次实现屏幕显示中文字符和中文字符串 中文字符取模 阴码&#xff0c;逐行式&#xff0c;逆向&#xff0c;十六进制数&#xff0c;C51格式&#xff0c; 输入要显示的中文字符&#xff0c;字体选择宋…

【数据结构】搜索二叉树(C++实现)

目录 一、二叉搜索树的概念 二、二叉搜索树的实现 2.1 节点的定义及构造 2.2 树的结构及功能展示 2.3 树的 Insert 2.4 树的中序遍历 2.4 树的 Find 2.5 树的 Erase 2.6 拷贝构造、赋值运算符重载、析构函数 三、递归实现树的增删查 3.1 递归实现 FindR 3.2 递归实…

Vue | Vue.js Composition API(二)

&#x1f5a5;️ Vue.js专栏&#xff1a;Vue.js 初级知识 Composition API(二) &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀…

嘿,朋友,其实 CSS 动画超简单的 - 时间函数篇(贝塞尔曲线、steps,看完还不懂算我输)

分配内存 - new 官方定义&#xff1a;new是一个分配内存的内置函数&#xff0c;第一个参数是类型&#xff0c;而不是值&#xff0c;返回的值是指向该类型新分配的零值的指针。 func new(Type) *Type 我们平常在使用指针的时候是需要分配内存空间的&#xff0c;未分配内存空间…

Java自定义注解

目录 一、什么是自定义注解 1&#xff09;Java注解简介 2&#xff09;Java注解分类 JDK基本注解 JDK元注解 自定义注解 如何自定义注解&#xff1f; 二、自定义注解 1&#xff09;获取类上注解值 2&#xff09;获取类属性上的注解属性值 3&#xff09;获取方法上的注…

WireShark 常用协议分析

WireShark 常用协议分析 1.3 实战&#xff1a;使用 WireShark 对常用协议抓包并分析原理 协议分析的时候 我们 关闭混淆模式&#xff0c; 避免一些干扰的数据包存在。 1.3.1 常用协议分析 - ARP 协议 地址解析协议 &#xff08;英语&#xff1a;Address Resolution Protocol&…

从内核角度看网络包发送流程

一、前置知识 1、RingBuffer结构详解 关于RingBuffer网上有很多说法&#xff0c;有的人说RingBuffer是系统启动时就预先申请好的一个环形数组&#xff0c;有的人说RingBuffer是在接收或发送数据时才动态申请的一个环形数组&#xff0c;那么到底RingBuffer的结构是怎么样的呢&…

《吉师作业》(2)之迟来的答案

前言 &#x1f340;作者简介&#xff1a;吉师散养学生&#xff0c;为挣钱努力拼搏的一名小学生。 &#x1f341;个人主页&#xff1a;吉师职业混子的博客_CSDN博客-python学习,HTML学习,清览题库--C语言程序设计第五版编程题解析领域博主 &#x1fad2;文章目的&#xff1a;我不…

初识C++(二)

简述 &#xff1a;本篇就缺省参数 和 函数重载 方面进行初步学习 &#xff0c;对比C语言学习C这两个语法&#xff0c;从而感受C在此方面对C语言进行的补充。 目录 缺省参数 什么是缺省参数 缺省参数的分类 缺省参数的应用 函数重载 什么是函数重载 函数重载的三种情况 支…

【JavaSE】函数or方法?方法的重载讲解

文章目录什么是方法如何定义方法方法的调用过程形参与实参的关系方法的重载为什么要重载重载的概念方法签名递归什么是方法 在C语言的学习中我们学习到了一个概念叫做函数&#xff0c;那么在Java的语法中有没有类似函数的东西的&#xff0c;答案是有的&#xff0c;但是在Java的…

strimzi实战之一:简介和准备

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于strimzi strimzi是一个开源项目&#xff0c;已加入了CNCF&#xff0c;官网地址&#xff1a;https://strimzi.io/借助strimzi&#xff0c;既能快速部署ka…

【生日快乐】搜索技术【深度优先搜索】 - 回溯法

搜索技术【深度优先搜索】 - 回溯法 回溯法是一种选优搜索法&#xff0c;按照选优条件深度优先搜索&#xff0c;以达到目标。当搜索到某一步时&#xff0c;发现原先的选择并不是最优或达不到目标&#xff0c;就退回一步重新选择&#xff0c;这种走不通就退回再走的技术被称为回…

如何用 Elasticsearch 实现 Word、PDF,TXT 文件的全文内容检索?

简单介绍一下需求 能支持文件的上传&#xff0c;下载 要能根据关键字&#xff0c;搜索出文件&#xff0c;要求要能搜索到文件里的文字&#xff0c;文件类型要支持 word&#xff0c;pdf&#xff0c;txt 文件上传&#xff0c;下载比较简单&#xff0c;要能检索到文件里的文字&am…

2022-ISCTF-部分MISC和PWN

misc 两层编码 第一层 sha256掩码爆破 第二层 base64解码找到key import string,sys from hashlib import sha256 from multiprocessing import Process from Crypto.Util.number import * from pwn import * import base64 from primefac import * context(log_leveldebug)…

【STL】容器 - set和map的使用

目录 前言 一.键值对 1.在SGI - STL中对键值对的定义: 2.make_pair 二.set 1.set的概念与注意事项 2.set的使用(常用接口) <1>.构造函数 <2>.迭代器与范围for <3>.插入和查找 <4>.删除erase <5>.计数count 三.map 1.map的概念与注…

洛谷千题详解 | P1012 [NOIP1998 提高组] 拼数【C++、Java语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; C源码2&#xff1a; C源码3&#xff1a; Java源码&#xff1a; ---------------------------------------------------------…

element-ui upload图片上传组件使用

图片上传前端收集 数据 再调用接口发送到后端 组件标签内的参数&#xff1a; 参数说明类型可选值默认值action必选参数&#xff0c;上传的地址string——headers设置上传的请求头部object——multiple是否支持多选文件boolean——data上传时附带的额外参数object——name上传…

【数据结构】链表OJ第一篇 —— 移除链表元素 反转链表 合并两个有序链表

文章目录0. 前言1. 移除链表元素2. 反转链表3. 合并两个有序链表4. 结语0. 前言 上篇博客中&#xff0c;我们学习了实现了单链表。但是仅仅实现并不算掌握&#xff0c;所以我们需要做些题目来练习巩固。而从今天开始的几期&#xff0c;anduin 都会为大家带来链表OJ题&#xff…

在Linux环境下VScode中配置ROS、PCL和OpenCV开发环境记录

一.安装必要的插件 打开VScode&#xff0c;在开展中安装CMake、CMake Tools&#xff0c;ROS和catkin-tools插件&#xff0c;截图如下&#xff0c;安装后重新打开VScode插件生效。 二.创建ROS工作空间 在选择的路径下&#xff0c;打开终端创建工作空间&#xff0c;具体命令如下…