【智能优化算法】人工原生动物优化器(APO)

2024-04-14 13:44

本文主要是介绍【智能优化算法】人工原生动物优化器(APO),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人工原生动物优化器(Artificial Protozoa Optimizer,APO)是发表在中科院一区期刊‘Knowledge-Based Systems’期刊上“Artificial Protozoa Optimizer (APO): A novel bio-inspired metaheuristic algorithm for engineering optimization”这篇文章上的算法。

01.引言

人工原生动物优化器(Artificial Protozoa Optimizer,APO)通过模拟原生动物的觅食、休眠和繁殖行为来模拟原生动物的生存机制。对APO进行数学建模并实现,以执行元启发式算法的优化过程。通过实验仿真验证了APO的性能,并与32种最先进的算法进行了比较。对提出的APO与最先进算法的两两比较采用Wilcoxon符号秩检验,对多重比较采用Friedman检验。首先,使用2022年IEEE进化计算大会基准的12个功能对APO进行了测试。从实用性出发,将该方法应用于具有约束条件的连续空间中求解五种常见的工程设计问题。并将该算法应用于具有约束条件的离散空间中的多级图像分割问题。实验证明,该算法对优化问题具有较强的竞争性。

  1. APO算法的数学模型基于觅食、休眠和繁殖性能。自养觅食和休眠有助于探索,异养觅食和繁殖有助于开发。
  2. APO在2022年IEEE进化计算大会基准的单模态、多模态、混合和组合函数下实现和评估。实验结果表明,该算法优于32种最先进的算法。
  3. APO的有效性通过具有挑战性的现实问题进行了测试,包括五个工程设计和多级图像分割任务。

02.代码流程

03.部分代码

