多目标优化算法之樽海鞘算法(MSSA)

樽海鞘算法的主要灵感是樽海鞘在海洋中航行和觅食时的群聚行为。相关文献表示,多目标优化之樽海鞘算法的结果表明,该算法可以逼近帕雷托最优解,收敛性和覆盖率高。

通过给SSA算法配备一个食物来源库来解决第一个问题。该存储库维护了到目前为止优化过程中获得的最优解,非常类似于多目标粒子群优化(MOPSO)中的存档。存储库有一个最大大小来存储数量有限的最优解决方案。在优化过程中,使用Pareto优势操作符将每个樽海鞘与所有存储库原方案进行比较。

  • 如果一个樽海鞘在存储库中占优,则必须交换它们(把樽海鞘放入存储库,原方案拿出)。如果一个樽海鞘在存储库中优于一组解决方案,那么应该将这一组解决方案全部从存储库中删除,并把该樽海鞘应该添加到存储库中。

  • 如果至少有一个存储库中的原方案比该樽海鞘更优,那么该樽海鞘应被丢弃,不加入存储库。

  • 如果与所有存储库居民相比,该樽海鞘与之互不占优,那么该樽海鞘即是最优解,则必须将其添加到存储库中。

这些规则可以保证存储库得到的始终都是目前为止算法所获得的最优解决方案。但是,有一种特殊情况,即存储库已满,与存储库原方案相比,该樽海鞘也不占优,此时本应该将该樽海鞘加入存储库,但是存储库满了。当然,最简单的方法是随机删除归档中的一个解决方案,并将其替换为这个樽海鞘。

由此可见,多目标樽海鞘算法与多目标灰狼算法一致,也是采用的网格机制。大家可以对比学习。

多目标樽海鞘在ZDT1中的表现:

b560c838a0cd825789136038ce26b35b.png

