遗传算法概述

遗传算法概述
遗传算法概述

遗传算法概述

摘要:遗传算法(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)

),()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=1000

011

H1=0

1

* ,Pd=5/6

*

*

*

*

H2=*

*

*

* ,Pd=1/6

*

10

模式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 是最佳种群所要求的期望副本数,是一个经验值,对于一个不

大的种群来说,可能在~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)

⑥否则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)

第六次循环:

从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)

???? ??-=-=-=---------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)=>

?

转④ ? 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。这样,将有利于算法从局部最优解中跳出,求的问题的全局最优解。

模拟退火算法在现实应用中非常的有效,大多数情况下都能找到最优解结束,即便不是最优解,也是一个可以接受的满意解。即使是最差的结果,与最优解的差距也不是很大。该算法的研究有待进一步加深。

自适应遗传算法讲解学习

自适应遗传算法

自适应遗传算法 一.主要流程: 1. 参数的初始化。设定遗传种群规模N ,阵元数M ,信源数P 等。 2. 编码。采用十进制编码方法。 3. 初始种群的产生。随机数生成。 4. 适应度函数的评价。选取 ()() R P ΘA )tr f = (1) 其中, H 1H )(A A A A P A -= (2) P A 是A 的投影矩阵,A 是阵列流型。 ∑==L i L 1 H 1XX R ) (3) R )是数据协方差矩阵的最大似然估计。 5. 选择。比例选择方法与精英选择方法结合使用,在当代种群中选择优良个体遗传到下一代。既保证了种群的多样性,也使最优个体得以保留。 1)比例选择方法(赌轮盘法):每个个体被选中的概率与它的适应度函数值大小成正比,即适应度函数越高的个体被选中的概率也就越高。 2)精英选择方法:让种群中适应度函数值最高的个体不进行配对交叉,直接复制到下一代中。但是容易陷入局部最优解,全局搜索能力差。 6. 交叉。按照概率P c 对种群中个体两两配对,进行交叉操作。本文中选取算数交叉的方式。 算数交叉:是由两个个体的线性组合来产生新的个体,假设第t 代的两个个体为A (t)、B (t),则算数交叉后产生的新个体是

