当前位置: 首页 > news >正文

基于樽海鞘群算法的线性规划求解matlab程序

基于樽海鞘群算法的线性规划求解matlab程序
在这里插入图片描述

1 樽海鞘群优化算法

1.1 生物启示

通过研究海底生物樽海鞘在觅食过程中群体呈链状向食物方向移动的行为活动,学者Mirjalili在2017年提出的一种新型启发式仿生算法—樽海鞘群智能优化算法(Salp Swarm Algorithm, SSA)。樽海鞘在生物分类中隶属樽海鞘科,身体形态为桶型,颜色略透明。它们的组织和水母非常相似,且运动方式也很像水母,樽海鞘的食物是浮游植物(海草等),它们是通过用身体吸—排海水从而进行运动。一般情况下樽海鞘身体长度为1-10厘米,在水中有时为单一个体有时为群体运动。樽海鞘的生物学研究仍处于初期阶段,主要是因为人类探索它们的生活环境难度很大,很难在实验室环境中对它们进行研究。樽海鞘最有趣的行为之一是它们的成群行为。在深海中,樽海鞘经常呈现链状进行群体活动。这种行为主要机理并不明确,但一些生物学者认为,这是为了通过群体协作使樽海鞘群运动更快,从而进行高效地觅食行为。
在这里插入图片描述

1.2 SSA算法

樽海鞘群算法(SSA)是学者Mirjalili于2017年提出的一种新型群智能算法,该算法寻优过程模仿海底生物樽海鞘呈链状运动的觅食行为[64]。使用数学模型将樽海鞘群活动的行为表达出来,樽海鞘链由以下两部分构成:领导者以及跟随者。领头的樽海鞘个体是领导者,处于樽海鞘链的最前面,而其余的樽海鞘个体则被称为跟随者。正如两组个体的名称一样,领导者的作用是对搜索方向进行决策,跟随者相互追随(直接或间接跟随领导者),使整个樽海鞘链像食物源的方向移动。与其他基于群体行为的智能优化算法类似,N维的搜索空间中,每一个樽海鞘的位置被定义为X,N即为优化问题中决策变量的个数,D为樽海鞘种群数量。则樽海鞘种群的位置由X N维矩阵组成,如下所示:
在这里插入图片描述
(1)在樽海鞘群觅食过程中,领导者需要根据自身与食物源的距离进行位置变化,可通过式(2.2)进行计算:
在这里插入图片描述

其中第j维度上1jx为第一个个体(领导者)的位置;jF为食物源在第j维的位置;,j jub lb分别为第j维空间的上限与下限;2 3c,c为随机数,2 3c,c[0,1];c有着平衡樽海鞘群算法在全局探索或局部开发两种状态的作用,因而1c为最重要的参数,由式(2.3)进行计算:
在这里插入图片描述
其中,e为自然对数的底,t代表本次迭代次数,maxT为算法设置的最大迭代次数。

(2)使用牛顿运动公式更新追随者位置如式2.4所示:
在这里插入图片描述
1.3 SSA算法流程

第一步 设置参数,种群初始化。根据所设定范围的搜索空间,生成一个规模为N×D的随机种群。
第二步 计算适应度值。按照目标函数计算公式,计算初始种群中N个樽海鞘个体的适应度值。
第三步 确定食物源位置。在实际寻优问题中,最优解是未知的。将樽海鞘群按照适应度值进行排序,适应度最优的樽海鞘的位置设为本次迭代的食物位置(当前最优位置)。
第四步 领导者与跟随者的确定。去除掉排在首位的樽海鞘个体,群体中剩余N−1个樽海鞘,按照初始种群适应度值的排序,将排在前一半的樽海鞘个体定义为领导者,其余樽海鞘个体视为追随者。
第五步 位置更新。首先根据式(2.2)更新领导者的位置,再根据式(2.5)更新追随者的位置。
第六步 计算更新后的群体的适应度。将更新后的每个樽海鞘个体的适应度值与当前食物的适应度值进行比较,若更新后樽海鞘的适应度值优于食物适应度值,则以适应度值更优的樽海鞘位置作为新的食物的位置。
第七步 重复步骤四-步骤六,当计算运行到最大迭代次数,输出当前的食物位置作为全局最优位置。
在这里插入图片描述

2 线性规划算例
2.1算例
在这里插入图片描述
2.2算例答案
在这里插入图片描述

3 樽海鞘群算法求解结果
1)迭代曲线
在这里插入图片描述

2)求解答案
在这里插入图片描述

4 matlab程序
1)主函数

%% 基于樽海鞘群算法的线性规划求解
clear 
clc
close all
SearchAgents_no=30; % Number of search agents

Function_name='F1'; % Name of the test function that can be from F1 to F23 ( 

Max_iteration=200; % Maximum numbef of iterations

% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);

[Best_score,Best_pos,SSA_cg_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);



%% 结果画图

figure
plot(SSA_cg_curve,'Color','r')
title('迭代曲线')
xlabel('Iteration');
ylabel('Best score obtained so far');

% axis tight
grid on
box on
legend('SSA')
%% 结果输出
display(['最优变量为 ', num2str(Best_pos)]);
display(['最优解为 ', num2str(Best_score)]);




。。。。略 




5 matlab完整程序链接:
https://mp.weixin.qq.com/s?__biz=Mzg4MTc1MjE2Mg==&mid=2247484503&idx=1&sn=0aaeb66ec4dc6516d7ffac7ef051c3cc&chksm=cf60655af817ec4c0b7b1893e33d6632c05be85a442e855fbfcc1a17048ff0795546f351c312&token=2022090735&lang=zh_CN#rd

在这里插入图片描述

相关文章:

  • qt自定义控件之TextEdit
  • 深度估计 双目深度估计+单目深度估计 ONNX运行程序
  • Express 路由
  • 2022蓝帽杯初赛电子取证
  • 数据结构与算法复习:第三十六弹
  • CSS - 响应式布局(一)媒体查询
  • 【JAVA预备】课程目录
  • 2022年0902Maven的依赖学习<第四课>
  • Android 11 上的文件读写权限(MANAGE_EXTERNAL_STORAGE)
  • Vue模板语法(01)
  • 世界第一台通用计算机:ENIAC
  • JAVA学习----HashSet类
  • 文章组合生成-免费文章组合生成软件
  • 华为面试应该怎么准备?
  • JDBC如何记忆
  • ES6指北【2】—— 箭头函数
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript的使用你知道几种?(上)
  • Lsb图片隐写
  • SpringCloud集成分布式事务LCN (一)
  • 大数据与云计算学习:数据分析(二)
  • 高性能JavaScript阅读简记(三)
  • 普通函数和构造函数的区别
  • 消息队列系列二(IOT中消息队列的应用)
  • 携程小程序初体验
  • 学习笔记:对象,原型和继承(1)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • kubernetes资源对象--ingress
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​ubuntu下安装kvm虚拟机
  • ​人工智能书单(数学基础篇)
  • # 数据结构
  • #FPGA(基础知识)
  • #QT(串口助手-界面)
  • (1)(1.9) MSP (version 4.2)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (转)【Hibernate总结系列】使用举例
  • ... 是什么 ?... 有什么用处?
  • .gitignore文件---让git自动忽略指定文件
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET命名规范和开发约定
  • 。Net下Windows服务程序开发疑惑
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [20160902]rm -rf的惨案.txt
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [ICCV2017]Neural Person Search Machines
  • [LeetCode]Multiply Strings
  • [LeetCode]—Permutations II 求全排列(有重复值)