遗传算法和蚁群算法的比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全局优化报告——遗传算法和蚁群算法的比较
1 遗传算法
1.1 遗传算法的发展历史
遗传算法是一种模拟自然选择和遗传机制的寻优方法。
20 世纪60 年代初期,Holland 教授开始认识到生物的自然遗传现象与人工自适应系统行为的相似性。
他认为不仅要研究自适应系统自身,也要研究与之相关的环境。
因此,他提出在研究和设计人工自适应系统时,可以借鉴生物自然遗传的基本原理,模仿生物自然遗传的基本方法。
1967 年,他的学生Bagley 在博士论文中首次提出了“遗传算法” 一词。
到70 年代初,Holland 教授提出了“模式定理” ,一般认为是遗传算法的基本定理,从而奠定了遗传算法的基本理论。
1975 年,Holland 出版了著名的《自然系统和人工系统的自适应性》,这是第一本系统论述遗传算法的专著。
因此,也有人把1975 年作为遗传算法的诞生年。
1985 年,在美国召开了第一届两年一次的遗传算法国际会议,并且成立了国际遗传算法协会。
1989 年,Holland 的学生Goldberg
出版了《搜索、优化和机器学习中的遗传算法》,总结了遗传算法研究的主要成果,对遗传算法作了全面而系统的论述。
一般认为,这个时期的遗传算法从古典时期发展了现代阶段,这本书则奠定了现代遗传算法的基础。
遗传算法是建立在达尔文的生物进化论和孟德尔的遗传学说基础上的算法。
在进化论中,每一个物种在不断发展的过程中都是越来越适应环境,
物种每个个体的基本特征被后代所继承,但后代又不完全同于父代,这些新的变化,若适应环境,则被保留下来;否则,就将被淘汰。
在遗传学中认为,遗传是作为一种指令遗传码封装在每个细胞中,并以基因的形式包含在染色体中,每个基因有特殊的位置并控制某个特殊的性质。
每个基因产生的个体对环境有一定的适应性。
基因杂交和基因突变可能产生对环境适应性强的后代,通过优胜劣汰的自然选择,适应值高的基因结构就保存下来。
遗传算法就是模仿了生物的遗传、进化原理,并引用了随机统计原理而形成的。
在求解过程中,遗传算法从一个初始变量群体开始,一代一代地寻找问题的最优解,直到满足收敛判据或预先假定的迭代次数为止。
遗传算法的应用研究比理论研究更为丰富,已渗透到许多学科,并且几乎在所有的科学和工程问题中都具有应用前景。
一些典型的应用领域如下:(1)复杂的非线性最优化问题。
对具体多个局部极值的非线性最优化问题,传统的优化方法一般难于找到全局最优解;而遗传算法可以克服这一缺点,找到全局最优解。
(2)复杂的组合优化或整数规划问题。
大多数组合优化或整数规划问题属于NP 难问题,很难找到有效的求解方法;而遗传算法即特别适合解决这一类问题,能够在可以接受的计算时间内求得满意的近似最优解,如著名的旅行
商问题、装箱问题等都可以用遗传算法得到满意的解。
(3)工程应用方面。
工程方法的应用是遗传算法的一个主要应用领域,如管道优化设计、通风网络的优化设计、飞机外型设计、超大规模集成电路的布线等。
(4)计算机科学。
遗传算法广泛应用于计算机科学的研究,如用于图像处理和自动识别、文档自动处理、VLSI 设计等。
(5)生物学。
遗传算法起源于对生物和自然现象的模拟,现在又反过来用于生物领域的研究,如利用遗传算法进行生物信息学的研究等。
(6)社会科学。
遗传算法在社会科学的许多领域也有广泛应用,如人类行为规范进化过程的模拟、人口迁移模型的建立等
(7)经济领域。
经济学领域也用到遗传算法。
例如,国民经济预测模型、市场预测模型和期货贸易模型等。
遗传算法与神经网络相结合正成功地被应用于从时间序列分析来进行财政预算等。
1.2 遗传算法的基本原理遗传算法是一种基于自然选择和群体遗传机制的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖、杂交和突变现象。
在利用遗传算法求解问题时,问题的每个可能的解都被编码成一个“染色体”,即个体,若干个个体构成了群体 (所有可能解)。
在遗传算法开始时,总是随机地产生一些个体(即初始解) 。
根据预定的目标函数对每个个体进行评估,给出了一个适应度值。
基于此适应度值,选择个体用来复制下一代。
选择操作体现了“适者生存”的原理,“好”的个体被选择用来复制,而“坏”的个体则被淘汰。
然后选择出来的个体经过交叉和变异算子
进行再结合生成新的一代。
这一群新个体由于继承 了上一代的一些优良性状, 因而在性能上要优于上一代, 这样逐步朝 着更优解的方向进化。
因此, 遗传算法可以看成是一个由可行解组成 的群体逐步进化的过程。
图给出了简单遗传算法的基本过程。
下面介 绍遗传算法的编码及基本遗传操作过程。
1.2.1 编码 利用遗传算法求解问题时,首先要确定问题的目标函数和变量, 然后对变量进行编码。
这样做主要是因为在遗传算法中, 问题的解是 用数字串来表示的, 而且遗传算子也是直接对串进行操作的。
编码方 式可以分为二进制编码和实数编码。
若用二进制数表示个体, 则将二 进制数转化为十进制数的解码公式可以为
F (b i 1, b i 2 ,..., b il ) R i T i l R i
b ij 2j 1 1 2 2l 1 j 1
其中,(b i1,b i 2 ,..., b il ) 为某个个体的第 i 段,每段段长都为 l ,每个b ik 都是 0 或者 1,T i 和R i 是第 i 段分量 X i 的定义域的两个端点。
1.2.2 遗传操作
遗传操作是模拟生物基因的操作, 它的任务就是根据个体的适应 度对其施加一定的操作, 从而实现优胜劣汰的进化过程。
从优化搜索 的角度看,遗传操作可以使问题的解逐代的优化,逼近最优解。
遗传 操作包括以下三个基本遗传算子:选择、交叉、变异。
选择和交叉基 本上完成了遗传算法的大部分搜索功能, 变异增加了遗传算法找到最 接近最优解的能力。
1. 选择
选择是指从群体中选择优良的个体并淘汰劣质个体的操作。
它建 立在适应度评估的基础上。
适应度越大的个体, 被选择的可能性就越 大,它的“子孙”在下一代的个数就越多。
选择出来的个体被放入配 对库中。
目前常用的选择方法有轮赌盘方法(也称适应度比例法)、最佳个体保留法、期望值法、排序选择法、竞争法、线性标准化方法等。
2. 交叉交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作,交叉的目的是为了能够在下一代产生新的个体。
通过交叉操作,遗传算法的搜索能力得以飞跃性的提高。
交叉是遗传算法获得新优良个体的最重要的手段。
交叉操作是按照一定的交叉概率P c 在配对库中随机地选取两个个体进行的。
交叉的位置也是随机确定的。
交叉概率P c 的值一般取得很大,为
0.6~0.9 。
3. 变异
变异就是以很小的变异概率P m 随机地改变群体中个体的某些基
因的值。
变异操作的基本过程是:产生一个[ 0,1]之间的随机数rand ,如果rand P m ,则进行变异操作。
变异操作本身是一种局部随机搜索,与选择、交叉算子结合在一起,能够避免由于选择和交叉算子而引起的某些信息的永久性丢失,保证了遗传算法的有效性,使遗传算法具有局部的随机搜索能力,同时使得遗传算法能够保持群体的多样性,以防止出现未成熟收敛。
变异操作是一种防止算法早熟的措施。
在变异操作中,变异概率不能取值太大,如果P m 0. 5 ,遗传算法就退化为随机搜索,而遗传算法的一些重要的数学特性和搜索能力也就不复存在了。
1.3 基本步骤遗传算法的基本步骤如下:
1)在一定编码方案下,随机产生一个初始种群;
2)用相应的解码方法,将编码后的个体转换成问题空间的决策变量,并求得个体的适应值;
3)按照个体适应值的大小,从种群中选出适应值较大的一些个体构成交配池;
4)由交叉和变异这两个遗传算子对交配池中的个体进行操作,并形成新一代的种群;
5)反复执行步骤2~4 ,直至满足收敛判据为止。
使用遗传算法需要决定的运行参数有:编码串长度、种群大小、交叉和变异概率。
编码串长度优优化问题所要求的求解精度决定。
种群大小表示种群中所含个体的数量,种群较小时,可提高遗传算法的运算速度,但却降低了群体的多样性,可能找不到最优解;种群较大时,又会增加计算量,使遗传算法的运行效率降低。
一般取种群数目为20~100. 交叉概率控制着交叉操作的频率,由于交叉操作是遗传算法中产生新个体的主要方法,所以交叉概率通常应取较大值;但若过大的话,又可能破坏群体的优良模式。
一般取0.4~0.99. 变异概率也是影响新个体产生的一个因素,变异概率小,产生新个体少;变异概率太大,又会使遗传算法变成随机搜索。
一般取变异概率为0.0001 ~0.1.遗传算法常采用的收敛判据有:规定遗传代数:连续几次得到的最优个体的适应值没有变化或变化很小等。
1.4 用MATLAB 实现遗传算法
MATLAB 是Matwork 公司的产品,是一个功能强大的数学软件,其优秀的数值计算能力使其在工业界和学术界的使用率都非常高。
MATLAB 还十分便于使用,它以直观、简洁并符合人们思维习惯的代码给用户提供了一个非常友好的开发环境。
利用MATLAB 处理矩阵运算的强大功能来编写遗传算法程序有着巨大的优势。
1.4.1 编码
遗传算法不对优化问题的实际决策变量进行操作,所以应用遗传算法首要的问题是通过编码将决策变量表示成串结构数据。
本文中我们采用最常用的二进制编码方案,即用二进制数构成的符号串来表示一个个体,用下面的encoding 函数来实现编码并产生初始种群。
在上面的代码中,首先根据各决策变量的下界( min_var )、上界
( max_var )及其搜索精度scale_var 来确定表示各决策变量的二进制串的长度bits ,然后随机产生一个种群大小为popsize 的初始种群bit_gen 。
编码后的实际搜索精度为scale_dec=(max_var-
min_var)/(2^bits-1) ,该精度会在解码时用到。
1.4.2 解码解码后的个体构成的种群bin_gen 必须经过解码,以转换成原问题空间的决策变量构成的种群var_gen ,方能计算相应的适应值。
我们用下面的代码实现。
function [var_gen,fitness]=decoding(funname,bin_gen,bits,min_var,max_var) num_var=length(bits);
popsize=size(bin_gen,1); scale_dec=(max_var-min_var)./(2.^bits-1);
bits=cumsum(bits);
bits=[0 bits];
for i=1:num_var
bin_var{i}=bin_gen(:,bits(i)+1:bits(i+1)); var{i}=sum(ones(popsize,1)*2.^(size(bin_var{i},2)-1:-
1:0).*bin_var{i},2).*scale_dec(i)+min_var(i) end
var_gen=[var{1,:}];
for i=1:popsize
fitness(i)=eval([funname,'(var_gen(i,:))']);
end end 解码函数的关键在于先由二进制数求得对应的十进制数D ,并根据下式求得实际决策变量值X:
X D scale_dec min_ var
1.4.3 选择选择过程是利用解码后求得的各个适应值大小,淘汰一些较差个体而选出一些比较优良的个体,以进行下一步的交叉和变异操作。
选择算子的程序如下:
在该算子中,采用了最优保存策略和比例选择法相结合的思路,即首先找
出当前群体中适应值最高和最低的个体,将最佳个体best_indiv 保存并用其
替换掉最差个体。
为保证当前最佳个体不被交叉、变异操作所破坏,允许
其不参与交叉和变异而直接进入下一代。
然后将剩下的个体evo_gen 按比
例选择法进行操作。
所谓比例选择法,也叫赌轮算法,是指个体被选中的概
率与该个体的适应值大小成正比。
将这两种方法想结合的目的是:在遗传
操作中,不仅能不断提高群体的平均适应值,而且能保证最佳个体的适应值
不减小。
1.4.4 交叉下面采用单点交叉的方法来实现交叉算子,即按选择概率PC 在两两配对的个体编码串cpairs 中随机设置一个交叉点cpoints ,然后在该点相互交换两个配对个体的部分基因,从而形成两个新的个体。
交叉
算子的程序如下:
1.4.5 变异对于二进制的基因串而言,变异操作就是按照变异概率pm 随机选择变异点mpoints ,在变异点处将其位取反即可。
变异算子的实现过程如下:
function [new_gen]=mutation(old_gen,pm) mpoints=find(rand(size(old_gen))<pm);
new_gen=old_gen;
new gen(mpoints)=1-old gen(mpoints);
1.5 应用实例
上述程序已经考虑了多参数编码问题,可以用于搜索多变量函数的最优解。
为简单起见,下面仅以一个单变量函数为例,来验证所编遗传算法程序的全局寻优能力。
设函数为:
y 10 sin( 5x) 7 cos( 4x ) x,x [1,9] ,函数特性如图1 所示。
图1 函数特性示意图
取种群大小popsize=40 ,搜索精度scale_var=0.0001 ,交叉概率
pc=0.85 ,变异概率pm=0.05 。
图2 和图3 是某一次运算遗传40 代后最佳个体和最佳适应值的变化情况。
图2 最佳个体的变化情况
图3 最佳个体适应值的增长情况
由于采用了最优保存策略,所以在图3 中未看到最佳个体适应值减少的现象。
由图2 可见:在前三代种群中适应值最大的个体解码后的值为
7.8681 ,落在函数的一个局部极值处。
但是搜索并没有在此处停滞,很快就跃到了另一个更大的极值点7.8538 附近。
搜索继续,经过几次跳跃,我们发现在7.85 附近搜索多次后,连续几次得到的最优个体的适应值变化很小,可以认为找到全局最大值。
全局最大值点为7.8567 ,最大值为24.8554 。
下列程序为主函数。
%Example
clear;clc;close;
popsize=40;% 种群的个体个数
scale_var=0.0001;% 搜索精度
pc=0.85;% 交叉概率
pm=0.05;% 变异概率
min_var=0;% 函数定义域下界
max_var=9;% 函数定义域上界
[bin_gen,bits]=encoding(min_var,max_var,scale_var,popsize);% 随机产生初始群体old_gen=bin_gen;
t=0;T=40;Max_f=[];Best_var=[];
while(t<T)
[var_gen,fitness]=decoding('fun',old_gen,bits,min_var,max_var);
[evo_gen,best_indiv,best_var,max_fitness]=selection(old_gen,fitness,var_gen);
conew_gen=crossover(evo_gen,pc);
[munew_gen]=mutation(conew_gen,pm); new_gen=[munew_gen;best_indiv;best_indiv];
old_gen=new_gen;
Best_var=[Best_var,best_var];
Max_f=[Max_f,max_fitness];
t=t+1;
end
disp([' 最大值为:' num2str(max_fitness) ])
disp([' 全局最大值点为:' num2str(best_var) ])
figure
ezplot('fun',[min_var,max_var]);
xlabel('x')
ylabel('f(x)')
title('f(x)=x+10sin(5x)+7cos(4x)') figure plot(Best_var,'g+','linewidth',5); xlabel(' ') ylabel('
') title(' 最佳个体的变化情况') figure plot(Max_f,'c*','linewidth',5); xlabel(' 遗传代数') ylabel(' 最佳适应值') title(' 最佳适应值的变化情况')
定义的函数为:
function [f]=fun(x) f=x+10*sin(5*x)+7*cos(4*x);
2.1 蚁群算法起源及发展蚁群算法是一种源于大自然生物世界的仿生类算法,作为通用型随机优化方法,它吸收了昆虫王国中蚂蚁的行为特性,通过其内在的搜索机制,在一系列困难的组合优化问题求解中取得了成效。
由于在模拟仿真中使用的是人工蚂蚁概念,因此,有时也称为蚂蚁系统。
蚂蚁是一种古老的社会性昆虫,种类成千上万,分布遍及世界各
地,其共同特征是群居生活,每一种群都有着严格的社会结构,不同蚂蚁有着不同的分工。
因此,虽然蚂蚁个体的结构和行为都比较简单,但是由这些简单个体组成的群体,即“蚁群”系统却高度复杂,所能完成的任务复杂程度远远超出每个个体的能力。
除了“蚁群”系统具有高度的分工协作之外,蚂蚁个体之间还存在着一种信息传递机制,这也是使得系统能够高效有序运转的重要原因。
据昆虫学家的观察和研究发现,生物世界中的蚂蚁有能力在没有任何可见提示下找出其巢穴至食物源的最短路径,并能随环境的变化而变化,适应性地搜索新的路径,产生新的选择。
作为昆虫的蚂蚁
在寻找食物源时,能在其走过的路径上释放一种蚂蚁特有的分泌物——信息素,使得一定范围内的其他蚂蚁能够察觉到并由此影响它们以后的行为。
当一些路径上通过的蚂蚁越来越多时,其留下的信息素轨迹也越来越多,以致信息素强度增大(随时间的推移会逐渐减弱),后来蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度,这种选择过程被称为蚂蚁的自催化行为。
受到蚁群系统信息共享机制的启发,意大利学者Dorigo 于1992 年在他的博士论文中首次系统提出了蚁群算法,并成功地将该方法应用于其解旅行商问题和二次分配问题(QAP )中,引起了大家的广泛关注。
之后,蚁群算法很快陆续渗透到其他问题领域中,如工件排序问题、图着色问题、车辆调度问题、大规模集成电路设计、通信网络中的负载平衡问题等,蚁群算法越来越引起人们的重视。
2.2 蚁群算法的原理
用于优化领域的蚁群算法吸收了生物界中蚁群群体行为特征,其原理在于
样的边容易被蚂蚁选择。
(1)感知小范围区域内状况,并判断出是否有食物或其他同伴 的信息素轨迹;
(2)释放自己的信息素;
(3)所遗留的信息素数量会随时间而逐步减少。
由于自然界中的蚂蚁基本没有视觉, 既不知向何处去寻找和获取 食物,也不知发现食物后如何返回自己的巢穴,因此,它们仅仅依赖 于同类散发在周围环境中的信息素来决定自己何去何从。
有趣的是, 尽管没有任何先验知识, 但蚂蚁们还是有能力找到从巢穴到食物源的 最佳路径, 甚至在该路线设置障碍物之后, 它们仍然能很快重新找到 新的最佳路线。
这里,用一个形象化的图来说明蚁群算法的路径搜索 原理和机制。
注:(a )是初始的距离图, d 表示距离;( b )在 t=0 时刻, 在各路径上没有信息素的遗留,
蚂蚁以等概率选择路径;c )在 t=1 时刻,比较短的边上信息素的遗留比较多。
因此,这 (a ) (b ) (c )
在图(a)中,假设F 是食物源,E 是蚁穴。
蚂蚁的目的是把食物带回蚁穴。
显然,较短的路径比较长的路径有优势。
假设在t=0 时刻,这里有150 只蚂蚁在点C(另有150 只蚂蚁在点A )。
并且在这一时刻任何一段路径都没有信息素的遗留。
这样,每只蚂蚁都以相同的概率随机地选择它们的路径。
所以,从点C 和A 出发点蚂蚁,按概率都将各有75 只走向D,另外75 只走向B(图(b ))。
当t=1 时,又有150 只蚂蚁从F走向C,此时在C到D的路径上遗留了先前从C经D 到A 的75 只蚂蚁所遗留的信息素,而在C到B的路径上则遗留了先前从C经B到A 的75 只蚂蚁以及从A 经B到C的75 只蚂蚁所遗留的信息素。
蚂蚁在选择路径的时候依据各路径所遗留信息素的浓度来进行选择,因此,按概率将有100 只蚂蚁朝点B 走,有50 只蚂蚁朝点D 走。
由E 点到A 点也是相同的情况(图(c))。
这一过程反复进行,最终所有点蚂蚁都将选择到这条最短路径,即CBA 这条边。
蚂蚁有能力在没有任何提示下找到从其巢穴到食物源的最短路径,并且能随环境的变化而变化,适应性地搜索新的路径,产生新的选择。
其根本原因是蚂蚁在寻找食物源时,能在其走过的路上释放信息素,随着时间的推移该物质会逐渐挥发,后来的蚂蚁选择该路径的概率与当时这条路径上该物质的强度成正比,当一定路径上通过的蚂蚁越来越多时,其留下的信息素轨迹也越来越多,后来蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度。
而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。
通过这种正反馈
机制,蚂蚁最终可以发现最短路径。
特别地,当蚂蚁巢穴与食物源之 间出现障碍物时, 蚂蚁不仅可以绕过障碍物, 而且通过蚁群信息素轨 迹在不同路径上的变化, 经过一段时间的正反馈, 最终收敛到最短路 径上。
2.3 基本蚁群算法数学模型
为了便于理解, 现用求解平面上 n 个城市的 TSP 问题为例来说明 基本蚁群算法模型。
假设将 m 只蚂蚁随机放在 n 个城市上, d ij 表示城市 i 和城市 j 之 间的距离, ij (t ) 表示 t 时刻城市 i 和城市 j 连线上的信息量, 即路径 (i ,j )的信息量。
初始时刻,各条路径上信息量相等, 设 ij (0) C (C
为一个正常数),蚂蚁 k (k 1,2,..., m ) 在运动过程中根据各条路径的 信息量决定其转移方向。
这里用禁忌表 tabu k (k 1,2,..., m ) 来记录蚂 蚁 k 当前所走过的城市,集合 tabu k 随着蚁群进化过程做动态调整 p i k
j (t )表示t 时刻蚂蚁 k 由城市i 转移到城市 j 的状态转移概率 ij (t ) ij (t )
, 若 j allowed k is (t ) is (t )
s allowed k 否则 其中, allowed k 表示蚂蚁 k 下一步允许选择的城市集
合,则 allowed k {C tabu k } , 为信息启发因子, 为期望启发因子, ij (t ) 为启发函数,对于某个确定的 TSP 问题, ij (t )是一个常数。
其表达 式如下:
p i k j (t ) 2-1)
0,
其中, d ij 表示城市i 和城市j 之间的距离,且
d ij (x i x j )2(y i y j )2
其中,(x i , y i )和(x j , y j )分别是城市i 和城市j 的坐标。
为了避免路径上信息素的无限累计,导致某路径上残留的信息素过多
而淹没启发信息,在每只蚂蚁走完一步或者一个循环结束后,要对路径上
的信息素进行更新处理。
由此,在t 1时刻,路径(i , j )上的信息量可按如下规则调整
ij (t 1) (1 ) ij (t ) ij (t ) (2-2 )
m
ij (t ) i k j (t ) (2-3 )
i1
其中,是信息素挥发系数,则1 是信息素残留因子,且( 0,1) 。
ij (t )表示本次循环中路径(i ,j )上信息素增量,初始时刻信息素的增量为
0,即ij (0) 0 。
i k j (t )为第k 只蚂蚁在本次循环中留在路径(i , j )上的信息素。
这里,根据信息素不同的更新策略,即i k j (t )的不同求法将蚁群
算法模型分为以下三种:Ant-Cycle 模型、Ant-Auantity 模型和
Ant-Density 模型
1 )Ant-Cycle 模型
i k j (t )
, 若第k只蚂蚁在t
和t L k
0, 否则
1之间经过( i , j )
2-4 )
0, 否则 3 )Ant-Density 模型
Q ,若第k 只蚂蚁在t 和t 1之间经过( i , j )
0, 否则 以上各式中, Q 均表示信息素强度,是一个常数。
在这三个模型中, Ant-Quantity 模型和 Ant-Density 模型是当蚂蚁走完一步后更新其 所走路径上的信息素, 是局部信息素更新。
而 Ant-Cycle 模型则是蚂 蚁完成一个循环后更新所有路径上的信息素, 利用的是整体信息素更 新。
我们通常采用 Ant-Cycle 模型作为蚂蚁算法的基本模型。
2.4 基本蚁群算法实现过程
以 Ant-Cycle 模型为例来说明基本蚁群算法的具体实现步骤:
Step1(初始化)设定算法迭代次数 NC 0 ,设置最大循环次数 NC max , 设置路径( i , j )初始时刻的信息量 ij (0) C ( C 为常数),信息素Q , 且初始时路径 (i ,j )上的信息素增量为 0,即 ij (0) 0 。
Step2 算法的迭代过程
While(NC<NC max )
for i=1:n-1 (确保遍历所有的城市)
for k=1:m (对 m 只蚂蚁进行循环)
for j=1:n (对 n 个城市进行循环)
蚂蚁 k 根据公式( 2-1 )选择转移到的下一个城市
i k j (t ) d ij
若第k 只蚂蚁在 t 和t 1之间经过(i , j ) 2-5 )
i k j (t ) 2-6)
j,并将城市j 置入蚂蚁k 的禁忌表tabu k 中
end (结束对城市的循环)
end (结束对蚂蚁的循环)
end (结束对i 的循环)
计算所有蚂蚁求得的路径长度,根据公式(2-2 )、(2-3 )和(2-
4 )更新路径(i,j )上的信息素;
NC=NC+1 end
Step3 结束算法,输出结果
2.5 用于连续函数优化的蚁群算法
2.5.1 一元连续函数优化
对于任何一个连续函数优化问题,都可以通过一定的变换而成为一个在[0,1]上的函数最小化问题min f (x)C,其中x [0,1] 。
加上一个常数C以使函数值大于0.对于端点值,可以通过直接与除去端点计算出的最小值比较的方法确定是否为最小,因此下面不考虑端点值。
设问题要求自变量精确到小数点后 d 位,则自变量x 可以用 d 个十进制数来近似表示,就可以构造如下 d 10 2 个“城市”。
这些城市分为 d 2 层。
其中首尾两层分别仅含一个城市:一个为起始城市,一个为终止城市。
中间 d 层,从左往右分别表示自变量的十分位、百分位·这些城市中,只有k 1与k 层(k [2,d 2] )之间的各个城市有连接通路。
记k 1层中代表十进制数a的城市与k 层中代表十进制。