()()()()t t t A B A αα-+=+11 (4) ()()()()t t t B A B αα-+=+11 (5) 其中,α选取(0,1)之间的随机数。 交叉概率:使交叉概率随着遗传代数的增长,逐渐减小,目的是进化前期注重交叉运算,全局搜索能力强。 2.02cos *4.0+?? ? ??*=πK T P c (6) 其中,T 是进化代数,K 是总进化次数。 7. 变异。按照概率P m 对种群个体进行变异。本文中选取均匀变异的方式。 均匀变异:如某基因座上的基因值为X k ,其取值范围为[Umin,Umax],对其进行变异后的值为 )U -r(U +U =X min max min k (7) 其中,r 选取[0,1]之间的随机数。 变异概率:使变异概率随着遗传代数的增长,逐渐增加,目的是进化后期注重变异运算,局部搜索能力强。 005.02sin *045.0+?? ? ??*=πK T P m (8) 其中,T 是进化代数,K 是总进化次数。 8. 终止条件判断。若已达到设定的最大遗传代数,则迭代终止,输出最优解;若不满足终止条件,则返回第4步,进行迭代寻优过程。

遗传算法参数调整实验报告(精)

遗传算法参数调整实验报告 算法设计: 编码方案:遍历序列 适应度函数:遍历路程 遗传算子设计: 选择算子:精英保留+轮盘赌 交叉算子:Pxover ,顺序交叉、双亲双子, 变异算子:Pmutation ,随机选择序列中一个染色体(城市)与其相邻染色体交换 首先,我们改编了我们的程序,将主函数嵌套在多层迭代之内,从外到内依此为: 过程中,我们的程序将记录每一次运行时种群逐代进化(收敛)的情况,并另外记录总体测试结果。 测试环境: AMD Athlon64 3000+ (Overclock to 2.4GHz)

目标:寻求最优Px 、Pm 组合 方式:popsize = 50 maxgen = 500 \ 10000 \ 15000 Px = 0.1~0.9(0.05) Pm = 0.01~0.1(0.01) count = 50 测试情况:运行近2万次,时间约30小时,产生数据文件总共5.8GB 测试结果:Px, Pm 对收敛结果的影响,用灰度表示结果适应度,黑色为适应度最低 结论:Px = 0.1 ,Pm = 0.01为最优,并刷新最优结果19912(之前以为是20310),但20000次测试中最优解只出现4次,程序需要改进。 Maxgen = 5000 Pm=0.01 Px = 0.1 Maxgen = 10000 0.1 0.9 Px = 0.1 0.9 0.1

目标:改进程序,再寻求最优参数 方式:1、改进变异函数,只保留积极变异; 2、扩大测试范围,增大参数步进 popsize = 100 \ 200 \ 400 \ 800 maxgen = 10000 Px = 0.1 \ 0.5 \ 0.9 Pm = 0.01 \ 0.04 \ 0.07 \ 0.1 count = 30 测试情况:运行1200次,时间8小时,产生数据文件600MB 测试结果: 结论:Px = 0.1,Pm = 0.01仍为最优,收敛情况大有改善,10000代基本收敛到22000附近,并多次达到最优解19912。变异函数的修改加快了整体收敛速度。 但是收敛情况对Pm并不敏感。另外,单个种群在遗传过程中收敛速度的统计,将是下一步的目标。

4遗传算法与函数优化

第四章遗传算法与函数优化 4.1 研究函数优化的必要性: 首先,对很多实际问题进行数学建模后,可将其抽象为一个数值函数的优化问题。由于问题种类的繁多,影响因素的复杂,这些数学函数会呈现出不同的数学特征。除了在函数是连续、可求导、低阶的简单情况下可解析地求出其最优解外,大部分情况下需要通过数值计算的方法来进行近似优化计算。 其次,如何评价一个遗传算法的性能优劣程度一直是一个比较难的问题。这主要是因为现实问题种类繁多,影响因素复杂,若对各种情况都加以考虑进行试算,其计算工作量势必太大。由于纯数值函数优化问题不包含有某一具体应用领域中的专门知识,它们便于不同应用领域中的研究人员能够进行相互理解和相互交流,并且能够较好地反映算法本身所具有的本质特征和实际应用能力。所以人们专门设计了一些具有复杂数学特征的纯数学函数,通过遗传算法对这些函数的优化计算情况来测试各种遗传算法的性能。 4.2 评价遗传算法性能的常用测试函数 在设计用于评价遗传算法性能的测试函数时,必须考虑实际应用问题的数学模型中所可能呈现出的各种数学特性,以及可能遇到的各种情况和影响因素。这里所说的数学特性主要包括: ●连续函数或离散函数; ●凹函数或凸函数; ●二次函数或非二次函数; ●低维函数或高维函数; ●确定性函数或随机性函数; ●单峰值函数或多峰值函数,等等。 下面是一些在评价遗传算法性能时经常用到的测试函数: (1)De Jong函数F1: 这是一个简单的平方和函数,只有一个极小点f1(0, 0, 0)=0。

(2)De Jong 函数F2: 这是一个二维函数,它具有一个全局极小点f 2(1,1) = 0。该函数虽然是单峰值的函数,但它却是病态的,难以进行全局极小化。 (3)De Jong 函数F3: 这是一个不连续函数,对于]0.5,12.5[--∈i x 区域内的每一个点,它都取全局极小值 30),,,,(543213-=x x x x x f 。

遗传算法的流程图

一需求分析 1.本程序演示的是用简单遗传算法随机一个种群,然后根据所给的交叉率,变异率,世代数计算最大适应度所在的代数 2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的命令;相应的输入数据和运算结果显示在其后。3.测试数据 输入初始变量后用y=100*(x1*x1-x2)*(x1*x2-x2)+(1-x1)*(1-x1)其中-2.048<=x1,x2<=2.048作适应度函数求最大适应度即为函数的最大值 二概要设计 1.程序流程图 2.类型定义 int popsize; //种群大小 int maxgeneration; //最大世代数 double pc; //交叉率 double pm; //变异率 struct individual

{ char chrom[chromlength+1]; double value; double fitness; //适应度 }; int generation; //世代数 int best_index; int worst_index; struct individual bestindividual; //最佳个体 struct individual worstindividual; //最差个体 struct individual currentbest; struct individual population[POPSIZE]; 3.函数声明 void generateinitialpopulation(); void generatenextpopulation(); void evaluatepopulation(); long decodechromosome(char *,int,int); void calculateobjectvalue(); void calculatefitnessvalue(); void findbestandworstindividual(); void performevolution(); void selectoperator(); void crossoveroperator(); void mutationoperator(); void input(); void outputtextreport(); 4.程序的各函数的简单算法说明如下: (1).void generateinitialpopulation ()和void input ()初始化种群和遗传算法参数。 input() 函数输入种群大小,染色体长度,最大世代数,交叉率,变异率等参数。 (2)void calculateobjectvalue();计算适应度函数值。 根据给定的变量用适应度函数计算然后返回适度值。 (3)选择函数selectoperator() 在函数selectoperator()中首先用rand ()函数产生0~1间的选择算子,当适度累计值不为零时,比较各个体所占总的适应度百分比的累计和与选择算子,直到达到选择算子的值那个个体就被选出,即适应度为fi的个体以fi/∑fk的概率继续存在; 显然,个体适应度愈高,被选中的概率愈大。但是,适应度小的个体也有可能被选中,以便增加下一代群体的多样性。 (4)染色体交叉函数crossoveroperator() 这是遗传算法中的最重要的函数之一,它是对个体两个变量所合成的染色体进行交叉,而不是变量染色体的交叉,这要搞清楚。首先用rand ()函数产生随机概率,若小于交叉概率,则进行染色体交叉,同时交叉次数加1。这时又要用rand()函数随机产生一位交叉位,把染色

第三章-遗传算法的理论基础

第三章 遗传算法的理论基础 遗传算法有效性的理论依据为模式定理和积木块假设。模式定理保证了较优的模式(遗传算法的较优解)的样本呈指数级增长,从而满足了寻找最优解的必要条件,即遗传算法存在着寻找到全局最优解的可能性。而积木块假设指出,遗传算法具备寻找到全局最优解的能力,即具有低阶、短距、高平均适应度的模式(积木块)在遗传算子作用下,相互结合,能生成高阶、长距、高平均适应度的模式,最终生成全局最优解。Holland 的模式定理通过计算有用相似性,即模式(Pattern)奠定了遗传算法的数学基础。该定理是遗传算法的主要定理,在一定程度上解释了遗传算法的机理、数学特性以及很强的计算能力等特点。 3.1 模式定理 不失一般性,本节以二进制串作为编码方式来讨论模式定理(Pattern Theorem)。 定义3.1 基于三值字符集{0,1,*}所产生的能描述具有某些结构相似性的0、1字符串集的字符串称作模式。 以长度为5的串为例,模式*0001描述了在位置2、3、4、5具有形式“0001”的所有字符串,即(00001,10001) 。由此可以看出,模式的概念为我们提供了一种简洁的用于描述在某些位置上具有结构相似性的0、1字符串集合的方法。 引入模式后,我们看到一个串实际上隐含着多个模式(长度为 n 的串隐含着2n 个模式) ,一个模式可以隐含在多个串中,不同的串之间通过模式而相互联系。遗传算法中串的运算实质上是模式的运算。因此,通过分析模式在遗传操作下的变化,就可以了解什么性质被延续,什么性质被丢弃,从而把握遗传算法的实质,这正是模式定理所揭示的内容 定义3.2 模式H 中确定位置的个数称作该模式的阶数,记作o(H)。比如,模式 011*1*的阶数为4,而模式 0* * * * *的阶数为1。 显然,一个模式的阶数越高,其样本数就越少,因而确定性越高。 定义3.3 模式H 中第一个确定位置和最后一个确定位置之间的距离称作该模式的定义距,记作)(H δ。比如,模式 011*1*的定义距为4,而模式 0* * * * *的定义距为0。 模式的阶数和定义距描述了模式的基本性质。 下面通过分析遗传算法的三种基本遗传操作对模式的作用来讨论模式定理。令)(t A 表示第t 代中串的群体,以),,2,1)((n j t A j =表示第t 代中第j 个个体串。 1.选择算子 在选择算子作用下,与某一模式所匹配的样本数的增减依赖于模式的平均适值,与群体平均适值之比,平均适值高于群体平均适值的将呈指数级增长;而平均适值低于群体平均适值的模式将呈指数级减少。其推导如下: 设在第t 代种群)(t A 中模式所能匹配的样本数为m ,记为),(t H m 。在选择中,一个位串 j A 以概率/j j i P f f =∑被选中并进行复制,其中j f 是个体)(t A j 的适应度。假设一代中群体 大小为n ,且个体两两互不相同,则模式H 在第1+t 代中的样本数为:

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

遗传算法的参数整定报告

基于遗传算法的PID控制器参数整定报告 一、遗传算法。 遗传算法(GAs)是基于自然界生物进化机制的搜索寻优技术。用遗传算法来整定PID参数,可以提高优化性能,对控制系统有良好的控制精度、动态性能和鲁棒性。 一般的,Gas包括三个基本要素:复制、交叉和突变。 二、PID Optimal-Tuning PID控制:对偏差信号e(t)进行比例、积分和微分运算变换后形成的一种控制规律。 (1) 可调参数:比例度δ(P)、积分时间Ti(I)、微分时间Td(D)。 通常,PID控制准则可以写成下面传递函数的形式: ) 1( ) (s T T s K s G d i p + + =(2) Kp、Ti和Td分别是比例放大率、积分时间常量和微分时间常量。 1)比例控制(P):是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误 差(Steady state error),比例度减小,稳态误差减小; 2)积分(I)控制:在积分控制中,控制器的输出与输入误差信号的积分成正比关系。 3)微分(D)控制:在微分控制中,控制器的输出与输入误差信号()()()()? ? ? ? ? ? + + =?t e dt d T d e T t e K t u d t i p0 1 τ τ

