遗传算法概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法概述
摘要:遗传算法(genetic algorithms, GA)是人工智能的重要新分支,是基于达尔文进化论,在微型计算机上,模拟生命进化机制而发展起来的一门学科。

它根据适者生存、优胜劣汰等自然进化规则来进行搜索计算机和问题求解。

对许多用传统数学难以解决或明显失效的非常复杂的问题,特别是最优化问题,GA提供了一个行之有效的新途径。

近年来,由于遗传算法求解复杂优化问题的巨大潜力及其在工业控制工程领域的成功应用,这种算法受到了广泛的关注。

本文旨在阐述遗传算法的基本原理、操作步骤和应用中的一些基本问题,以及为了改善SGA的鲁棒性而逐步发展形成的高级遗传算法(refine genetic algorithms, RGA)的实现方法。

一、遗传算法的基本原理和特点
遗传算法将生物进化原理引入待优化参数形成的编码串群体中,按着一定的适值函数及一系列遗传操作对各个体进行筛选,从而使适值高的个体被保留下来,组成新的群体,新群体包含上一代的大量信息,并且引入了新一代的优于上一代的个体。

这样周而复始,群体中各个体适值不断提高,直至满足一定的极限条件。

此时,群体中适值最高的个体即为待优化参数的最优解。

正是由于遗传算法独具特色的工作原理,使它能够在复杂的空间进行全局优化搜索,并且具有较强的鲁棒性;另外,遗传算法对于搜索空间,基本上不需要什么限制性的假设(如连续性、可微及单峰等)。

同常规优化算法相比,遗传算法有以下特点。

(1)遗传算法是对参数编码进行操作,而非对参数本身。

遗传算法首先基于一个有限的字母表,把最优化问题的自然参数集编码为有线长度的字符串。

例如,一
个最优化问题:在整数区间【0,31】上求函数f(x)=x2的最大值。

若采用传统
方法,需要不断调节x参数的取值,直至得到最大的函数值为止。

而采用遗传
算法,优化过程的第一步的是把参数x编码为有限长度的字符串,常用二进制
字符串,设参数x的编码长度为5,“00000”代表0,“11111”代表31,在区间
【0,31】上的数与二进制编码之间采用线性映射方法;随机生成几个这样的字
符串组成初始群体,对群体中的字符串进行遗产操作,直至满足一定的终止条
件;求得最终群体中适值最大的字符串对应的十进制数,其相应的函数值则为
所求解。

可以看出,遗传算法是对一个参数编码群体进行的操作,这样提供的
参数信息量大,优化效果好。

(2)遗传算法是从许多点开始并行操作,并非局限于一点,从而可有效防止搜索过程收敛于局部最优解。

(3)遗传算法通过目标函数计算适值,并不需要其他推导和附加信息,因而对问题的依赖性较小。

(4)遗传算法的寻优规则是由概率决定的,而非确定性的。

(5)遗传算法在解空间进行高效启发式搜索,而非盲目的穷举或完全随机搜索。

(6)遗传算法对求解的优化问题没有太多的数学要求。

由于它的进化特性,它在解的搜索中不需要了解问题的内在性质。

遗传算法可以处理任意形式的目标函数
和约束,无论是线性的还是非线性的,离散的还是连续的,甚至是混合的搜索
空间。

(7)遗传算法具有并行计算的特点,因而可通过大规模并行计算来提高计算速度。

二、遗传算法的模式理论
1、模式
一个模式(schemata)就是一个描述种群在位串的某些确定位置上具有相似性的一组符号串。

为了描述一个模式,在用以表示位串的两个字符{0,1}中加入一个通配符“*”,就构成了
一个表示模式用的3个字符的符号表{0,1,*}。

因此用三个元素符号表{0,1,*}可以构造出任意一种模式。

当一个模式与一个特定位串相匹配时,意味着该模式中的1与位串中的1相匹配,模式中的0与位串中的0相匹配,模式中的“*”与位串中的0或1相匹配。

例如,模式00*00匹配了两个位串,即{00100,00000};模式*111*可以和{01110,01111,11110,11111}中的任何一个相匹配;模式0*1**则匹配了长度为5,第一位为0、第三位为1的八个位串,即{00100,00101,00110,00111,01100,01101,01110,01111}。

