“智能算法”是指在工程实践中,经常会接触到一些比较“新颖”的算法或理论,比如
模拟退火,
遗传算法,
禁忌搜索,
神经网络,
天牛须搜索算法,
麻雀搜索算法,蜣螂优化算法等。这些算法或理论都有一些共同的特性,比如模拟自然过程。它们在解决一些复杂的
工程问题时大有用武之地。
智能算法研究
这些算法都有什么含义?首先给出个局部搜索,模拟退火,
遗传算法,禁忌搜索的形象比喻:
为了找出地球上最高的山,一群有志气的
兔子们开始想办法。
1.兔子朝着比现在高的地方跳去。他们找到了不远处的最高山峰。但是这座山不一定是
珠穆朗玛峰。这就是局部搜索,它不能保证
局部最优值就是
全局最优值。
2.兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝最高方向跳去。这就是模拟退火。
3.兔子们吃了
失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的
使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。这就是
遗传算法。
4.
兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是
禁忌搜索。
智能算法概述
智能优化算法要解决的一般是最优化问题。
最优化问题可以分为(1)求解一个函数中,使得
函数值最小的
自变量取值的函数优化问题和(2)在一个
解空间里面,寻找
最优解,使
目标函数值最小的
组合优化问题。典型的组合优化问题有:
旅行商问题(Traveling Salesman Problem,
TSP),加工调度问题(Scheduling Problem),0-1
背包问题(Knapsack Problem),以及
装箱问题(Bin Packing Problem)等。
优化算法有很多,经典算法包括:有
线性规划,
动态规划等;改进型局部
搜索算法包括
爬山法,
最速下降法等,本文介绍的模拟退火、
遗传算法以及
禁忌搜索称作指导性
搜索法。而神经网络,混沌搜索则属于系统动态演化方法。
优化思想里面经常提到
邻域函数,它的作用是指出如何由当前解得到一个(组)新解。其具体实现方式要根据具体
问题分析来定。
一般而言,局部搜索就是基于贪婪思想利用
邻域函数进行搜索,若找到一个比现有值更优的解就弃前者而取后者。但是,它一般只可以得到“局部
极小解”,就是说,可能这只兔子登“
登泰山而小天下”,但是却没有找到珠穆朗玛峰。而模拟退火,遗传算法,禁忌搜索,神经网络等从不同的角度和策略实现了改进,取得较好的“全局
最小解”。
算法分类
模拟退火算法
模拟退火算法的依据是固体物质退火过程和组合优化问题之间的
相似性。物质在加热的时候,粒子间的
布朗运动增强,到达一定强度后,固体物质转化为液态,这个时候再进行退火,粒子
热运动减弱,并逐渐趋于有序,最后达到稳定。
模拟退火的解不再像局部搜索那样最后的结果依赖初始点。它引入了一个
接受概率p。如果新的点(设为pn)的
目标函数f(pn)更好,则p=1,表示选取新点;否则,接受概率p是当前点(设为pc)的目标函数f(pc),新点的目标函数f(pn)以及另一个
控制参数“温度”T的函数。也就是说,模拟退火没有像局部搜索那样每次都贪婪地寻找比现在好的点,目标函数差一点的点也有可能接受进来。随着算法的执行,
系统温度T逐渐降低,最后终止于某个低温,在该温度下,系统不再接受变化。
模拟退火的典型特征是除了接受目标函数的改进外,还接受一个衰减极限,当T较大时,接受较大的衰减,当T逐渐变小时,接受较小的衰减,当T为0时,就不再接受衰减。这一特征意味着模拟退火与局部搜索相反,它能避开局部极小,并且还保持了局部搜索的通用性和简单性。
在物理上,先加热,让分子间互相碰撞,变成无序状态,内能加大,然后降温,最后的分子次序反而会更有序,内能比没有加热前更小。就像那只兔子,它喝醉后,对比较近的山峰视而不见,迷迷糊糊地跳一大圈子,反而更有可能找到
珠峰。
值得注意的是,当T为0时,模拟退火就成为局部搜索的一个特例。
procedure simulated annealing
begin
t:=0;
initialize temperature T
select a current string vc at random;
evaluate vc;
repeat
repeat
select a new string vn in the neighborhood of vc; (1)
if f(vc)<f(vn)
then vc:=vn;
else if random [0,1] <exp ((f (vn)-f (vc))/T) (2)
then vc:=vn;
until (
termination-condition) (3)
T:=g(T,t); (4)
T:=t+1;
until (stop-criterion) (5)
end;
上面的程序中,关键的是(1)新状态产生函数,(2)新状态接受函数,(3)抽样
稳定准则,(4)退温函数,(5)
退火结束准则(简称三函数两准则)是直接影响优化结果的主要环节。虽然实验结果证明初始值对于最后的结果没有影响,但是
初温越高,得到高质量解的概率越大。所以,应该尽量选取比较高的初温。
上面关键环节的选取策略:
(1)状态产生函数:候选解由当前解的邻域函数决定,可以取互换,插入,
逆序等操作产生,然后根据
概率分布方式选取新的解,概率可以取
均匀分布、
正态分布、高斯分布、
柯西分布等。
(2)状态接受函数:这个环节最关键,但是,实验表明,何种接受函数对于最后结果影响不大。所以,一般选取min [1, exp ((f (vn)-f (vc))/T)]。
(3)抽样稳定准则:一般常用的有:检验目标函数的均值是否稳定;连续若干步的
目标值变化较小;规定一定的步数;
(4)退温函数:如果要求温度必须按照一定的比率下降,SA算法可以采用,但是温度下降很慢;快速SA中,一般采用 。经常用的是 ,是一个不断变化的值。
(5)退火结束准则:一般有:设置终止温度;设置
迭代次数;搜索到的
最优值连续多次保持不变;检验系统熵是否稳定。
为了保证有比较优的解,算法往往采取慢降温、多抽样、以及把“终止温度”设的比较低等方式,导致算法
运行时间比较长,这也是模拟退火的最大缺点。人喝醉了酒办起事来都不利索,何况兔子?
遗传算法
“
物竞天择,适者生存”,是
进化论的基本思想。遗传算法就是模拟自然界想做的事。遗传算法可以很好地用于优化问题,若把它看作对自然过程高度理想化的模拟,更能显出它本身的优雅——虽然
生存竞争是残酷的。
遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的
参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的
遗传操作;
参数编码、初始群体的设定、
适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。作为一种新的
全局优化搜索算法,遗传算法以其简单通用、
健壮性强、适于
并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,取得了良好效果,并逐渐成为重要的智能算法之一。
procedure genetic algorithm
begin
initialize a group and evaluate the fitness value ; (1)
while not convergent (2)
begin
select; (3)
if random[0,1]<pc then
crossover; (4)
if random (0,1)<pm then
mutation; (5)
end;
end
上述程序中有五个重要的环节:
(1)编码和初始群体的生成:GA在进行搜索之前先将解空间的解
数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。然后随机产生N个初始串结构数据,每个串结构数据称为一个个体, N个体构成了一个群体。GA以这N个串结构数据作为初始点开始迭代。
比如,
旅行商问题中,可以把商人走过的路径进行编码,也可以对整个图矩阵进行编码。
编码方式依赖于问题怎样描述比较好解决。初始群体也应该选取适当,如果选取的过小则
杂交优势不明显,算法性能很差(数量上占了优势的老鼠进化能力比老
虎强),群体选取太大则计算量太大。
(2)检查算法收敛准则是否满足,
控制算法是否结束。可以采用判断与
最优解的适配度或者定一个迭代次数来达到。
(3)适应性值评估检测和选择:适应性函数表明个体或解的优劣性,在程序的开始也应该评价适应性,以便和以后的做比较。不同的问题,适应性函数的定义方式也不同。根据适应性的好坏,进行选择。选择的目的是为了从当前群体中选出优良的个体,使它们
有机会作为
父代为下一代繁殖子孙。
遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。选择实现了达尔文的适者生存原则。
(4)杂交:按照杂交概率(pc)进行杂交。杂交操作是遗传算法中最主要的
遗传操作。通过杂交操作可以得到新一代个体,新个体组合了其父辈个体的特性。杂交体现了
信息交换的思想。
可以选定一个点对染色体串进行互换,插入,逆序等杂交,也可以随机选取几个
点杂交。杂交概率如果太大,种群更新快,但是高适应性的个体很容易被淹没,概率小了搜索会停滞。
(5)
变异:按照变异概率(pm)进行变异。变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。同
生物界一样,GA中变异发生的概率很低。变异为新个体的产生提供了机会。
变异可以防止有效基因的缺损造成的
进化停滞。比较低的变异概率就已经可以让基因不断变更,太大了会陷入
随机搜索。想一下,生物界每一代都和上一代差距很大,会是怎样的可怕情形。
就像自然界的变异适和任何物种一样,对变量进行了编码的
遗传算法没有考虑函数本身是否可导,是否连续等性质,所以
适用性很强;并且,它开始就对一个种群进行操作,隐含了
并行性,也容易找到“全局
最优解”。
禁忌搜索算法
为了找到“全局最优解”,就不应该执着于某一个特定的区域。局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地方寻找。就这样,一大圈后,把找到的几个山峰一比较,珠穆朗玛峰脱颖而出。
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是
禁忌搜索中“禁忌表(tabu list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu
length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是
华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当一个有兔子留守的地方优越性太突出,超过了“best to far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration criterion)”。这三个概念是
禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。
伪码表达:
procedure tabu search;
begin
initialize a string vc at random,clear up the tabu list;
cur:=vc;
repeat
select a new string vn in the neighborhood of vc;
if va>best_to_far then {va is a string in the tabu list}
begin
cur:=va;
let va take place of the oldest string in the tabu list;
best_to_far:=va;
end else
begin
cur:=vn;
let vn take place of the oldest string in the tabu list;
end;
until (termination-condition);
end;
以上程序中有关键的几点:
(1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu list,也可以把和
当前值在同一“
等高线”上的都放进tabu list。
(2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。
(3)上述
程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的“死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。
(4)终止准则:和模拟退火,
遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步保持不变时,终止搜索;
禁忌搜索是对人类
思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。
人工神经网络
人工神经网络(Artificial Neural Network,
ANN)
神经网络从名字就知道是对人脑的模拟。它的
神经元结构,它的构成与
作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到全面的地步。和
冯·诺依曼机不同,神经
网络计算非数字,非精确,高度并行,并且有
自学习功能。
生命科学中,
神经细胞一般称作神经元,它是整个神经结构的最
基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有
细胞核,称作
细胞体,像手指的称作
树突,是信息的输入通路,像手臂的称作
轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高出一定值,就会引起神经元的激发,此神经元就会通过轴突传出
电信号。
而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素:(1)形式定义人工神经元;(2)给出人工神经元的
连接方式,或者说给出
网络结构;(3)给出人工神经元之间
信号强度的定义。
历史上第一个
人工神经网络模型称作M-P模型,非常简单:
其中,表示神经元i在t时刻的状态,为1表示
激发态,为0表示抑制态;是神经元i和j之间的连接强度;表示神经元i的阈值,超过这个值神经元才能激发。
这个模型是最简单的
神经元模型。但是功能已经非常强大:此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前
数字计算机的任何工作。
以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个
半平面,却不能够选取特定的一部分。而解决的办法就是“多层前向网路”。
为了让这种网络有合适的
权值,必须给网络一定的激励,让它自己学习,调整。一种方法称作“向后传播算法(Back Propagation,BP)”,其基本思想是考察最后输出解和
理想解的差异,调整权值,并把这种调整从
输出层开始向后推演,经过中间层,达到
输入层。
可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有
直接联系,这里学习的作用是根据神经元之间激励与抑制的关系,改变它们的作用强度。
学习样本中的任何样品的信息都包含在网络的每个权值之中。
BP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。这就又包含了前文所说的“
最小值”问题。一般的BP算法采用的是局部搜索,比如最速下降法,
牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,
遗传算法等。当前向网络采用
模拟退火算法作为
学习方法的时候,一般成为“波尔兹曼网络”,属于
随机性神经网络。
在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。如果没有了监督,
人工神经网络该怎么学习?
就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利;
人工神经网络还有
反馈网络如Hopfield网络,它的神经元的
信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量
函数值不断下降,最后能给出一个能量比较低的解。这个思想和模拟退火差不多。
人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。这种思想已经和冯·诺依曼模型很不一样。
粒子群算法
粒子群优化算法(PSO)是一种
进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的
行为研究 。该算法最初是受到飞鸟集群活动的
规律性启发,进而利用
群体智能建立的一个简化模型。
粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在
问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
PSO同遗传算法类似,是一种基于迭代的优化算法。
系统初始化为一组随机解,通过迭代搜寻
最优值。但是它没有遗传算法用的交叉(crossover)以及变异(mutation),而是粒子在
解空间追随最优的粒子进行搜索。同遗传算法比较,PSO的优势在于简单容易实现并且没有许多参数需要调整。已广泛应用于函数优化,神经网络训练,模糊
系统控制以及其他遗传算法的
应用领域。
PSO模拟鸟群的
捕食行为。设想这样一个场景:一群鸟在
随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的
最优策略是什么呢。最简单有效的就是搜寻离食物最近的鸟的周围区域。
PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在
解空间中搜索。
PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到
最优解极值全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是
局部极值。
天牛须搜索算法
天牛须搜索算法(Beetle Antennae Search Algorithm,BAS)
天牛须搜索算法是一种生物启发的智能优化算法,是受到
天牛觅食原理启发而开发的算法,其
仿生原理如下:
当天牛觅食时,天牛并不知道实物在哪里,而是根据食物气味的强弱来觅食。天牛有两只长触角,如果左边触角收到的气味强度比右边大,那下一步天牛就往左飞,否则就往右飞,依据这一原理天牛可以找到食物。
食物的气味就相当于一个函数,这个函数在
三维空间每个
点值都不同,天牛两个须可以采集自身附近两点的气味值,天牛的目的是找到全局气味值最大的点(即食物所在位置)。仿照天牛的行为,我们设计了该智能优化算法进行函数最优化求解。
dir=rands(k,1);dir=dir/norm(dir);%须的方向
xleft=x+dir*d0/2;xright=x-dir*d0/2;%须的坐标
fleft=f(xleft);fright=f(xright);%须的气味强度
x=x-step*dir*sign(fleft-fright);%下一步位置
天牛在三维空间运动,而天牛须搜索需要对任意
维函数都有效才可以。因而,天牛须搜索是对天牛生物行为在任意维空间的推广。采用如下模型描述天牛须搜索算法的寻优策略:
2. 天牛
步长step与两须之间距离d0的比值是个固定常数即step=c*d0其中c是常数。即,大天牛(两须距离长)走大步,小天牛走小步。
3. 天牛飞到下一步后,头的朝向是随机的。
麻雀搜索算法
麻雀搜索算法(Sparrow Search Algorithm, SSA)
麻雀搜索算法是一种群智能优化算法,主要是受麻雀的
觅食行为和反捕食行为的启发而提出的,其仿生原理如下:
在
麻雀觅食的过程中,分为发现者和加入者,发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。为了
获得食物,麻雀通常可以采用发现者和加入者这两种行为策略进行觅食。种群中的个体会监视群体中其它个体的行为,并且该种群中的攻击者会与高摄取量的同伴争夺食物资源,以提高自己的捕食率。此外,当麻雀种群受到捕食者的攻击时会做出反捕食行为。仿照麻雀的这些行为,我们设计了该算法进行函数最优化求解。具体求解方式如下:
(1)在SSA中,具有较好
适应度值的发现者在搜索过程
中会优先获取食物。此外,因为发现者负责为整个麻雀种群寻找食物并为所有加入者提供觅食的方向。因此,发现者可以获得比加入者更大的觅食
搜索范围。
(2)对于加入者,如前面所描述,在觅食过程中,一些加入者会时刻监视着发现者。或者同发现者进行食物的争夺或者围绕在发现者周围进行觅食。
(3)当整个麻雀种群受到捕食者威胁时,会进行反捕食行为:处在种群外围的麻雀极其容易受到捕食者的攻击,需要不断地调整位置以此来获得更好的位置。与此同时,处在种群中心的麻雀会去接近它们相邻的同伴,这样就可以尽量减少它们的危险区域。
蜣螂优化算法
蜣螂优化算法(Dung Beetle Optimizer, DBO)
蜣螂优化算法是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。具有收敛速度快,求解精度高的特点。可以将该算法应用到更为广阔的场景,如无人机路径规划,神经网络参数优化等各类优化问题
总结
模拟退火,
遗传算法,禁忌搜索,神经网络和
天牛须搜索算法在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点:都是模拟了自然过程。模拟退火思路源于物理学中固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,
禁忌搜索模拟了人类有
记忆过程的智力过程,神经网络更是直接模拟了人脑,
天牛须搜索算法则是模拟了天牛在寻找事物或配偶时的搜索过程。麻雀搜索算法是模拟了麻雀的觅食行为和反捕食行为。蜣螂优化算法模拟了蜣螂的生活习性和自然特性。
它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。
这几种智能算法有别于一般的按照
图灵机进行精确计算的程序,尤其是
人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计的计算机有着广阔的发展前景