的微分(即误差的变化率)成正比关系。 文中,性能指标是误差平方的时间加权积分,表示为: ),,1,0(,0 2n k dt e t J i t k ==? (3) 其中n 是非负整数,i t 是积分周期。此外,其他标准项如超调量、上升时间和稳定时间也被一个合成性能指标选择: ))(1(s s r r c t c t c os J ++= (4) s r os t t 、、分别代表超调量、上升时间和稳定时间。s r c 、c 两个系数有用户定义或决定。预期的性能指标的最下化可以认为是小的超调量、短的上升时间和稳定时间。 三个PID 参数的编码方式如下: 10101011:S 1010100011100111 p K i K d K p K 、i K 和d K 都是八位二进制字符格式。 自适应函数的选择关系到性能指标,如: 101)(J J F F == (5) 实际上,)(J F 可以是任何一个能切实表达F 和J 关系的非线性函数。 遗传操作是模拟生物基因遗传的操作,从优化搜索的角度而言,遗传操作可使问题的解一代一代地优化,并逼近最优解,主要包括三个遗传算子:选择、交叉和变异。关于他们的具体方法这里不在赘述。 三、 计算机实现 作者编程使用的事TURBO C 。程序包括两个部分:一个是仿真PID 控制系统的闭环阶跃响应;另一个是实施对一代所有成员的遗传算法的仿真,这里遗传算法将一代作为一个整体。在第一代生物的二进制代码随机产生之后,这个过程重复直至迭代次数达到预选的次数。 步长、PID 参数X 围、性能指标、自适应函数和方法得时间延迟都是从一个文件中读取。而遗传算法的的参数,诸如世代数、交叉概率、变异概率、选择概率等通过菜单选择。 整个闭环系统仿真的完成可以用四阶龙格库塔法或直接时域计算。在程序中,复制的实现是通过轮盘赌博法的线性搜索,面积加权于上一代成员的适应值。交叉发生在每一对复制产生的成员。 交叉操作是将一个随机产生的一个在0到1之间数与交叉概率比较决定是否需要交叉。如果需要交叉,则在1到47之间随机产生一个交叉位置代码。变异,对新一代所有成员都随机产生一个0到1之间的数与变异概率比较,然后再决定是否改变代码的一位。同理,反转也是这样判定和操作的。另一需要说明的事,两个反转位置代码是在1~48之间随机选择的。同样,

遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )

GATBX遗传算法工具箱函数及实例讲解 基本原理: 遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概 率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。

Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 运用遗传算法工具箱: 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。 以GATBX为例,运用GATBX时,要将GATBX解压到Matlab下的toolbox文件夹里,同时,set path将GATBX文件夹加入到路径当中。 这块内容主要包括两方面工作:1、将模型用程序写出来(.M文件),即目标函数,若目标函数非负,即可直接将目标函数作为适应度函数。2、设置遗传算法的运行参数。包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

最新最全的遗传算法工具箱及说明

最新最全的遗传算法工具箱Gaot_v5及说明 Gaot_v5下载地址:https://www.360docs.net/doc/e116442636.html,/mirage/GAToolBox/gaot/gaotv5.zip 添加遗传算法路径: 1、 matlab的file下面的set path把它加上,把路径加进去后在 2、 file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下,就OK了

遗传算法工具箱Gaot_v5包括许多实用的函数,各种算子函数,各种类型的选择方式,交叉、变异方式。这些函数按照功能可以分成以下几类:

主程序 ga.m提供了 GAOT 与外部的接口。它的函数格式如下: [x endPop bPop traceInfo]=ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps, selectFn,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 输出参数及其定义如表 1 所示。输入参数及其定义如表 2 所示。 表1 ga.m的输出参数 输出参数 定义 x 求得的最好的解,包括染色体和适应度 endPop 最后一代染色体(可选择的) bPop 最好染色体的轨迹(可选择的) traceInfo 每一代染色体中最好的个体和平均适应度(可选择的) 表2 ga.m的输入参数 表3 GAOT核心函数及其它函数

核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】

遗传算法基因对比

2000年4月系统工程理论与实践第4期  文章编号:100026788(2000)0420007206 遗传算法求解旅行商问题时的基因片段保序 梁艳春1,2,冯大鹏1,周春光3 (1.吉林大学数学系,吉林长春130012;21中国科学院现代制造CAD CAM技术开放实验室,辽宁沈阳110015;31吉林大学计算机科学系,吉林长春130012) 摘要: 针对基于遗传算法的T SP问题求解,尝试了多种遗传操作,分析了这些操作在遗传算法中的 作用,讨论了基因片段保序在利用遗传算法求解T SP问题中的重要性. 关键词: 遗传算法;旅行商问题;基因片段 中图分类号: T P301 α O rder P reserving of Gene Secti on fo r So lving T raveling Sales m an P rob lem s U sing Genetic A lgo rithm s L I AN G Yan2chun1,2,FEN G D a2p eng1,ZHOU Chun2guang1 (1.J ilin U n iversity,Changchun130012;2.Open L abo rato ry of CAD CAM T echno logy fo r A dvanced M anufactu ring,Ch inese A cadem y of Sciences,Shenyang110015) Abstract: Several genetic operati on s are tried and the functi on s of these operati on s are analyzed based on so lving traveling sales m an p rob lem s u sing genetic algo rithm s.T he sign ificance of the o rder p reserving of the gene secti on in u sing genetic algo rithm s is discu ssed to so lve traveling sales m an p rob lem s. Keywords: genetic algo rithm s;traveling sales m an p rob lem s;gene secti on 1 前言 旅行商问题(T raveling Salsem an P rob lem s,T SP)是一个典型的、易于描述却难于处理的N P完全问题,是许多领域内出现的多种复杂问题的集中概括和简化形式.对于T SP问题,没有确定的算法能够在多项式时间内得到问题的解.因此,有效地解决T SP问题,在可计算理论上具有重要的理论意义,同时具有重要的实际应用价值.近十几年来,模拟自然进化的过程用以求解T SP问题的研究十分活跃[1~12],这方面的工作有基于遗传算法的研究[1~10],有基于进化规划的研究[11,12],其中以前者居多. T SP问题因其典型已成为许多启发式的搜索、优化算法的间接比较标准.遗传算法就其本质来说,主要是处理复杂问题的一种鲁棒性强的启发式随机搜索算法.遗传算法在T SP问题求解方面的应用研究,对于构造适当的遗传算法框架,建立有效的遗传操作,以及有效地解决T SP问题等具有多方面的重要意义.本文针对基于遗传算法的T SP问题求解,尝试了多种遗传操作,分析了各种操作在遗传算法中的作用,讨论了基因片段保序在利用遗传算法求解T SP问题中的重要性. 2求解TSP问题的遗传算法 2.1TSP问题的数学描述 T SP问题的描述十分简单,即寻找一条最短的遍历n个城市的路径,其数学描述可表达为搜索整数子集X={1,2,…,n}(X的元素表示对n个城市的编号)的一个排列Π={c1,c2,…,c n},使 α收稿日期:1998208224 资助项目:国家自然科学基金(19872027);符号计算与知识工程国家教育部开放研究实验室资助

遗传算法的计算性能的统计分析

第32卷 第12期2009年12月 计 算 机 学 报 CH INESE JOURNA L OF COMPU TERS Vol.32No.12 Dec.2009 收稿日期:2008210219;最终修改稿收到日期:2009209227.本课题得到国家自然科学基金(60774084)资助.岳 嵚,男,1977年生,博士研究生,主要研究方向为进化算法.E 2mail:yueqqin@si https://www.360docs.net/doc/e116442636.html,.冯 珊,女,1933年生,教授,博士生导师,主要研究领域为智能决策支持系统. 遗传算法的计算性能的统计分析 岳 嵚 冯 珊 (华中科技大学控制科学与工程系 武汉 430074) 摘 要 通过对多维解析函数的多次重复计算并对计算结果进行统计分析来讨论遗传算法的可靠性和可信度,结果表明:遗传算法的计算结果具有一定的稳定性,可以通过采用多次重复计算的方法提高计算结果的可信度,并用以评价算法及其改进的实际效果.关键词 遗传算法;计算可靠性;置信区间 中图法分类号TP 18 DOI 号:10.3724/SP.J.1016.2009.02389 The Statistical Analyses for Computational Performance of the Genetic Algorithms YU E Qin FENG Shan (Dep artment of Contr ol Science and Eng ineering ,H uazhong University of Science and T ech nology ,W u han 430074) Abstr act In this paper,the author s discuss the reliability of the GAs by reiteratively computing the multi 2dimensional analytic functions and statistical analysis of the results.The analysis re 2sults show that the GAs have certain stability;it could improve the reliability by reiteratively computation and estimates the effects of improvements. Keywor ds genetic algorithms;computational stability;confidence interval 1 遗传算法的随机性 遗传算法是将生物学中的遗传进化原理和随机优化理论相结合的产物,是一种随机性的全局优化算法[1].遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高.现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明.遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初始种群对计算结果影响较大.但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题 进行多次重复计算后取平均值的方法,提高遗传算 法在实际计算中的准确性和可信度. 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决.遗传算法对这类问题的计算结果也难达到精确的最优解.这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣. 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数.使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果.本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进

matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解 最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。还好用遗传算法的工箱予以实现了,期间也遇到了许多问题。借此与大家分享一下。 首先,我们要熟悉遗传算法的基本原理与运算流程。 基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。 Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 其次,运用遗传算法工具箱。 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS 就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )

matlab遗传算法工具箱函数及实例讲解(转引) 核心函数:? (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数?【输出参数】? ?pop--生成的初始种群?【输入参数】? ?num--种群中的个体数目? ?bounds--代表变量的上下界的矩阵? ?eevalFN--适应度函数? ?eevalOps--传递给适应度函数的参数? ?options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如? precision--变量进行二进制编码时指定的精度? F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)? (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts.? ?termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs ,mutOps)--遗传算法函数?【输出参数】? x--求得的最优解? endPop--最终得到的种群?

bPop--最优种群的一个搜索轨迹?【输入参数】? bounds--代表变量上下界的矩阵? evalFN--适应度函数? evalOps--传递给适应度函数的参数? startPop-初始种群? opts[epsilon prob_ops display]--opts(1:2)等同于initializega 的options参数,第三个参数控制是否输出,一般为0。如[1e-6 termFN--终止函数的名称,如['maxGenTerm']? termOps--传递个终止函数的参数,如[100]? selectFN--选择函数的名称,如['normGeomSelect']? selectOps--传递个选择函数的参数,如[0.08]? xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']? xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]? mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']? mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]?注意】matlab工具箱函数必须放在工作目录下?【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0=x=9?【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08?【程序清单】?

(完整版)遗传算法的基本原理