模式的思路提供了一种简单而有效的方法,使能够在有限符号表的基础上讨论有限长位串的严谨定义的相似性。

应强调的是,“*”只是一个代表其他符号的一个元符号,它不能被遗传算法直接处理,但可以据此计算出所有可能的模式。

一般地,假定符号表的基数是k ,例如{0,1}的基数是2,则定义在该符号表上的长度为l 的位串中,所有可能包含的最大模式数为(k +l )l ,原因是在l 个位置中的任何一个位置上即可以取k 个字符中的任何一个又可以取通配符“*”,即共有k + l 个不同的表示,则l
个位置的全排列数为(k +l )l 。

例如,对长度l=5,k=2(对应0,1),则会有3×3×3×3×3=35=243=
(k +l )l 种不同的符号串,而位串的数量仅为k l =25=32。

可见,模式的数量要大于位串的数量。

对于由0、1和*定义且长度为l 的符号串所能组成的最大模式数为(2+l )l 。

对于任一长度为l 的给定位串,当任一位置上只有两种不同表示时,所含模式数为2l 个,因此对于含
有n 个位串个体的种群可能包含的模式数在2l ~n ×2l 之间。

不难看出,遗产算法正是利用种
群中位串之间的众多的相似性以及适值之间的相关性,来引导遗传算法进行有效地搜索。

为了区分不同类型的模式,对模式H 定义两个量:模式位数(order )和模式的定义长度(defining length )分别表示为O(H)和δ(H)。

O(H)是H 中有定义的非“*”位的个数,模式定义长度δ(H)是指H 中左右两端有定义位置之间的距离。

这两个量为分析位串的相似性及分析遗传操作对重要模式的影响提供了基本手段。

2、复制对模式的影响
设在给定时间(代)t ,种群A (t )包含m 个特定模式H ,记为
m=m(H ,t)
在复制过程中,A (t )中的任何一个位串A i 以概率P i =f i /∑f i 被选中并进行复制。

