【智能优化算法】人工原生动物优化器(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

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

据阿谱尔APO Research调研显示,2023年全球髓内钉市场销售额约为4.7亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球髓内钉市场销售额约为4.7亿美元,预计在2024-2030年预测期内将以超过3.82%的CAGR(年复合增长率)增长。 髓内钉市场是指涉及髓内钉制造、分销和销售的行业。髓内钉是一种用于整形外科手术的医疗器械,用于稳定长骨骨折,特别是股骨、胫骨和肱骨。髓内钉通常由不銹钢或钛等材料制成,并插入骨的髓管中,以在愈合过程中提供结构支

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

大林 PID 算法

Dahlin PID算法是一种用于控制和调节系统的比例积分延迟算法。以下是一个简单的C语言实现示例: #include <stdio.h>// DALIN PID 结构体定义typedef struct {float SetPoint; // 设定点float Proportion; // 比例float Integral; // 积分float Derivative; // 微分flo

服务器雪崩的应对策略之----SQL优化

SQL语句的优化是数据库性能优化的重要方面,特别是在处理大规模数据或高频访问时。作为一个C++程序员,理解SQL优化不仅有助于编写高效的数据库操作代码,还能增强对系统性能瓶颈的整体把握。以下是详细的SQL语句优化技巧和策略: SQL优化 1. 选择合适的数据类型2. 使用索引3. 优化查询4. 范式化和反范式化5. 查询重写6. 使用缓存7. 优化数据库设计8. 分析和监控9. 调整配置1、

Java中如何优化数据库查询性能?

Java中如何优化数据库查询性能? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何优化数据库查询性能,这是提升应用程序响应速度和用户体验的关键技术。 优化数据库查询性能的重要性 在现代应用开发中,数据库查询是最常见的操作之一。随着数据量的增加和业务复杂度的提升,数据库查询的性能优化显得尤为重