【智能优化算法】人工原生动物优化器(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科研小白的个人公众号(即文章下方二维码),并回复:智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

下载好了annaconda,但是在创建一个新的Conda虚拟环境报错

文章目录 问题描述&#xff1a;解决方案1.生成一个配置文件 问题总结 问题描述&#xff1a; ProxyError(MaxRetryError(“HTTPSConnectionPool(host‘repo.anaconda.com’, port443): Max retries exceeded with url: /pkgs/pro/win-64/repodata.json.bz2 (Caused by ProxyErr…

基于深度学习的智能停车场车牌识别计费系统(完整程序+训练数据集+开题报告+论文))

摘要 本篇论文研究的是基于车牌识别技术的智能停车场管理系统&#xff0c;采用基于深度学习的车牌识别算法&#xff0c;通过卷积神经网络对车牌图像进行处理和分析&#xff0c;实现车牌字符的识别和车牌信息的提取。同时&#xff0c;本文还设计了一个智能停车场管理系统&#x…

2024最新版守约者二级域名分发系统

主要功能 二级域名管理&#xff1a;我们的系统提供全面的二级域名管理服务&#xff0c;让您轻松管理和配置二级域名。 域名分发&#xff1a;利用我们先进的域名分发技术&#xff0c;您可以自动化地分配和管理域名&#xff0c;确保每个用户或客户都能及时获得所需的域名资源。 自…

Java基础_20常用类相关的东西和枚举

回顾 1.字节输入流: FileInputStream字节输出流: FileOutputStream字节缓冲输入流: BufferedInputStream字节缓冲输出流: BufferedOutputStream字符输入流: FileReader字符输出流: FileWriter字符缓冲输入流: BufferedReader字 符缓冲输出流: BufferedWriter2.写…

【MATLAB 分类算法教程】_1遗传算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例1:遗传算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2. 读取数据代码3. 数据预处理代码4. 利用遗传算法GA求解最佳的SVM参数c和g代码5. 根据最佳的参数进行SVM模型训练代码6. SVM模型预测代码7. 准确率分析以及分类结果对比作图代码本文以红酒数…

python如何保存数据和读取数据

python要保存输入的数据&#xff0c;一般会保存在模块json中&#xff0c;json中的数据可以与使用其他编程语言的人共享。 要保存数据到json&#xff0c;Python需要用到json模块 假定要保存一个序列&#xff0c;示例代码如下 from pathlib import Path import jsonnumbers[2,…

前端开发攻略---Vue实现防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

1、演示 2、水印的目的 版权保护&#xff1a;水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息&#xff0c;以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时&#xff0c;可以追溯到原始作者或版权所有者&#xff0c;从而加强版权保护。 身份识…

PHP Array and string offset access syntax with curly braces is deprecated

PHP 在 7.4.0 版本中引入了关于使用大括号 {} 来访问数组和字符串的偏移量的弃用警告。这意味着虽然 PHP 7.4 之前的版本可能仍然支持这种语法&#xff0c;但在 PHP 7.4 及其后续版本中&#xff0c;当你使用大括号来访问数组或字符串的偏移量时&#xff0c;PHP 会发出弃用警告。…

流程图步骤条

1.结构 <ul class"stepUl"> <li class"stepLi" v-for"(item, index) in stepList" :key"index"> <div class"top"> <p :class"{active: currentState > item.key}">{{ item.value }}…

Gradle 实战 - 启动main函数-ApiHug准备-工具篇-012

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

【ELK】ELK企业级日志分析系统

搜集日志&#xff1b;日志处理器&#xff1b;索引平台&#xff1b;提供视图化界面&#xff1b;客户端登录 日志收集者&#xff1a;负责监控微服务的日志&#xff0c;并记录 日志存储者&#xff1a;接收日志&#xff0c;写入 日志harbor&#xff1a;负责去连接多个日志收集者&am…

AcWing 795. 前缀和——算法基础课题解

AcWing 795. 前缀和 题目描述 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r,。 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 r 个数的和。 输入格式 第一行包含两个整数 n 和 m。 第二行包含 n 个整数&#xff0c;表…

PCL 高斯滤波(C++详细过程版)

目录 一、概述二、代码实现三、结果展示1、滤波前2、滤波后3、对比PCL 高斯滤波(C++详细过程版)由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 高斯滤波在PCL里有现成的调用函数,具体算法原理和实现代码见:

2路音频解码器JR-AD201

音频解码器 详细介绍 JR-AD201 2路音频解码器&#xff0c;支持RF/ASI/IP输入&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频&#xff0c;输出&#xff1a;2路模拟立体声&#xff0c;2路AES/EBU。 产品特点 支持多种输入方式RF/IP/ASI 接口丰富&#xff0c;AES/EBU/模拟立体声/A…

CSS盒模型(详讲)

目录 概述&#xff1a; 内容区&#xff08;content&#xff09;&#xff1a; 内边距&#xff08;paddingj&#xff09;&#xff1a; 前言&#xff1a; 设置内边距&#xff1a; 边框&#xff08;border&#xff09;&#xff1a; 前言&#xff1a; 示例&#xff1a; 外边…

Android开发——布局

LinearLayout RelativeLayout 所谓父子容器&#xff0c;就是嵌套容器时存在的关系。 根据兄弟容器定位需要传入兄弟的id。 通用属性 FrameLayout (覆盖布局&#xff09; TableLayout (表格&#xff09; GridLayout (网格) 子控件属性

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前&#xff1a; C语言传统的处理错误的方式与带来的弊端&…

win10清华源按装OPENCV和其他软件

今天按装opencv卡卡的&#xff0c;老掉线&#xff0c;想起了以前在树莓派用清华源安装opencv的时候的场景&#xff0c;那速度&#xff0c;咻咻咻的&#xff0c;苏帕快&#xff0c;于是我就果断放弃现在的&#xff0c;加上清华源的连接&#xff0c;这速度&#xff0c;超级流畅。…

Spring(三)

1. Spring单例Bean是不是线程安全的? Spring单例Bean默认并不是线程安全的。由于多个线程可能访问同一份Bean实例&#xff0c;当Bean的内部包含了可变状态&#xff08;mutable state&#xff09;即有可修改的成员变量时&#xff0c;就可能出现线程安全问题。Spring容器不会自动…

基于SpringBoot的“线上教学平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“线上教学平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 线上教学平台结构图 管理员登录界面图 学员管理界…