假如选择是有放回的抽样,且两代种群之间没有交叠(即若A (t )的规模为n ,则在产生A (t+1)时,必须从A (t )中选n 个位串进匹配集),可以期望在复制完成后,在t+1时刻,特定模式H 的数量为:
m(H,t+1)=m(H,t)nf(H)/∑fi
其中,f(H)是在t 时刻对应模式H 的位串的平均适值,因为整个群的平均适值f=∑fi/n,则上式又可写为 m(H,t+1)=m(H,t)f
H f )( 经过复制操作后,下一代中特定模式的数量H 正比于所在位串的平均适值与种群平均适值的比值。

若f(H)>f ,则H 的数量将增加,若f(H)<f ,则H 的数量将减少。

即若包含H 的个体位串的平均适值高于当前种群中所有个体位串的平均适值,则种群包含特模式的下一代中的数量将增加;反之,减少。

操作中模式的增减在复制中是并行的,这恰恰表现了遗传算法隐含的并行性。

为了进一步分析高于平均适值的模式数量的增长,假设f c f H f =-)((c 是一个大
于零的常数),则上式可写为:
),()1(),()1,(t H m c f
c f t H m t H m +=+=+ 从原始种群开始(t=0),并假定是一个稳态的值,则有
)1)(0,()1,(c H m t H m +=+t
可见,对于高于平均适值的模式数量将按指数规律增长(c>0)。

从对复制的分析可以看到,虽然复制过程成功的以并行方式控制着模式数量以指数规模增减,但由于复制只是将某些高适值个体全盘复制,或者淘汰某些低适值个体,而决不会产生新的模式结构,因而性能的改进是有限的。

2、 交叉对模式的影响
交叉过程是位串之间有组织的随机的信息交换。

交叉操作对一个模式H 的影响与模式的定义长度δ(H)有关,δ(H)越大,模式H 被分裂的可能性越大,因为交叉操作要随机选择出进行匹配的一对位串上的某一随机位置进行交叉。

显然δ(H)越大,H 的跨度就越大,随机交叉点落入其中的可能性就越大,从而H 的存活率就降低。

例如位串长度l=7,有如下包含两个模式的位串A 为
A=01111000
H1=*1****0, δ(H1)=5
H2=***10**,δ(H2)=1
随机产生的交叉位置在3和4 之间
A=1000011
H1=0****1* ,Pd=5/6
H2=**10*** ,Pd=1/6
模式H1定义长δ(H1)=5,若交叉点始终是随机地从l-1=7-1=6个可能的位置选取,则模式H1被破坏的概率为
Pd=δ(H1)/(l-1)=5/6
它的存活概率为
Ps=1-Pd=1/6
类似的,模式H2的定义长度δ(H2)=1,它被破坏的概率为Pd=1/6,它存活的概率为Ps=1-Pd=5/6.
因此,模式H1比模式H2在交叉中更容易受到破坏。

一般情况下可以计算出任何模式的交叉存活概率的下限为 Ps 1)
(1--≥l H δ
在上面的讨论中,均假设交叉的概率为1。

若交叉的概率为Pc(即在选出进匹配集的一对位串上发生交叉操作的概率),则存活率为 Ps 1)
(1--≥l H Pc δ
在复制交叉之后,模式的数量则为
Ps f
H f t H m t H m )(),()1,(=+ 即⎥⎦⎤⎢⎣⎡--≥+1)(1)(),()1,(l H Pc f H f t H m t H m δ 因此,在复制和交叉的综合作用之下,模式H 的数量变化取决于其平均适值的高低和定
义长度的长短,f(H)越大,δ(H)越小,则H 的数量就越多。

3、 变异对模式的影响
变异是对位串中的单个位置以概率Pm 进行随机替换,因而它可能破坏特定的模式。

一个模式H 要存活,意味着它所有的确定位置都存活。

因此,由于单个位置的基因值存活的概率为1-Pm ,而且由于每个变异的发生是统计独立的,因此,一个特定模式仅当它的O (H )个确
定位置都存活是才存活,从而得到经变异后,特定模式的存活率为(1-Pm )O(H),即(1-Pm )
自乘O(H)次,由于一般情况下Pm<<1,H 的存活率可表示为
(1-Pm )O(H)≈1-O(H)Pm
综合考虑复杂、交叉和变异操作的共同作用,则模式H 在经历复制、交叉、变异操作之后,在下一代中的数量可表示为
[]Pm H O l H Pc f H f t H m t H m )(11)(1)()
,()1,(-⎥⎦
⎤⎢⎣⎡--≥+δ 也可近似表示为 ⎥⎦
⎤⎢⎣⎡---≥+Pm H O l H Pc f H f t H m t H m )(1)(1)(),()1,(δ 由上述分析可以得出结论:定义长度短的、确定位数少的、平均适值高的模式数量将随着代数的增加呈指数增长。

这个结论称为模式理论或遗传算法基本定理。

根据模式理论,随着遗传算法一代一代地进行,那些定义长度短的,位数少的,高适值的模式将越来越多,因而可期望最后得到的位串的性能越来越得到改善,并最终趋向全局最优点。

三、遗传算法中适值的调整
为了使遗传算法有效的工作,必须保持种群内位串的多样性和位串之间的竞争机制。

现将遗传算法的运行分为开始、中间和结束三个阶段来考虑:在开始阶段,若一个规模不太大的种群内有少数非凡的个体(适值很高的位串),按通常的选择方法,这些个体会被大量的复制,在种群中占有大的比重,这样就会减少种群的多样性,导致多早收敛,从而可能丢失一些有意义的搜索点或最优点,而进入局部最优;在结束阶段,即使种群内保持了很大的多样性,但若所有或大多数个体都有很高的适值,从而种群的平均适值和最大值相差无几,则平均适值附近的个体和具有最高适值的个体被选中的机会相同,这样选择就成了一个近乎随机的步骤,适值的作用就会消失,从而使搜索性能得不到明显的改进。

因此,有必要对种群内各位串的适值进行有效的调整,既不能相差太大,又要拉开档次,强化位串之间的竞争性。

1、 窗口法
它是一种简单有效的适值调整方法,调整后的个体适值为
F j =f j -(f min -a)
其中,f j 为原来个体的适值;为每代种群中个体适值的最小值;a 为一常数。

在进化的后期窗口法增加了个体之间的差异。

2、 函数归一法
该法是将个体适值转换到最大值与最小值之间成一定比例的范围之内,这一范围由选择压力ksp 决定。

具体步骤如下:
(1) 根据给定的选择压力ksp,求种群中适值调整后的适值最小值为
ksp
f f F ++=1max min min 其中fmin 和fmax 是调整前种群个体适值的最小值和最大值。

适值调整后种群中适值最大值
为Fmax=ksp Fmin
(2) 计算线性适值转换的斜率为
△F=min
max min max f f F F -- (3)计算每个个体的新适值为
+=min F Fj △min)(f fj F -
其中,fj 为调整前第j 个个体适值。

在进化的早期,函数归一化法缩小了种群内个体之间的差异,而在进化的后期又适当增大了性能相似个体之间的差异,加快了收敛速度。

3、 线性调整法
线性调整法是一个有效的调整方法。

设f 是原个体适值,F 是调整后个体的适值F=af+b ,系数a 、b 可通过多种方法选取。

不过,在任何情况下均要求Favg 应与favg 相等,即应满足的条件为Favg=favg ,fmax=CmultFavg ,其中Cmult 是最佳种群所要求的期望副本数,是一个经验值,对于一个不大的种群来说,可能在1.2~2的范围内取值。

正常条件下的线性调整方法如下图
线性调整在遗传算法的后期可能产生一个问题是,一些个体的适值远远小于平均适值与最大值,而往往平均适值与最大适值又十分接近,Cmult 的这种选择方法将原始适值函数伸展成负值,如下图,解决的方法是,当无法找到一个合适的Cmult 时,保持Favg=favg ,而将fmin 映射到Fmin=0。

四、高级遗传算法的实现方法
1、局部搜索算法
局部搜索算法是从爬山法改进而来的,设想要爬一座自己从未爬过的高山,目标是爬到山顶,那么如何设计一种策略使得人们可以最快到达山顶呢?在一般情况下,如果没有任何有关山顶的其他信息,沿着最陡的山坡向上爬,应该是一种不错的选择。

这就是局部搜索算法中最基本的思想,即在搜索过程中,始终向着离目标最接近的方向搜索。

当然最优解可以是求最大值,也可以是求最小值,二者思想是一样的。

在下面的讨论中如果没有特殊说明,均假设最优解是最小值。

局部搜索算法的一般过程是:
①随机选择一个初始的可能解x0∈D,xb=x0,P=N(xb);D是问题的定义域,xb用于记
录到目标位置得到的最优解,P为xb的领域。

②如果不满足结束条件,则结束条件包括达到了规定的循环次数、P为空等。

③Begin
④选择P的一个子集P’,xn为p’中的最优解
⑤如果f(xn)<f(xb),则xb=xn,P=N(xb),转②;f(x)为指标函数。

⑥否则P=P-P’,转②。

⑦End
⑧输出计算结果
⑨结束
在算法第4步,选择P的一个子集P’,可以根据问题的特点,选择适当大小的子集。

极端情况下,可以选择P’为P本身,或者是P的一个元素。

后者情况下可以采用随机选择的方式从P中得到一个元素。

设五城市旅行商问题如下图所示,用局部搜索方法求解该问题。

假设从城市a出发,我们用城市的序列表示该问题的一个可能解。

设初始生成的可能解为:x0=(a,b,c,d,e)则根据各城市间的距离计算得到旅行商的旅行距离:f(xb)=f(x0)=38 首先选择两个城市间的位置变换方式得到一个可能解的领域,并在算法的第④步选择从p中随机选择一个元素的方法。

则算法的执行过程如下:
P={(a,c,d,b,e),(a,d,c,b,e)(a,e,c,d,b),(a, b, d, c, e),(a ,b, e, d, c),(a ,b, c, e, d)}
第一次循环:
从P中随机选择一个元素,假设xn=(a,c,b,d,e),f(xn)=42,f(xn)>f(xb),P=P-{xn}={(a,d,c,b,e),(a,e,c,d,b),(a,b,d,c,e),(a,b,e,d,c),(a,b,c,e,d)}。

第二次循环:
从P中随机选择一个元素,假设xn=(a,d,c,b,e),f(xn)=45,f(xn)>f(xb),P=P-{xn}={(a,e,c,d,b),(a,b,c,d,e),(a,b,e,d,c),(a,b,c,e,d)}。

第三次循环:
从P中随机选择一个元素,假设xn=(a,e,c,d,b),f(xn)=44,f(xn)>f(xb),P=P-{xn}={(a,b,d,c,e),(a,b,e,d,c),(a,b,c,e,d)}。

第四次循环:
从P中随机选择一个元素,假设xn=(a,b,d,c,e),f(xn)=44,f(xn)>f(xb),P=P-{xn}={(a,b,e,d,c),(a,b,c,e,d)}。

第五次循环:
从P中随机选择一个元素,假设xn=(a,b,e,d,c),f(xn)=34,f(xn)<f(xb),xb=(a,b,e,d,c),P={(a,e,b,d,c),(a,d,e,b,c),(a,c,e,d,b),(a,b,d,e,c),(a,b,c,d,e),(a,b,e,c,d)}。

第六次循环:
从P中随机选择一个元素,假设xn=(a,e,b,d,c),f(xn)=44,f(xn)>f(xb),P=P-{xn}={(a,d,e,b,c),(a,c,e,d,b),(a,b,d,e,c),(a,b,c,d,e),(a,b,e,c,d)}。

第七次循环:
从P中随机选择一个元素,假设xn=(a,d,e,b,c),f(xn)=39,f(xn)>f(xb),P=P-{xn}={(a,c,e,d,b),(a,b,d,e,c),(a,b,c,d,e),(a,b,e,c,d)}。

第八次循环:
从P中随机选择一个元素,假设xn=(a,c,e,d,b),f(xn)=38,f(xn)>f(xb),P=P-{xn}={(a,b,d,e,c),(a,b,c,d,e),(a,b,e,c,d)}。

第九次循环:
从P中随机选择一个元素,假设xn=(a,b,d,e,c),f(xn)=38,f(xn)>f(xb),P=P-{xn}={(a,b,c,d,e),(a,b,e,c,d)}。

第十次循环:
从P中随机选择一个元素,假设xn=(a,b,c,d,e),f(xn)=41,f(xn)>f(xb),P=P-{xn}={(a,b,e,c,d)}。

第十一次循环:从P中随机选择一个元素,假设xn=(a,b,e,c,d),f(xn)=41,f(xn)>f(xb),P=P-{xn}={}。

P等于空集,算法结束,得到结果为xb=(a,b,e,d,c),f(xb)=34。

在该问题中,由于初始值(abcde)的指标函数为38,已经是一个比较不错的结果了,在11次循环的搜索过程中,指标函数只下降了一次,最终的结果指标函数为34,这刚好是该问题的最优解。

从局部搜索的一般算法可以看出,该方法非常简单,但也存在一些问题。

一般情况下,并不能上上例那样幸运得到问题的最优解。

2、 模拟退火算法
模拟退火算法是局部搜索算法的一种扩展,该算法的思想最早由Metropolis 在1953年提出,Kirkpatrick 等人在1983年成功地将模拟退火算法用于求解组合优化问题。

作为求解复杂组合优化问题的一种有效的方法,模拟退火算法已经在许多工程和科学领域得到广泛应用。

模拟退火算法是根据复杂组合优化问题与固体的退火过程之间的相似之处,在它们之间建立联系而提出来的。

固体发热退火过程是一种物理现象,属于热力学和统计物理学的研究范畴。

当对一个固体进行加热时,粒子的热运动不断增加,随着温度的不断上升,粒子逐渐脱离其平衡位置,变得越来越自由,直到达到固体的溶解温度,粒子排列从原来的有序状态变为完全的无序状态。

这就是固体的溶解过程。

退火过程与溶解过程刚好相反。

随着温度的下降,粒子的热运动逐渐减弱,粒子逐渐停留在不同的状态,其排列也从无序向着有序方向发展,直至到温度很低时,粒子重新以一定的结构排列。

粒子不同的排列结构,对应着不同的能量水平。

如果退火过程是缓慢进行的,也就是说,温度的下降如果非常缓慢的话,使得在每个温度下,粒子的排列都达到一种平衡态,则当温度趋于0时,系统的能量将趋于最小值。

如果以粒子的排列或者相应的能量来表达固体所处的状态,则温度T 下,固体所处的状态具有一定的随机性。

一方面,物理系统倾向于能量较低的状态,另一方面,热运动又妨碍了系统准确落入低能状态。

根据这一物理现象,Metropolis 给出了从状态i 转换为状态j 的准则:
如果E(j )≤E(i),则状态转换被接受;
如果E(j)>E(i),则状态转移被接受的概率为:KT j E i E e )
()(-,其中E(i)、E(j)分别
表示在状态i 、j 下的能量,T 是温度,K>0是波尔兹曼常数。

Metropolis 准则表达了这样一种现象:在温度T 下,系统处于某种状态,由于粒子的运动,系统的状态发生微小的变化,并导致了系统能量的变化。

如果这种变化使得系统的能量减少,则接受这种转换;如果变换使得系统的能量增加,则以一定的概率接受这种转换。

在给定的温度T 下,当进行足够多次的状态转换后,系统将达到热平衡。

此时系统处于某个状态i 的概率由Boltzmann 分布给出:
T KT
i E Z e T Pi )
()(-=,其中∑∈-=s
j KT j E T e Z )(为归一化因子,S 是所有可能状态的集合。

在给定的温度T 下,设有i 、j 两个状态,E(i)<E(j),则有: ⎪⎪⎭⎫ ⎝⎛-=-=-=---------KT i E j E KT i E T KT i E KT j E KT i E T T KT j E T
KT
i E e e Z e e e Z Z e Z e T Pj T Pi )()()()()()()
()
(11)1(1)()(由于)()(j E i E <,所以1)
()(<--KT i E j E e
所以有:0)()(>-T Pj T Pi ,即在任何温度T 下,系统处于能量低的状态的概率大于能量高的状态的概率。

当温度很高时有:
S e e T Pi s j KT j E KT i E T T 1lim ))((lim )()
(=⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛=∑∈--∞→∞→,其中s 表示系统所有可能的状态数。

由上式可以看出,当温度很高时,系统处于各个状态的概率基本相等,接近于平均值,与所处状态的能量几乎无关。

当温度很低时则有:
⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛=∑∈--→→S j KT j E KT i E T T e e T Pi )()
(00lim ))((lim 设Sm 表示系统最小能量状态的集合,Em 是系统的最小能量。

上式分子、分母乘以KT E m
e 有:
⎪⎪⎪⎪⎪⎭⎫ ⎝⎛+=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=∑∑∑∉--∈----→∈----→→m m m m m m
m m
S j KT E j E S j KT E j E KT E i E T S j KT E j E KT E i E T T e e e e e T Pi )()()(0)()(00lim lim ))((lim =⎪⎩⎪⎨⎧∉∈=⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛∑∈----→m m m S j KT E j E KT
E i E T S i S i S e e m m m
如果,如果,01lim )()(0 由上式可以看出,当温度趋近于0时,系统以等概率趋近于几个能量最小的状态之一,而系统处于其他状态的概率为0。

由于:
T Z Z T Pi T Pi KT i E T Z e Z Z e KT i E Z e T T T Pi T T T KT i E T T KT i E T KT i E ∂∂-=∂∂-=∂∂=∂∂---)()()(1)()()(2
)(2)(2)( =))()(()()(1)()()()(2)(22T KT
j E S j KT j E S j T Z e j E i E KT T Pi e j E KT Z T Pi T Pi KT i E -∈-∈∑∑-=- =))(()())()()(()(22T S
j E i E KT T Pi T Pj j E i E KT T Pi -=-∑∈ 其中:∑∈=S
j T T Pj j E E )()(是温度T 下,各状态能量的期望值。

由于Pi(T)、K 、T 均大于0,所以有:⎩⎨⎧<<>>∂∂T
T E i E E i E T T Pi )(,0)(.0)(如果如果 由此可以看出,系统落入能量较低的状态的概率是随温度T 单调下降的,而系统落入高能量状态的概率是随温度T 单调上升的。

也就是说,系统落入低能量状态的概率随着温度的
下降单调上升,而系统落入高能量状态的概率随着温度的下降单调下降。

总结可得出如下结论:在高温下,系统基本处于无序状态,基本以等概率落入各个状态。

在给定的温度下,系统落入低能量状态的概率大于落入高能量状态的概率。

这样在同一温度下,如果系统交换得足够充分,则系统会趋向于落入较低能量的状态。

随着温度的缓慢下降,系统落入低能量状态的概率逐步增加,而落入高能量状态的概率逐步减小,使得系统各状态能量的期望值随温度的下降单调下降,而只有那些能量小于期望值的状态,其概率才随温度下降增加,其他状态均随温度下降而下降。

因此,随着能量期望值的逐步下降,能量低于期望值的状态逐步减少,当温度趋于0时,只剩下那些具有最小能量的状态,系统处于其他状态的概率趋近于0。

因此最终系统将以概率1处于具有最小能量的一个状态。

固体退火过程,最终达到最小能量的一个状态,从理论上来说,必须满足以下3个条件:
① 初始温度必须足够高;
② 在每个温度下,状态的交换必须足够充分;
③ 温度T 的下降必须足够缓慢。

受固体退火过程的启发,Kirkpatrick 等人意识到组合优化问题与固体退火过程的类似性,将组合优化问题类比为固体的退火过程,提出了求解组合优化问题的模拟退货算法。

设一个定义在有限集S 上的组合优化问题,i ∈S 是该问题的一个解,f(i)是解i 的指标函数。

由组合优化问题与退火过程的类比关系,i 对应物理系统的一个状态,f(i)对应该状态的能量E(i),一个用于控制算法的进程、其值随算法进程递减的控制参数t 对应固体退火中的温度T ,粒子的热运动则用解在领域中的交换来代替。

这样就将一个组合优化问题与固体退火过程建立了联系。

在求解组合优化问题时,首先给定一个比较大的t 值,这相当于给定一个比较高的温度T 。

随机给定一个问题的解i ,作为问题的初始解。

在给定的t 下,随机产生一个问题的解j ,j ∈N(i),其中N(i)是i 的领域。

从解i 到新解j 的转移概率按照Metropolis 准则确定即:
⎪⎩⎪⎨⎧<=⇒--其他,)()(,
1)()()(t i f j f e
i f j f j i Pt 如果新解j 被接受,则以解j 代替解i ,否则继续保持解i 。

重复该过程,直到在该控制参数t 下达到平衡。

与退火过程中的温度T 缓慢下降相对应,在进行足够多的状态转移之后,控制参数t 要缓慢下降,并在每个参数t 下重复以上过程,直到控制参数t 降低到足够小为止。

最终得到的是该组合优化问题的一个最优解。

由于这样一个过程模拟的是退火过程,所以被称为模拟退火算法。

模拟退火算法可描述为:
① 随机选择一个解i ,k=0,t 0=T max (初始温度),计算指标函数f(i)。

② 如果满足结束条件,则转。

③ Begin
④ 如果在该温度内达到了平衡条件,则转。

⑤ Begin
⑥ 从i 的领域N(i)中随机选择一个解j 。

⑦ 计算指标函数f(i)。

⑧ 如果f(j)<f(i),则i=j ,f(i)=f(j),转④。

⑨ 计算t i f j f e j i Pt )
()()(--=⇒
⑩ 如果。

则)()(,),1,0()(j f i f j i Random j i Pt ==>=>
⑪ 转④
⑫ End
⑬ 1),(1+==+k k t Dorp t k k
⑭ End
⑮ 输出结果。

⑯ 结束。

该算法有内外两层循环。

内循环模拟的是在给定温度下系统达到热平衡的过程。

每次循环随机地产生一个新解,然后按照Metropolis 准则,随机地接受该解。

算法中Random(0,1),是一个在【0,1】间均匀分布的随机数发生器,与从解i 到劣解j 的转移概率相结合,模拟系统是否接受了劣解j 。

外循环模拟的是温度下降的过程,控制参数t k 起到与温度T 相类似的作用,表示的是第k 次循环时系统所处的温度。

算法中的Dorp(t k )是一个温度下降函数,它按照一定的原则实施温度的缓慢下降。

模拟退火算法与局部搜索算法很相似,二者最大的不同是模拟退火算法按照Metropolis 准则随机地接受一些劣解,即指标函数值大的解。

当温度比较高时,接受劣解的概率比较大,在初始高温下,几乎以接近100%的概率接受劣解。

随着温度的下降,接受劣解的概率逐渐减小,直到当温度趋于0时,接受劣解的概率也同时趋于0。

这样,将有利于算法从局部最优解中跳出,求的问题的全局最优解。

模拟退火算法在现实应用中非常的有效,大多数情况下都能找到最优解结束,即便不是最优解,也是一个可以接受的满意解。

即使是最差的结果,与最优解的差距也不是很大。

该算法的研究有待进一步加深。

相关文档
最新文档