关于计算机算法发展至今,已有很多不同的分类,目前运用最多是泛化群智能优化算法。譬如:粒子群优化算法(PSO)、鲸鱼优化算法(WOA)、灰狼优化算法(GWO)、蜻蜓优化算法(DA)、宇宙优化算法(MVO)、飞蛾扑火优化算法(MFO)、蚱蜢优化算法等。

关于这些算法的具体讲解,我们都可以在不同的学习网站上浏览到,如:CSDN、知乎等。对于具体算法的讲解,我这里不做赘述,想在这里叙述一下这些算法的共同规律,以便帮助同学对这部分内容有更好的理解。

群智能优化算法的共同点:

1、随机初始化

function X=initialization(SearchAgents_no,dim,ub,lb)%SearchAgents_no为种群数量;dim为解决问题的维度;ub变量上界;lb变量下界Boundary_no= size(ub,2); % numnber of boundaries% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1X=rand(SearchAgents_no,dim).*(ub-lb)+lb;
end% If each variable has a different lb and ub
if Boundary_no>1for i=1:dimub_i=ub(i);lb_i=lb(i);X(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;end
end

对于一个我们要解决的问题,首先要清楚解决问题的维度,可以粗浅理解为几个X,例如我们有两个X(X1,X2),则我们要解决的问题的维度即为2,在源代码中,我们要规定变量X的范围,不同的X可以有不同的范围,当然根据实际问题,所有变量(X1,X2,......,Xn)的范围也可一致。在上面代码中所呈现的就是lb与ub,在上面的代码中,群数量被规定为SearchAgents_no,一般原始算法中的种群数量为30,则随机初始化过程的结果,可以理解为30行,n列(解决问题的维度为n)的矩阵。

在设置过程中,还有一个重要的参数---最大迭代次数,即为Max_iteration。算法的终止条件有两个,一个为收敛精度(在一定时间内,收敛下降度没有超过设置阈值,其实就是已经差不多最优了,没有必要继续进行下去了。);另一个就是最大迭代次数,一般算法中均以此作为最后的迭代终止条件。具体的数值可以根据相应的参考文献,参照设置。

对于一个具体问题,问题的维度(dim),变量的上下边界,种群数量可以根据实际情况设置,在原始代码提出的时候,会有一系列的测试函数来进行验证。、

[lb,ub,dim,fobj]=Get_Functions_details(Function_name);

上面的代码即为从测试函数中提取维度、变量上下边界,和目标函数。关于目标函数,在下面的内容中具体阐述。

2、算法的具体过程

在算法进入迭代循环之前,也就是不断寻优过程之前,会对之前随机化初始矩阵进行适应度计算,如果种群数量为30,则有30个适应度值,通过比较它们的大小,将最小(或最大,一般为最小)作为初始的最佳适应度值,进入后续的迭代寻优中进行计算。

for i=1:size(Positions,1)Fitness(1,i)=fobj(Positions(i,:));
end

上面的代码展示的就是,在迭代寻优之前,对所有种群进行适应度值的计算。

值得一提的是适应度值的概念,可以简单理解为每个种群(每个行向量)通过目标函数公式,计算后数值的大小。

2.1 全局探索与局部开发

全局探索和局部开发两个阶段决定着算法的搜寻质量,两者互联互通,先进行全局大范围的搜索,在进行到一定阶段后,再执行小范围(局部)的精确寻优。至于具体如何进行全局搜索和局部开发,每种算法的逻辑思路不同,可结合代码具体分析。全局探索和局部开发之间存在一个过渡,即算法执行到何时,由全局探索转向局部开发。这个过渡阶段,几乎存在于每个算法逻辑之中。这里以HHO(哈里斯鹰)算法和SSA(樽海鞘)算法为例进行介绍。

在HHO算法中,猎物的能量被用来完成这个过渡过程,它的模型如下所示:

上式中,E 代表猎物的逃逸能量, E0 表示能量强度的初始状态。T为最大迭代次数,t为算法实际迭代次数,作为常规HHO的停止准则。

在SSA算法中,

上式中,t代表当前迭代,T表示迭代的最大数。 参数具有重要作用,可以在探索和开发趋势之间建立一个适当的平衡。

以上就是两种算法由全局探索向局部开发阶段过渡的具体表现形式。不同的算法依据逻辑的不同,过渡形式也不尽相同。

至于说全局探索和局部开发的具体实现,各种算法就是八仙过海各显神通了。目前大多数泛化群智能算法都是依据生物的觅食或者生存/生活规律总结而来的。大家可以参考各种算法的原始论文,里面有详细解读。这里简单举例樽海鞘算法。

while l<Max_iter+1/设置的最大迭代限制c1 = 2*exp(-(4*l/Max_iter)^2); % Eq. (3.2) in the paper/全局探索和局部开发过渡for i=1:size(SalpPositions,1)SalpPositions= SalpPositions';if i<=N/2   /这里根据樽海鞘的觅食特性将种群分为两类,分别为领导者和追随者,首先进行领导者的位置更新。for j=1:1:dimc2=rand();c3=rand();%%%%%%%%%%%%% % Eq. (3.1) in the paper %%%%%%%%%%%%%%if c3<0.5 SalpPositions(j,i)=FoodPosition(j)+c1*((ub(j)-lb(j))*c2+lb(j));elseSalpPositions(j,i)=FoodPosition(j)-c1*((ub(j)-lb(j))*c2+lb(j));end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%endelseif i>N/2 && i<N+1   /再次进行追随者的位置更新。point1=SalpPositions(:,i-1);point2=SalpPositions(:,i);SalpPositions(:,i)=(point2+point1)/2; % % Eq. (3.4) in the paperendSalpPositions= SalpPositions';endfor i=1:size(SalpPositions,1)  /更新完成后,进行边界条件的限制界定。Tp=SalpPositions(i,:)>ub';Tm=SalpPositions(i,:)<lb';SalpPositions(i,:)=(SalpPositions(i,:).*(~(Tp+Tm)))+ub'.*Tp+lb'.*Tm;SalpFitness(1,i)=fobj(SalpPositions(i,:));if SalpFitness(1,i)<FoodFitnessFoodPosition=SalpPositions(i,:);FoodFitness=SalpFitness(1,i);endendConvergence_curve(l)=FoodFitness;/将得到的个体的适应度值进行储存,放置在收敛曲线中l = l + 1;/标记迭代次数,迭代累计。
end

当执行while的循环中,个体的适应度值不断进行比较。迭代完成后,得出最佳的适应度值。

到这里,算法的整个流程大体清楚,主要参数和流程如上所述。

上面有提到过目标函数问题。针对不同的实际问题,自然目标函数的设置不一样,需要自行编写相关程序。为了方便对算法性能进行测试,已有相关学者编写了标准测试函数。

function [lb,ub,dim,fobj] = Get_Functions_details(F)switch Fcase 'F1'fobj = @F1;lb=-100;ub=100;dim=30;case 'F2'fobj = @F2;lb=-10;ub=10;dim=10;case 'F3'fobj = @F3;lb=-100;ub=100;dim=10;endend% F1function o = F1(x)
o=sum(x.^2);
end% F2function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end% F3function o = F3(x)
dim=size(x,2);
o=0;
for i=1:dimo=o+sum(x(1:i))^2;
end
end

上面展示的是F1到F3,三个标准测试函数。可以看到在Get_Functions_details中,我们读取了函数的边界、维度、目标函数,这里的目标函数运用了@的技巧,具体的函数形式也以 function o = F(x) 的形式给出。

大概的算法流程基本如此,有需要一些算法程序,或者不懂的可以私信讨论,一起学习。

关于单目标群智能算法的一些思考相关推荐

  1. 2018-3-23论文一种新的群智能算法--狼群算法(框架结构+感想一点点)

    一.文章的总体的结构 中文摘要:  总体的说提出了一种算法,并应用与15个基准函数---得出结论 英文摘要: 0     引言------ 各个群智能算法的列举+解释群智能算法的好处,本质 1     ...

  2. 基于群智能算法的函数最值优化问题

    基于群智能算法的函数最值优化问题 摘要 针对求解函数的极值问题的群智能算法,大部分函数在定义域内都可以通过微分的方式求得极值点和找到最值.但是存在一些测试函数,他们的最值用求解的微分的方式只能使得计算 ...

  3. 【人工智能】群智能算法

    群智能概述 群(swarm):某种交互作用的组织或agent的结构集合.人们把群居昆虫的集体行为称作"群智能",即低智能的主体通过合作表现出高智能行为的特性. 群智能算法是一种基于 ...

  4. 人工智能:群智能算法的一般框架、特点和不足

    一般框架 输入:解空间的初始种群 输出:最佳个体 步骤1:初始化种群规模.迭代次数等参数: 步骤2:在解空间中随机初始化种群: 步骤3:判断是否满足终止条件,如果不满足则继续进行迭代: 步骤4:计算当 ...

  5. 介绍一种新的群智能算法---黏菌算法

    一种新的群智能算法-黏菌算法 介绍一种新的群智能算法-黏菌算法 近些年群智能算法由于其效率较高,使用方便的优点引起了广大科研者的关注与兴趣.最近看文献,温州大学的李世民(现在去复旦读研究生了)提出了一 ...

  6. 蝙蝠算法c语言,一种新颖的群智能算法:飞蛾扑火优化算法

    李志明+莫愿斌+张森 摘要 飞蛾扑火优化(MFO)算法是一种新颖的群智能优化算法,该算法的主要灵感来源于飞蛾在自然界中被称为横向定位的飞行方式.作为一种新提出的仿生群智能优化算法,分析了飞蛾扑火优化算 ...

  7. 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...

    " 本篇文章采用10种常见的和不常见的混沌映射用于优化群智能算法,代码可一键切换,可用于所有智能算法优化,本篇文章以灰狼算法为例进行介绍" 本文涉及10种混沌映射算法,用于在初始化 ...

  8. 2018-3-13 目标改动---智能算法

    早上去了办公室,汇报.----------------------------结论就是自己跑偏了.------------------------------非结构化数据的研究 现在的自己要开始智能算 ...

  9. 群智能算法改进第四期-改进灰狼优化算法

    1.写在前面 该系列为改进智能优化算法,欢迎私信一起交流问题,更多的改进算法可查看往期的推文.有问题或者需要其他建议的话,非常欢迎后台私信交流,共同进步,如若出现违反学术道德的情况与本博客以及作者无关 ...

最新文章

  1. np.max()和np.argmax()
  2. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux
  3. 常说的手机刷新率60Hz、120Hz有什么不同?
  4. JFreeChart(一)之架构
  5. 命令行窗口常用的一些小技巧
  6. SpringBoot + ShardingSphere 秒级分库分表!
  7. Tween Animation----Translate位置移动动画
  8. 第一:Python发送邮件时定义文本乱码
  9. cc++编译链接过程
  10. 什么是闭包?如何理解及使用闭包?
  11. 微信抢红包插件与Android辅助功能
  12. 多益网络社招iq_18年多益秋招iq测试题
  13. java代码控制电脑发出警报_java – 如何使用警报构建器对话框显示消息
  14. ffmpeg mp4切片ts加密
  15. matlab 定时器开始无法停止,计时器程序无法停止计时
  16. torch.atan2函数详细解答
  17. android layout布局 有哪些,Android 常用布局 介绍与使用
  18. 学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)
  19. 【微服务设计】第二篇 :演化式架构师
  20. linkedin 分享_如何在LinkedIn上记录和显示您的名字发音

热门文章

  1. 适合Android进阶人群的全套系列学习资料,限时免费开源
  2. IDEA无法删除鼠标选取代码区域解决方法
  3. Java课程设计——饭卡管理系统(javaSwing、JavaFX、MySQL)附源代码
  4. .net6.0wpf如何使用winform控件
  5. Doip诊断开发之静态IP诊断流程分析
  6. 重庆赛区 ▏2020年高教社杯全国大学生数学建模竞赛重庆赛区获奖名单
  7. 帮我写一篇关于DTW算法的综述
  8. STATA 图片编辑器导出为PDF格式 中文乱码
  9. 开曼群岛Cayman Islands
  10. 查询mac地址所属厂家的网站