遗传算法的基本原理和方法 一、编码 编码:把一个问题的可行解从其解空间转换到遗传算法的搜索空间的转换方法。 解码(译码):遗传算法解空间向问题空间的转换。 二进制编码的缺点是汉明悬崖(Hamming Cliff),就是在某些相邻整数的二进制代码之间有很大的汉明距离,使得遗传算法的交叉和突变都难以跨越。 格雷码(Gray Code):在相邻整数之间汉明距离都为1。 (较好)有意义的积木块编码规则:所定编码应当易于生成与所求问题相关的短距和低阶的积木块;最小字符集编码规则,所定编码应采用最小字符集以使问题得到自然的表示或描述。 二进制编码比十进制编码搜索能力强,但不能保持群体稳定性。 动态参数编码(Dynamic Paremeter Coding):为了得到很高的精度,让遗传算法从很粗糙的精度开始收敛,当遗传算法找到一个区域后,就将搜索现在在这个区域,重新编码,重新启动,重复这一过程,直到达到要求的精度为止。 编码方法:

1、二进制编码方法 缺点:存在着连续函数离散化时的映射误差。不能直接反映出所求问题的本身结构特征,不便于开发针对问题的专门知识的遗传运算算子,很难满足积木块编码原则 2、格雷码编码:连续的两个整数所对应的编码之间仅仅只有一个码位是不同的,其余码位都相同。 3、浮点数编码方法:个体的每个基因值用某一范围内的某个浮点数来表示,个体的编码长度等于其决策变量的位数。 4、各参数级联编码:对含有多个变量的个体进行编码的方法。通常将各个参数分别以某种编码方法进行编码,然后再将他们的编码按照一定顺序连接在一起就组成了表示全部参数的个体编码。 5、多参数交叉编码:将各个参数中起主要作用的码位集中在一起,这样它们就不易于被遗传算子破坏掉。评估编码的三个规范:完备性、健全性、非冗余性。 二、选择 遗传算法中的选择操作就是用来确定如何从父代群体中按某种方法选取那些个体遗传到下一代群体中的一种遗传运算,用来确定重组或交叉个体,以及被选个体将产生多少个子代个体。 常用的选择算子: 1、轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。

