【多目标优化算法】多目标蚱蜢优化算法(Matlab代码实现)

news/2024/4/27 12:36:37/文章来源:https://blog.csdn.net/Ke_Yan_She/article/details/128994986
👨‍🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥


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


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

📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码及详细文章讲解

💥1 概述

摘要本文从自然界中草蜢群的导航出发,提出了一种新的多目标算法。首先采用数学模型来模拟游泳过程中个体之间的相互作用,包括吸引力、排斥力和舒适区。然后提出了一种机制来使用该模型在单目标搜索空间中逼近全局最优。然后,将存档和目标选择技术集成到算法中,以估计多目标问题的帕累托最优前沿。为了测试所提出算法的性能,使用了一组不同的标准多目标测试问题。该结果与进化多目标优化文献中最受欢迎和最新的算法进行了比较,使用三个性能指标进行了定量和定性分析。结果表明,在获得的帕累托最优解及其分布的准确性方面,所提出的算法能够提供非常有竞争力的结果。

在这个星球上人类存在之前,大自然一直在不断地利用进化来解决具有挑战性的问题。因此,从自然中获得灵感来解决不同的挑战性问题是合理的。在优化领域,1977年,霍兰德提出了一个革命性的想法,在计算机中模拟自然界的进化概念,以解决优化问题[1]就在那一刻,最著名的启发式算法——遗传算法(GA)[2]应运而生,并为解决不同研究领域中的挑战性和复杂问题开辟了一条新途径。

GA算法的一般思想非常简单。它模拟了自然界中基因的选择、重组和突变。事实上,达尔文的进化论是这个算法的主要灵感来源。在遗传算法中,优化过程首先创建一组随机解作为给定优化问题的候选解(个体)。

问题的每个变量都被认为是一个基因,而这组变量类似于染色体。与自然相似,成本函数定义了每条染色体的适合度。整套解决方案被视为一个总体。当计算染色体的适合度时,将随机选择最佳染色体以创建下一个群体。在遗传算法中,选择概率较高的最适者,以类似于自然界的方式参与创造下一个种群。

详细文章讲解见第4部分。

📚2 运行结果

部分代码:

clc;

clear;

close all;

% Change these details with respect to your problem%%%%%%%%%%%%%%

ObjectiveFunction=@ZDT1;

dim=5;

lb=0;

ub=1;

obj_no=2;

if size(ub,2)==1

ub=ones(1,dim)*ub;

lb=ones(1,dim)*lb;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

flag=0;

if (rem(dim,2)~=0)

dim = dim+1;

ub = [ub, 1];

lb = [lb, 0];

flag=1;

end

max_iter=100;

N=200;

ArchiveMaxSize=100;

Archive_X=zeros(100,dim);

Archive_F=ones(100,obj_no)*inf;

Archive_member_no=0;

%Initialize the positions of artificial whales

GrassHopperPositions=initialization(N,dim,ub,lb);

TargetPosition=zeros(dim,1);

TargetFitness=inf*ones(1,obj_no);

cMax=1;

cMin=0.00004;

%calculate the fitness of initial grasshoppers

for iter=1:max_iter

for i=1:N

Flag4ub=GrassHopperPositions(:,i)>ub';

Flag4lb=GrassHopperPositions(:,i)<lb';

GrassHopperPositions(:,i)=(GrassHopperPositions(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;

GrassHopperFitness(i,:)=ObjectiveFunction(GrassHopperPositions(:,i)');

if dominates(GrassHopperFitness(i,:),TargetFitness)

TargetFitness=GrassHopperFitness(i,:);

TargetPosition=GrassHopperPositions(:,i);

end

end

[Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, GrassHopperPositions, GrassHopperFitness, Archive_member_no);

if Archive_member_no>ArchiveMaxSize

Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);

[Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);

else

Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);

end

Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);

index=RouletteWheelSelection(1./Archive_mem_ranks);

if index==-1

index=1;

end

TargetFitness=Archive_F(index,:);

TargetPosition=Archive_X(index,:)';

c=cMax-iter*((cMax-cMin)/max_iter); % Eq. (3.8) in the paper

for i=1:N

temp= GrassHopperPositions;

for k=1:2:dim

S_i=zeros(2,1);

for j=1:N

if i~=j

Dist=distance(temp(k:k+1,j), temp(k:k+1,i));

r_ij_vec=(temp(k:k+1,j)-temp(k:k+1,i))/(Dist+eps);

