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代码相关推荐

  1. 【优化求解】基于缎蓝园丁鸟优化算法 (SBO)求解单目标问题附matlab代码

    1 简介 ​ 2 部分代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...

  2. 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)

    1 简介 2 部分代码 %_________________________________________________________________________________% Salp ...

  3. 【象群算法】基于象群算法求解单目标问题附matlab代码(Elephant Herding Optimization,EHO)

    1 简介 象群 算 法(ElephantHerdingOptimization,EHO)是一种启发式搜索算法,源 于 对 大 象 群 体 行为的研究.该算法原理简单,易于实现,目前应用于传感器部署.土 ...

  4. 鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(CCG)超详细讲解(附matlab代码)

    本文的主要参考文献: Zeng B , Zhao L . Solving Two-stage Robust Optimization Problems by A Constraint-and-Colu ...

  5. 【WSN通信】基于注水算法实现宽带无线通信资源分配附matlab代码

    1 简介 功率分配技术能有效提高认知网络传输链路的信道容量,而注水算法利用凸优化的思想能实现功率分配最优化.针对认知网络中使用注水算法分配信道功率时未考虑邻近认知信道干扰的情况,对认知网络中邻近认知信 ...

  6. 【图像增强】基于萤火虫算法实现图像对比度增强附matlab代码

    1 内容介绍 由于图像本身的复杂性和数据量大,传统的图像处理和分析技术常存在计算复杂度高的问题,因此基于进化算法的图像处理方法得到广泛研究和关注.萤火虫算法(Firefly Algorithm,FA) ...

  7. 【图像检测】基于AC算法实现图像显著性检测附matlab代码

    1 简介 AC算法也是Achanta等提出的,与FT算法类似,只是在求欧式距离时使用的均值不再是整幅图像的均值,而是选取不同大小邻域内的均值(三种大小)分别求取欧式距离,再相加得到. 2 部分代码 ​ ...

  8. 【智能优化算法-飞蛾火焰优化算法】基于动态惯性权值策略的飞蛾火焰优化算法求解单目标问题附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  9. 【显著性检测】基于HC算法实现图像显著性检测附MATLAB代码

    1 简介 图像融合是一种重要的增强图像信息的技术方法,如何对同一目标的多源遥感图像数据进行有效的融合,最大限度地利用多源遥感数据中的有用信息,提高系统的正确识别.判断和决策能力,这是遥感数据融合研究的 ...

最新文章

  1. 显示来自多个表的数据——JOIN
  2. Windows 10全新分支版本曝光!专门优化高配置PC
  3. go 执行sh失败_为容器化的 Go 程序搭建 CI
  4. 网上商城—管理员修改商品
  5. python子类继承父类属性实例_Python实现子类调用父类的初始化实例
  6. L3-2 还原文件 (30 分)
  7. 60、剑指offer--把二叉树打印成多行
  8. 安卓玩java模拟器_安卓系统智能手机玩JAVA游戏!JAVA模拟器让你痛快地玩!
  9. PIR控制器调节器并网逆变器电流谐波抑制策略
  10. IE8 兼容性问题总结
  11. 老中医化妆品是品牌吗
  12. 近来开发工作不忙,零零散散整理的Java基础
  13. rust怎么拆除墙壁指令_腐蚀RUST基本指令及服务器指令大全
  14. Tushare介绍和入门级实践(1)——使用tushare接口获取沪深300成分股交易日涨跌数据
  15. 把PotPlayer设为默认视频播放器
  16. Odoo tree视图使用js添加按钮(以及跳转页面)
  17. 2023年“挑战杯”大学生课外学术科技作品竞赛有感
  18. 国家电子政务体系学习
  19. python+dlib+opencv实现图像人物换脸
  20. sqlite3数据导入导出

热门文章

  1. 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作
  2. 简书项目实战-Header
  3. Java8新特性-Optional,狂神说docker笔记百度云
  4. java五星好评点评器_JavaScript实现商品评价五星好评
  5. HTTP请求返回状态码
  6. 字节顺序:大端模式 和 小端模式
  7. redis数据库的设计实例
  8. 软件测试是干什么的 发展前景怎样?
  9. 2.Visual Studio下载和安装
  10. Proteus-中英文对照