【优化求解】基于蝗虫算法求解单目标问题附matlab代码
1 简介
蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法。具体原理如下:
2 部分代码
%_____________________________
% Multi-objective Grasshopper Optimization Algorithm (MOGOA) source codes version 1.0
%
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
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';
display(['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])
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像
3 仿真结果
4 参考文献
[1]潘峰, and 孙红霞. "基于蝗虫算法的图像多阈值分割方法." 电子测量与仪器学报 033.001(2019):149-155.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
【优化求解】基于蝗虫算法求解单目标问题附matlab代码相关推荐
- 【优化求解】基于缎蓝园丁鸟优化算法 (SBO)求解单目标问题附matlab代码
1 简介 2 部分代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)
1 简介 2 部分代码 %_________________________________________________________________________________% Salp ...
- 【象群算法】基于象群算法求解单目标问题附matlab代码(Elephant Herding Optimization,EHO)
1 简介 象群 算 法(ElephantHerdingOptimization,EHO)是一种启发式搜索算法,源 于 对 大 象 群 体 行为的研究.该算法原理简单,易于实现,目前应用于传感器部署.土 ...
- 鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(CCG)超详细讲解(附matlab代码)
本文的主要参考文献: Zeng B , Zhao L . Solving Two-stage Robust Optimization Problems by A Constraint-and-Colu ...
- 【WSN通信】基于注水算法实现宽带无线通信资源分配附matlab代码
1 简介 功率分配技术能有效提高认知网络传输链路的信道容量,而注水算法利用凸优化的思想能实现功率分配最优化.针对认知网络中使用注水算法分配信道功率时未考虑邻近认知信道干扰的情况,对认知网络中邻近认知信 ...
- 【图像增强】基于萤火虫算法实现图像对比度增强附matlab代码
1 内容介绍 由于图像本身的复杂性和数据量大,传统的图像处理和分析技术常存在计算复杂度高的问题,因此基于进化算法的图像处理方法得到广泛研究和关注.萤火虫算法(Firefly Algorithm,FA) ...
- 【图像检测】基于AC算法实现图像显著性检测附matlab代码
1 简介 AC算法也是Achanta等提出的,与FT算法类似,只是在求欧式距离时使用的均值不再是整幅图像的均值,而是选取不同大小邻域内的均值(三种大小)分别求取欧式距离,再相加得到. 2 部分代码 ...
- 【智能优化算法-飞蛾火焰优化算法】基于动态惯性权值策略的飞蛾火焰优化算法求解单目标问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【显著性检测】基于HC算法实现图像显著性检测附MATLAB代码
1 简介 图像融合是一种重要的增强图像信息的技术方法,如何对同一目标的多源遥感图像数据进行有效的融合,最大限度地利用多源遥感数据中的有用信息,提高系统的正确识别.判断和决策能力,这是遥感数据融合研究的 ...
最新文章
- 显示来自多个表的数据——JOIN
- Windows 10全新分支版本曝光!专门优化高配置PC
- go 执行sh失败_为容器化的 Go 程序搭建 CI
- 网上商城—管理员修改商品
- python子类继承父类属性实例_Python实现子类调用父类的初始化实例
- L3-2 还原文件 (30 分)
- 60、剑指offer--把二叉树打印成多行
- 安卓玩java模拟器_安卓系统智能手机玩JAVA游戏!JAVA模拟器让你痛快地玩!
- PIR控制器调节器并网逆变器电流谐波抑制策略
- IE8 兼容性问题总结
- 老中医化妆品是品牌吗
- 近来开发工作不忙,零零散散整理的Java基础
- rust怎么拆除墙壁指令_腐蚀RUST基本指令及服务器指令大全
- Tushare介绍和入门级实践(1)——使用tushare接口获取沪深300成分股交易日涨跌数据
- 把PotPlayer设为默认视频播放器
- Odoo tree视图使用js添加按钮(以及跳转页面)
- 2023年“挑战杯”大学生课外学术科技作品竞赛有感
- 国家电子政务体系学习
- python+dlib+opencv实现图像人物换脸
- sqlite3数据导入导出