xj_xi=2+rem(Dist,2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Eq. (3.2) in the paper

s_ij=((ub(k:k+1)' - lb(k:k+1)') .*c/2)*S_func(xj_xi).*r_ij_vec;

S_i=S_i+s_ij;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

end

end

S_i_total(k:k+1, :) = S_i;

end

X_new=c*S_i_total'+(TargetPosition)'; % Eq. (3.7) in the paper

GrassHopperPositions_temp(i,:)=X_new';

end

% GrassHopperPositions

GrassHopperPositions=GrassHopperPositions_temp';

disp(['At the iteration ', num2str(iter), ' there are ', num2str(Archive_member_no), ' non-dominated solutions in the archive']);

end

if (flag==1)

TargetPosition = TargetPosition(1:dim-1);

end

figure

Draw_ZDT1();

hold on

plot(Archive_F(:,1),Archive_F(:,2),'ro','MarkerSize',8,'markerfacecolor','k');

legend('True PF','Obtained PF');

title('MOGOA');

set(gcf, 'pos', [403 466 230 200])

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码及详细文章讲解

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APP测试的7大注意点。

1. 运行 1&#xff09; App安装完成后的试运行&#xff0c;可正常打开软件。 2&#xff09; App打开测试&#xff0c;是否有加载状态进度提示。 3&#xff09; App⻚面间的切换是否流畅&#xff0c;逻辑是否正确。 4&#xff09; 注册 同表单编辑⻚面 用户名密码⻓度 …

快手电商新增商品信息诊断规则,对商家有何影响?

1、2022年快手短剧日活跃用户达2.6亿 新榜讯 近日&#xff0c;快手数据显示&#xff0c;2022年快手短剧日活跃用户达2.6亿&#xff0c;现在的付费用户数对比2022年4月增长超过480%&#xff0c;快手已经是最大的短剧消费市场。此外&#xff0c;2023年快手小游戏日活跃用户峰值超…

一文掌握项目管理工具 —— 时标网络图

一、认识时标网络图二、时标网络图的绘制方法三、自由时差、关键路径、总时差四、时标网络图可解决哪些问题进度调整的问题计算检测点时的 PV 数据资源平滑问题在系统集成项目管理工程师下午的案例分析考试中,有一道计算题分值达 20 分。整套试卷的总分为 75分,考试能否通过合…

ubuntu下用i686-w64-mingw32交叉编译支持SDL、Openssl的ffmpeg库

前言 本篇博客是基于前两篇关于ffmpeg交叉编译下&#xff0c;进行再次编译操作。ubuntu下ffmpeg的交叉编译环境搭建可以参看以下我的这篇博客&#xff1a;https://blog.csdn.net/linyibin_123/article/details/108759367 &#xff1b; ubuntu下交叉编译openssl及交叉编译支持o…

20分钟6个示例4个动图教你学会Async Hooks

序幕 async_hooks模块提供了一个全新的功能世界,但作为 Node.js 爱好者,我最感兴趣的是,它可以让您轻松了解我们在应用程序中经常执行的一些任务的幕后情况。 在本文中,我将尝试借助async_hooks模块来演示和解释一个典型的异步资源的生命周期。 Async Hooks API 简介 as…

OSWatcher.sh脚本说明

OSWatcher.sh脚本位于oswbb目录下&#xff08;Oracle 19c数据库中脚本的路径是&#xff1a; /u01/app/oracle/product/19.0.0/dbhome_1/suptools/tfa/release/tfa_home/ext/oswbb/&#xff09;&#xff0c;由脚本startOSWbb.sh和stopOSWbb.sh来调用启动和停止它。 1. startOSW…

《数据库系统概论》学习笔记——第七章 数据库设计

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章概念比较多。最重点就是7.4节。 7.1 数据库设计概述 数据库设计定义&#xff1a; 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#x…

C#窗口介绍

窗口就是打开程序我们所面对的一个面板&#xff0c;里面可以添加各种控件&#xff0c;如下图所示&#xff0c;我们可以在属性栏设置其标题名称、图标、大小等。图1 窗口图 图2 设置面板 图3 设置双击标题框&#xff0c;会生成Load函数&#xff0c;也可以到事件里面去找Load函数…

线上监控诊断神器arthas

目录 什么是arthas 常用命令列表 1、dashboard仪表盘 2、heapdump dumpJAVA堆栈快照 3、jvm 4、thread 5、memory 官方文档 安装使用 1、云安装arthas 2、获取需要监控进程ID 3、运行arthas 4、进入仪表盘 5、其他命令使用查看官方文档 什么是arthas arthas是阿…

《嵌入式应用开发》实验一、开发环境搭建与布局(上)

1. 搭建开发环境 去官网&#xff08;https://developer.android.google.cn/studio&#xff09;下载 Android Studio。 安装SDK&#xff08;默认Android 7.0即可&#xff09; 全局 gradle 镜像配置 在用户主目录下的 .gradle 文件夹下面新建文件 init.gradle&#xff0c;内容为…

web服务器(1)

阻塞和非阻塞、同步和异步 网络IO阶段一&#xff1a;数据就绪 操作系统&#xff0c;tcp接受缓冲区 阻塞&#xff1a;调用IO方法的线程进入阻塞状态 非阻塞&#xff1a;不会改变线程的状态&#xff0c;通过返回值判断 网络IO阶段二&#xff1a;数据读写 应用程序 同步…

新闻稿的制作流程:从确定新闻稿目的到将其分发给媒体

对于任何希望向媒体和公众传达具有新闻价值的信息的组织来说&#xff0c;新闻稿都是必不可少的工具。精心制作的新闻稿可以帮助您宣传您的业务、产品或服务&#xff0c;并可以产生有价值的媒体报道。在本文中&#xff0c;我们将指导您完成新闻稿的制作过程&#xff0c;从确定新…

社区1月月报|OceanBase 4.1 即将发版,哪些功能将会更新?

我们每个月都会和大家展开一次社区进展的汇报沟通会&#xff0c;希望通过更多的互动交流让OceanBase 开源社区更加透明&#xff0c;实现信息共享&#xff0c;也希望能营造更加轻松的氛围&#xff0c;为大家答疑解惑&#xff0c;让大家畅所欲言。如果您对我们的社区有任何建议&a…

C#多窗口切换

多窗口切换【功能目标】1、实现多窗口切换&#xff08;Panel&#xff09;2、动态生成窗口内文本框以及标签&#xff08;重点&#xff09;3、改变文本框内容【效果图】【代码详解】1、多窗口切换如要实现多窗口切换&#xff0c;需要用到Panel&#xff0c;对于这个控件不熟悉的可…

13-mvc框架原理与实现方式

1、mvc原理 # mvc 与框架## 1.mvc 是什么1. m:model,模型(即数据来源),主要是针对数据库操作 2. v:view,视图,html 页面。视图由一个一个模板构成(模板是视图的一个具体展现或载体,视图是模板的一个抽象) 3. c:controller,控制器,用于mv之间的数据交互## 2.最简单的 mvc 就是一…

锁相环的组成和原理及应用

一.锁相环的基本组成 许多电子设备要正常工作&#xff0c;通常需要外部的输入信号与内部的振荡信号同步&#xff0c;利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路&#xff0c;简称锁相环(PLL)。锁相环的特点是&#xff1a;利用外部输入的参考信号控制环路内…

阶段八:服务框架高级(第五章:服务异步通信-高级篇(RabbitMQ高级))

阶段八&#xff1a;服务框架高级&#xff08;第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;&#xff09;Day-第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;0.学习目标1.消息可靠性1.1.生产者消息确认1.1.1.修改配…

400G光模块知识大全

400G光模块是目前高速传输领域中的一种先进产品&#xff0c;被广泛应用于高性能数据中心、通信网络、大规模计算、云计算等领域。本文将从400G光模块的定义、技术、产品型号、应用场景以及未来发展方向进行详细介绍。一、什么是400G光模块&#xff1f;400G光模块是指传输速率达…

Android zygote进程启动流程

zygote启动过程中涉及到以下模块&#xff1a; app_processzygote USAPsocketFileDescriptor (FD) AndroidRuntimeAppRuntime &#xff08;定义于app_process模块&#xff0c;继承自AndroidRuntime。&#xff09; init进程启动zygote进程&#xff1a; #init.zygote32_64.rc s…

前端开发_快应用开发

目录快应用官网真机调试组件组件嵌套问题tab组件list组件web组件css 样式问题[1]选择器[2]盒模型[3]样式布局-弹性布局[4-1]样式切换 - 类名的动态切换[4-2] 样式切换 - 行内样式动态切换[5]background[6]overflow[7]border-radius[8]盒子阴影[9] 单位系统接口[1] 检查某app是否…