遗传算法的计算性能的统计分析

遗传算法遗传算法的计算性能的统计分析 岳嵚冯珊 (华中科技大学控制科学与工程系) 摘要:本文通过对多维解析函数的多次重复计算并对计算结果的进行统计分析来讨论遗传算法的可靠性和可信度,结果表明:遗传算法的计算结果具有一定的稳定性,可以通过采用多次重复计算的方法提高计算结果的可信度,并用以评价算法及其改进的实际效果。 关键词:遗传算法;计算可靠性;置信区间 分类号:TP18 1遗传算法的随机性 遗传算法是将生物学中的遗传进化原理和随机优化理论相结合的产物,是一种随机性的全局优化算法[1]。遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高。现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明。遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初是始种群对计算结果影响较大。但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题进行多次重复计算后取平均值的方法,提高遗传算法在实际计算中的准确性和可信度。 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决。遗传算法对这类问题的计算结果也难达到精确的最优解。这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣。 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数。使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果。本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进型求解解析问题的计算效果,再把所得到的相关结论推广应用到复杂的工程实际问题中去。 遗传算法在实际使用中有多种形式的变型,经典遗传算法是遗传算法的最简单的形式,但是经典遗传算法并不理想。本文使用的是粗粒度并行遗传算法。粗粒度并行遗传算法是遗传算法的一个重要改进型。它具有比经典遗传算法更好的计算性能。 2算例、实验方法和实验结果 2.1算例 本文所使用的算例是Deb 函数: ]10,10[,)]4cos(10[10)(12?∈??+=∑=i n i i i Deb x n x x x f i π(1) Deb 函数是一个高维的非凸函数,该函数在点(9.7624,9.7624,…,9.7624)上取得最大

相关文档
最新文档