主函数代码:

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)==1ub=ones(1,dim)*ub;lb=ones(1,dim)*lb;
endmax_iter=100;
N=200;
ArchiveMaxSize=100;
Archive_X=zeros(100,dim);
Archive_F=ones(100,obj_no)*inf;
Archive_member_no=0;
r=(ub-lb)/2;
V_max=(ub(1)-lb(1))/10;
Food_fitness=inf*ones(1,obj_no);
Food_position=zeros(dim,1);
Salps_X=initialization(N,dim,ub,lb);
fitness=zeros(N,2);
V=initialization(N,dim,ub,lb);
position_history=zeros(N,max_iter,dim);
for iter=1:max_iterc1 = 2*exp(-(4*iter/max_iter)^2); % Eq. (3.2) in the paperfor i=1:N %Calculate all the objective values firstSalps_fitness(i,:)=ObjectiveFunction(Salps_X(:,i)');if dominates(Salps_fitness(i,:),Food_fitness)Food_fitness=Salps_fitness(i,:);Food_position=Salps_X(:,i);endend[Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Salps_X, Salps_fitness, Archive_member_no);if Archive_member_no>ArchiveMaxSizeArchive_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);elseArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);endArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);% Archive_mem_ranks% Chose the archive member in the least population area as food`% to improve coverageindex=RouletteWheelSelection(1./Archive_mem_ranks);if index==-1index=1;endFood_fitness=Archive_F(index,:);Food_position=Archive_X(index,:)';for i=1:Nindex=0;neighbours_no=0;if i<=N/2for j=1:1:dimc2=rand();c3=rand();% Eq. (3.1) in the paper if c3<0.5Salps_X(j,i)=Food_position(j)+c1*((ub(j)-lb(j))*c2+lb(j));elseSalps_X(j,i)=Food_position(j)-c1*((ub(j)-lb(j))*c2+lb(j));endendelseif i>N/2 && i<N+1point1=Salps_X(:,i-1);point2=Salps_X(:,i);Salps_X(:,i)=(point2+point1)/(2); % Eq. (3.4) in the paperendFlag4ub=Salps_X(:,i)>ub';Flag4lb=Salps_X(:,i)<lb';Salps_X(:,i)=(Salps_X(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;enddisp(['At the iteration ', num2str(iter), ' there are ', num2str(Archive_member_no), ' non-dominated solutions in the archive']);
end
figure
Draw_ZDT1();
hold on
plot(Archive_F(:,1),Archive_F(:,2),'ro','MarkerSize',8,'markerfacecolor','k');
legend('True PF','Obtained PF');
title('MSSA');

免费完整代码获取,后台回复关键词:

多目标02

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

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

相关文章

Docker镜像查看下载删除镜像文件的相关命令

1.镜像相关命令 本地查看有哪些镜像文件&#xff1a; docker images镜像的名称就是我们常见的一些软件&#xff0c;镜像相当于把软件和软件所需要的运行环境打包到一个镜像文件里面&#xff0c;将来在通过这个镜像文件创建出对应的容器&#xff0c;容器有了以后这些软件自动的…

java线程的优先级、守护线程的概念

1.线程的调度 抢占式调度 非抢占式调度 1.1 抢占式调度 优先级越高&#xff0c;抢到cpu的概率越高 1.2 守护线程 守护线程&#xff0c;非守护线程。当其他的非守护线程执行完毕以后&#xff0c;守护线程会陆续结束。 守护线程的应用场景

【Linux】网络协议总结

目录 网络协议总结 应用层 传输层 网络层 数据链路层 网络协议总结 应用层 应用层的作用&#xff1a;负责应用程序间沟通&#xff0c;完成一系列业务处理所需服务。能够根据自己的需求&#xff0c;设计对应的应用层协议。了解HTTP协议。理解DNS的原理和工作流程。 传…

插入排序(Java实例代码)

目录 插入排序 一、概念及其介绍 二、适用说明 三、过程图示 四、Java 实例代码 InsertionSort.java 文件代码&#xff1a; 插入排序 一、概念及其介绍 插入排序(InsertionSort)&#xff0c;一般也被称为直接插入排序。 对于少量元素的排序&#xff0c;它是一个有效的算…

CNN(四):ResNet与DenseNet结合--DPN

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 前面实现了ResNet和DenseNet的算法&#xff0c;了解了它们有各自的特点&#xff1a; ResNet&#xff1a;通过建立前面层与后面层之间的“短路…

Nginx中间件安全基线配置与操作指南-翻译

1、日志配置 安全基线项目名称 Nginx日志审计安全基线要求项 安全基线编号 Nginx-001 安全基线项说明 配置Nginx日志记录和审核 设置操作步骤 (1)编辑 nginx.conf 配置文件 将 error_log 前的“#”去掉&#xff0c;记录错误日志&#xff1b; 将 access_log 前的“#”去…

云原生核心原则和特征

云原生&#xff08;Cloud Native&#xff09;是一种软件开发和部署方法论&#xff0c;旨在充分利用云计算的优势来构建和管理应用程序。云原生应用程序是专为在云环境中设计、构建和运行的应用程序。 以下是云原生的一些核心原则和特征&#xff1a; 微服务架构&#xff1a;云…

TSINGSEE青犀视频安防监控视频平台EasyCVR设备在线,视频无法播放的原因排查

可支持国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等多种协议接入的安防监控视频平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、…

IDEA全局设置MyBatis中写SQL语句提示

第一步&#xff1a;把这两个设置改成MySQL即可&#xff1a; 第二步&#xff1a;找到设置>编辑器>语言注入>店家加号&#xff0c;选择MySQL

微信小程序在使用vant组件库时构建npm报错

在跟着vant官方进行使用步骤一步步操作时&#xff0c;由于要构建NPM&#xff0c;但NPM包在App配置文件的外部 所以在做下图这一步时&#xff1a; 接着再进行npm构建时会报错 message:发生错误 Error: F:\前端学习\前端框架\小程序\project\demo\miniprogram解决方法 &#xf…

Linux Centos 8 用户管理之重置密码

如果在使用linux系统时遇到系统密码问题无法进入系统或者操作的时候可以按照下面的方法重置用户密码。 一、root用户密码重置&#xff1a; 方式一&#xff1a; 1.重启电脑或虚拟机&#xff0c;在刚进引导界面时候按“e"键&#xff0c;进入编辑模式。 2.在”quiet"…

Java:正则表达式书写规则及相关案例:检验QQ号码,校验手机号码,邮箱格式,当前时间

正则表达式 目标:体验一下使用正则表达式来校验数据格式的合法性。需求:校验QQ号码是否正确&#xff0c;要求全部是数字&#xff0c;长度是(6-20&#xff09;之间&#xff0c;不能以0开头 首先用自己编写的程序判断QQ号码是否正确 public static void main(String[] args) {Sy…

递归、搜索与回溯算法

一.递归 &#xff08;1&#xff09;汉诺塔问题 当n2时&#xff0c;要将A中最下面盘子上方的盘子放到B上&#xff0c;最下面盘子放到C上&#xff0c;再将B上的盘子通过A放到C即可&#xff1b; 当n3时&#xff0c;要将A中最下面盘子上方的盘子放到B上&#xff0c;最下面盘子放到…

如何通过nginx反向代理实现不同域名映射到同一台服务器的相同端口

要在Nginx中实现不同域名映射到同一台服务器的相同端口&#xff0c;您可以使用Nginx的代理转发技术。 首先&#xff0c;您需要了解Nginx的代理转发工作原理。Nginx的代理转发是指在代理服务器&#xff08;proxy server&#xff09;收到一个请求时&#xff0c;先将请求转发给目…

Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI

详细错误信息如下&#xff1a; 复制代码 19/03/19 11:04:18 INFO util.log: Logging initialized 5402ms 19/03/19 11:04:18 INFO server.Server: jetty-9.3.z-SNAPSHOT 19/03/19 11:04:18 INFO server.Server: Started 5604ms 19/03/19 11:04:18 WARN util.Utils: Service ‘S…

uniapp 小兔鲜儿 - 首页模块(1)

目录 自定义导航栏 静态结构 安全区域​ 通用轮播组件 静态结构 自动导入全局组件 全局组件类型声明 .d.ts文件 注册组件 vue/runtime-core 首页 – 轮播图指示点 首页 – 获取轮播图数据 首页 – 轮播图数据类型并渲染 首页 – 轮播图总结 首页分类 首页 – 前…

电影评论:二分类

跟着《python深度学习》做了个书上小项目&#xff0c;现在总结下该项目内容。 获取数据(这里获取的是IMDB数据集&#xff0c;其中有train_data和train_label两个标签&#xff0c;train_data&#xff1a;英文句子&#xff0c;train_label&#xff1a;正/负面(0,1)) from keras.d…

Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

在之前的《手把手教你用 NebulaGraph AI 全家桶跑图算法》中&#xff0c;除了介绍了 ngai 这个小工具之外&#xff0c;还提到了一件事有了 Jupyter Notebook 插件: https://github.com/wey-gu/ipython-ngql&#xff0c;可以更便捷地操作 NebulaGraph。 本文就手把手教你咋在 J…

计算机网络核心-数据交换

1 概述 计算机网络的核心即数据交换。通过数据交换将数据从源主机发送到目的主机。 2 为什么需要数据交换 如果不是数据交换的方式&#xff0c;而是每两台主机直接连接&#xff0c;则会产生N^2链路问题。 即&#xff0c;假设有N台主机&#xff0c;两两间建立连接&#xff0c…

【笔记】用pair同时存三个数据

B - Roulette 做题链接&#xff1a;abc 问题陈述 N人、1人、2人、……人、N人正在玩轮盘赌。一次轮盘赌的结果是从0到36的37个整数中的一个。对于每个i1,2,…,N&#xff0c;i人在37个可能结果中的Ci​个下了注&#xff1a;Ai,1​,Ai,2​,…,Ai,Ci​​. 转盘已经转动&#x…