图图已经为大家推送过了遗传算法、粒子群算法和模拟算法等经典算法(见个人主页介绍), 但还没有就这个领域做系统的概述。 今天,就来为大家总体介绍一下智能优化算法
。
智能优化算法,与其字面意思一样,就是利用"智能
"进行优化的算法。受到人类智能、生物群体社会性或自然现象规律的启发,人类发明了很多算法来解决任务分配、生产调度等复杂优化问题——这便是智能优化算法。要了解这个领域,我们首先需要理解一些概念。
智能(Intelligence):我们常常提到“智能”两个字,但智能的准确定义究竟是什么呢?在不同领域,“智能”有着不同的解释,根据维基百科的资料,通常来说:
智能指感知信息并将其化为知识自适应地应用于环境中的能力。
优化(optimization):智能优化算法的提出是为了解决优化问题,优化即在满足一定条件的前提下,基于某种标准从可选集合中选择最佳元素或方案,使得某个或多个功能指标达到最优的过程。
启发式算法(Heuristic Algorithm):群智能算法一般都是启发式算法,即通过模拟和利用自然界中生物体的行为或自然现象的原理,采用经验的方法解决优化问题的算法。
在电子、通信、计算机、自动化、机器人、经济学和管理学等众多学科中,不断出现许多复杂的组合优化问题,面对这些大型优化问题,传统的优化方法(如牛顿法
、单纯形法
等)需要遍历整个搜索空间,无法在短时间内完成搜索,且容易产生搜索的“组合爆炸”。鉴于实际工程问题的复杂性、非线性、约束性以及建模困难等诸多难点,寻找高效的优化算法成为相关学科的重要研究内容,智能优化算法也就随之得到了广泛的研究。
传统的优化算法大多数是基于梯度下降的算法:
而智能优化算法的优化过程一般不涉及到梯度下降,通常采用直接搜索
、随机搜索
。例如在粒子群算法中粒子位置的更新:
一般来说,智能优化算法可以分为四大类
遗传算法
(Genetic Algorithm)和差分进化算法
(Differential Evolution)。蚁群算法
(Ant Colony Optimization)、粒子群算法
(Particle Swarm Optimization)和人工蜂群算法
(Artificial Bee Colony Optimization)。模拟退火算法
(Simulated Annealing)和引力搜索算法
(Gravitational Search Algorithm)。禁忌搜索
(Tabu Search )、和声搜索
(Harmony Search )、免疫算法
(Immune Algorithm)。除了上述具有代表性的典型算法,近年来也有很多新的智能优化算法被陆续提出,小编在这里对一些具有代表性的算法进行了整理:
总体来说,群智能类算法在新型智能优化算法里面占据了绝对多数,是研究新型智能优化算法的主流。
对于新型智能优化算法所使用的方法、针对的领域以及改进的聚焦点,小编也做了简单的统计,具体方法为:
结果如下图所示:
当然,最多的一类还是将智能优化算法应用在具体领域,但由于无法检索到具体数据,在此就不再列出啦。
在研究智能优化算法的过程中,小编也发现了一些名字很有趣的算法,在这里跟大家分享一下: - 帝国主义竞争算法,Imperialist Competitive Algorithm,2007 - 阴阳对优化,Yin-Yang-pair Optimization,2016 - 多元宇宙算法,Multi-Verse Optimizer,2016 - 最有价值运动员(MVP)算法,Most Valuable Player Algorithm,2017
别看这些算法的名字都很好玩,但背后都是有高质量SCI论文支撑的。如果大家对这些奇奇怪怪又可可爱爱的算法感兴趣,请关注个人主页的平台介绍。
说了这么多别人提出的算法,你是不是已经摩拳擦掌、跃跃欲试,准备提出自己专属的新型智能优化算法呢?小编这就根据自己的经验,以乌鸦搜索算法
为例,为大家总结一下提出新算法的一般流程。
首先看看基础的乌鸦搜索算法
主函数
format long; clear all; clc;
%% Parameter setting-------------------------------------------------------------------------------------------------
pop=50; % Population number
Max_i=500; % The maximum number of iterations
F_name='F3'; % Test function name,F1,F2,F3
%% Get function information-----------------------------------------------------------------------------------------
[lb,ub,F_obj,dim]=Test_Functions(F_name);
lb_v=lb.*ones( 1,dim ); % Boundary vector
ub_v=ub.*ones( 1,dim );
%% Initialization
for j=1 : pop
x_0( j, : )=lb_v + (ub_v - lb_v) .* rand( 1, dim );
fit_0(j )=F_obj(x_0(j, : ) ) ;
end
%% Call algorithm-----------------------------------------------------------------------------------------------------
[CSA_fMin,CSA_bestX,CSA_curve]=CSA(pop,Max_i,lb_v,ub_v,dim,F_obj,x_0,fit_0);
%% Draw iterative image----------------------------------------------------------------------------------------------
iter=[ 1:Max_i ];
% maker_idx=1:Max_i/10:(Max_i);
plot( iter,CSA_curve,'-s','Color',[71/255,120/255,185/255],'LineWidth',3,'MarkerSize',8,'MarkerFaceColor','w' )
hold on;
set(gca,'fontsize',20,'fontname','Times','FontWeight','bold');
title(strcat(F_name,' Objective space'),'fontsize',20,'fontname','Times','FontWeight','bold')
xlabel('Iteration')
ylabel('Best fitness obtained so far')
axis tight
(完整代码见文末)
下面看看我们该如何构造原创的优化算法
首先,你要有一个点子,制定专属的算法方案,重点是要确定算法中个体的迭代公式。(小编提供几个大胆的思路:资本主义灭亡算法,追求美女/帅哥算法,精准核打击算法......)
例如,在乌鸦搜索算法中,作者将乌鸦藏食和偷取其他乌鸦食物这一现象,抽象为下列公式:
之后,你要选择一些合适的测试算例。其中,数值算例可以选择Sphere、Ackley、Schaffer等经典的单峰、多峰和固定维度数值测试函数,也可以选择CEC会议
上提出来的复杂测试算例,而工程算例则可以选择焊接梁设计、减速器设计、压力容器设计等经典工程优化设计问题。(文末有CEC2020单目标测试集的获取方式)
数值算例以Ackley函数
为例,其公式为:
其中D
为问题维度,即优化变量的个数。函数图像如下图所示:
工程算例的典型案例为焊接梁设计
将工程问题抽象为数学问题,表达式为:
确定测试算例后,你需要在上面进行一系列的调整测试,来确定自己所提出算法中的最佳参数方案(如果你的方案中没有需要调整的超参数,那就跳过这一步!)
在乌鸦搜索算法中,可调参数有两个,即意识概率AP
和飞行长度fl
,不同的参数值对算法性能有较大的影响,下图就展示了fl
对于乌鸦搜索算法中个体搜索能力的影响:
通过一系列测试,原作者将其设定为AP=0.1, fl=2。
确定好了参数,之后你就需要找来一些对照算法,在之前确定的算例上测试你的算法和其他算法到底谁更好一些,并分析出算法好的话好在哪里。一般来说,对照算法应该覆盖上述四类,以及经典算法和最新算法,数量的话,越多越好! 通常,测试内容应包含:
如果经过测试,你的算法比其他算法效果要好,那么恭喜你,你的专属算法诞生啦!想一个炫酷的名字,然后写一篇文章或者专利吧!
全文结束
作者:WWJ | 编辑:图图