% Artificial Protozoa Optimizer (APO): A novel bio-inspired metaheuristic algorithm for engineering optimization
function [bestProtozoa,bestFit,recordtime] = APO_func(fhd,dim,pop_size,iter_max,Xmin,Xmax,varargin)
% random seedsstm = RandStream('swb2712','Seed',sum(100*clock));RandStream.setGlobalStream(stm);
% global besttargetbest = [300;400;600;800;900;1800;2000;2200;2300;2400;2600;2700];Fidvec = cell2mat(varargin);Fid = Fidvec(1);runid = Fidvec(2);name_convergence_curve = ['APO_Fid_',num2str(Fid),'_',num2str(dim),'D','.dat'];f_out_convergence = fopen(name_convergence_curve,'a');ps = pop_size;  % ps denotes protozoa sizenp = 1;         % np denotes neighbor pairs     np_max can be set in floor((ps-1)/2)pf_max = 0.1;   % pf_max denotes proportion fraction maximum % set points to plot convergence_curveif  runid ==1for i=1:51 % 51 points to plotif i==1iteration=1;fprintf(f_out_convergence,'%s:%s\t','iter_F',num2str(Fid));elseiteration=iter_max/50*(i-1);endfprintf(f_out_convergence,'%d\t',iteration);end       fprintf(f_out_convergence,'\n');end 
%   
tic; 
protozoa=zeros(ps,dim);    % protozoa
newprotozoa=zeros(ps,dim); % new protozoa
epn=zeros(np,dim); % epn denotes effect of paired neighbors
% initilization
for i = 1:psprotozoa(i,:) = Xmin + rand(1,dim).*(Xmax-Xmin);   
end
% evaluate fitness value
protozoa_Fit = feval(fhd,protozoa',varargin{:});
% find the bestProtozoa and bestFit
[bestval,bestid] = min(protozoa_Fit);
bestProtozoa = protozoa(bestid,:);  % bestProtozoa
bestFit = bestval; % bestFitfprintf(f_out_convergence,'%s\t%.15f\t',num2str(runid),bestFit-targetbest(Fid));
%%  Main loop  
for iter=2:iter_max[protozoa_Fit,index] = sort(protozoa_Fit); protozoa= protozoa(index,:); pf = pf_max*rand; % proportion fractionri=randperm(ps,ceil(ps*pf)); % rank index of protozoa in dormancy or reproduction forms   for i=1:psif ismember(i,ri) %  protozoa is in dormancy or reproduction form  pdr=1/2*(1+cos((1-i/ps)*pi)); % probability of dormancy and reproductionif rand<pdr  % dormancy formnewprotozoa(i,:)=  Xmin + rand(1,dim).*(Xmax-Xmin); else  % reproduction formflag=[1,-1];  % +- (plus minus) Flag=flag(ceil(2*rand));  Mr=zeros(1,dim); % Mr is a mapping vector in reproductionMr(1,randperm(dim,ceil(rand*dim)))=1;newprotozoa(i,:)= protozoa(i,:) + Flag*rand*(Xmin+rand(1,dim).*(Xmax-Xmin)).*Mr; endelse  % protozoa is foraging formf= rand*(1+cos(iter/iter_max*pi)); % foraging factorMf=zeros(1,dim);  % Mf is a mapping vector in foragingMf(1,randperm(dim,ceil(dim*i/ps)))=1;pah= 1/2*(1+cos(iter/iter_max*pi)); % probability of autotroph and heterotroph if rand<pah  % protozoa is in autotroph form            j= randperm(ps,1); % j denotes the jth randomly selected protozoafor k=1:np % np denotes neighbor pairs  if i==1km=i; % km denotes the k- (k minus)kp=i+randperm(ps-i,1); % kp denotes the k+ (k plus)elseif i==pskm=randperm(ps-1,1);kp=i;elsekm=randperm(i-1,1);kp=i+randperm(ps-i,1);end% wa denotes weight factor in the autotroph formswa=exp(-abs(protozoa_Fit(1,km)/(protozoa_Fit(1,kp)+eps))); % epn denotes effect of paired neighbors epn(k,:)=wa*(protozoa(km,:)-protozoa(kp,:));             end                         newprotozoa(i,:)= protozoa(i,:)+ f*(protozoa(j,:)-protozoa(i,:)+1/np*sum(epn,1)).*Mf;         else   % protozoa is in heterotroph form   for k=1:np % np denotes neighbor pairs if i==1imk=i;   % imk denotes i-k (i minus k)ipk=i+k; % ipk denotes i+k (i plus k)elseif i==psimk=ps-k;ipk =i;elseimk=i-k;ipk=i+k;end% neighbor limit range in [1,ps]if  imk<1imk=1;elseif ipk>psipk=ps;end% denotes weight factor in the heterotroph formwh=exp(-abs(protozoa_Fit(1,imk)/(protozoa_Fit(1,ipk)+eps)));epn(k,:)=wh*(protozoa(imk,:)-protozoa(ipk,:));end           flag=[1,-1];  % +- (plus minus) Flag=flag(ceil(2*rand));             Xnear=(1+Flag*rand(1,dim)*(1-iter/iter_max)).* protozoa(i,:);newprotozoa(i,:)=protozoa(i,:)+f*(Xnear-protozoa(i,:)+1/np*sum(epn,1)).*Mf;              endendendnewprotozoa = ((newprotozoa>=Xmin)&(newprotozoa<=Xmax)).*newprotozoa...+(newprotozoa<Xmin).*Xmin+(newprotozoa>Xmax).*Xmax;    newprotozoa_Fit= feval(fhd,newprotozoa',varargin{:});bin = (protozoa_Fit > newprotozoa_Fit)';protozoa(bin==1,:) = newprotozoa(bin==1,:);protozoa_Fit(bin==1) = newprotozoa_Fit(bin==1);    [bestFit,bestid] = min(protozoa_Fit);bestProtozoa = protozoa(bestid,:);    if mod(iter,iter_max/50)==0fprintf(f_out_convergence,'%.15f\t',bestFit-targetbest(Fid));end    endrecordtime = toc;fprintf(f_out_convergence,'\n');fclose(f_out_convergence);
end

04.代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复:智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

这篇关于【智能优化算法】人工原生动物优化器(APO)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903138

相关文章

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指