遗传算法概述

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

遗传算法概述

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

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

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

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

遗传算法综述

遗传算法综述 摘要:遗传算法(genetic algorithms,GA)是一类借鉴生物界自然选择和自然遗传机制的随机搜索算法,适用于处理传统搜索方法难以解决的复杂和非线性优化问题。遗传算法可广泛应用于组合优化、机器学习、自适应控制、设计和人工生命等领域,是21世纪有关智能计算中的重要技术之一。 本文通过对相关论文的查阅和整理,对遗传算法的研究现状和发展趋势进行了综述并谈论了一些自己的看法。 关键词:遗传算法研究现状发展趋势 引言:遗传算法是模拟遗传选择和自然淘汰的生物进化过程的计算模型,由美国Michigan大学的Holland教授于1969年提出,后经DeJong、Goldberg 等人归纳总结,形成一种新的全局优化搜索算法[1]。遗传算法以其简单通用、鲁棒性强、适于并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,取得了良好效果,并逐渐成为重要的智能算法之一。 1、遗传算法的基本原理 与传统搜索算法不同, 遗传算法从一组随机产生的初始解,称为群体, 开始搜索过程。群体中的每个个体是问题的一个解,称为染色体。这些染色体在后续迭代中不断进化, 称为遗传。遗传算法主要通过交叉、变异、选择运算实现。交叉或变异运算生成下一代染色体, 称为后代。染色体的好坏用适应度来衡量。根据适应度的大小从上一代和后代中选择

一定数量的个体, 作为下一代群体, 再继续进化, 这样经过若干代之后, 算法收敛于最好的染色体, 它很可能就是问题的最优解或次优解。“遗传算法中使用适应度这个概念来度量群体中的各个个体的在优化计算中有可能到达最优解的优良程度。度量个体适应度的函数称为适应度函数。适应度函数的定义一般与具体求解问题有关”[2]。 遗传算法包含两个数据转换操作,一个是从表现型到基因型的转换,将搜索空间的参数或解转换成遗传空间中的染色体或个体,这个过程称为编码(coding)。另一个是从基因型到表现型的转换,即将个体转化成搜索空间中的参数,这个过程称为译码(decode)。 图1展示了遗传算法的运行过程。 图1 遗传算法的运行过程示意图 2、遗传算法的研究现状 2.1 遗传算法研究方向[3] 在遗传算法的研究中,目前主要有三类研究方向: ⑴研究遗传算法本身的理论基础。 ⑵用遗传算法作为工具解决工程问题。主要是进行优化,关心的是能

自适应遗传算法讲解学习

自适应遗传算法

自适应遗传算法 一.主要流程: 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 。

遗传算法经典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表示待解码的二进制串的起始位置

遗传算法的流程图

一需求分析 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()函数随机产生一位交叉位,把染色

遗传算法综述

3D S可以方便灵活地实现对动画帧中的节点、平面、边界、颜色和轨迹的控制,同时对于物体变形测试,轴心点设置以及段信息的获取和设置也能方便准确地进行。而keyscri p t语言的优点体现在于其精确的数值计算,它可以对大量的复杂无序的动作进行随机计算,节省了制作时间。利用keyscri p t编辑器还能方便地进行语法检查并能直接执行无语法错误的keyscri p t程序。3 内存管理方式 3D S使用了独特的Pharlap的虚拟内存管理技术(VMM 386),该技术使3D—Studi o能使用比物理内存RAM更大的空间。这种内存管理方式与W indow2 s T M的内存管理方式不同,因此一般不在W indow s T M中使用3D S,若要在W indow s T M中使用,则必须在W in2 dow s T M的system1in i中的[386Enh]段加入device= Pharlap1386,使W indow s T M可以使用Pharlap的内存管理方式。这种内存管理方式也有一些不足,如内存一旦被3D S使用将不被释放。 4 硬件环境 使用3D—Studi o410的最低配制要求是386(带协处理器)的主机,至少8兆的内存,20兆以上的硬盘空间,DO S313以上的操作系统。由于3D S中的许多图形渲染时都必须使用256色,且观看3D S自带的一些图片也必须在256色的模式下进行,所以需要SV GA或TV GA的显示器。输入系统除了键盘外还必须配有鼠标,也可选配数字化仪。由于3D S在进行图形渲染需要大容量的内存,同时还需要CPU进行大量的浮点运算,因此当CPU为Pen tium T M、内存为16兆以上,并使用高性能的显示卡时,3D S的动画制作功能才能得到完美体现。由于ln tel公司生产的CPU兼容的Cyrix、AM D等公司生产的CPU浮点运算能力较差,因此CPU首选还是ln tel公司的产品。外设还可选配数字化仪等设备,对于需要直接输出到磁带上,并使用电视进行播发的动画,则可选用专业用户级以上的逐帧录向设备。 总之,3D S是一个庞大的图形工作平台,学会使用它的各种命令,发挥软件的强大功能绘制出优秀的动画和图象,还需要有很多技巧。随着人们对3D S认识加深,以它为平台开发的动画产品必将更加丰富多彩。 参考文献 1 [美]S1D1E lli o t,P1L1M iller,G1G1Pyro s著1黄心渊等译《3D—Studi o技术精粹》1北京:清华大学出版社。 19951 2 黄心渊 左正兴编著1《3D—Studi o(310—410)技术与应用》1北京:清华大学出版社,19961 收稿日期:1996年11月18日 遗传算法综述 艾丽蓉 何华灿 (西北工业大学计算机系 西安710072) 摘 要 本文从计算智能与进化计算谈起,论述了遗传算法产生的思想及背景,遗传算法的应用与研究现状,以及遗传算法研究的基本内容与问题,最后对GA与传统搜索算法做一比较,并概述了GA在并行处理应用中的潜在优势。 关键词 计算智能 进化计算 遗传算法(GA) 0 序言 长久以来,人们一谈到人工智能就马上想到逻辑、规则、推理,而一谈到计算就联想到矩阵运算、解微分方程,似乎智能和计算是两股道上跑的车。人工智能在走过几十年的曲折道路之后,人们经过认真反思,不断探索新的研究途径,于是一个新的研究方向——计算智能应运而生。 研究思维模拟主要的道路有四条:基于心理学的符号处理方法,基于社会学层次型的智能体方法,基于生物进化的进化计算与自适应方法,以及基于生理学的人工神经网络方法。目前聚集在计算智能大旗下的主要是后两个学派的学者(加上从事模糊计算和混沌计算等方面的学者)。实际上,只要在计算机上,模拟人类思想,不管用什么方法,其本质的基础还是二进制数字计算,在当前符号处理主宰人工智能的情况下,更应强调遗传算法等以数字计算为基础的方法对推动人工智能发展有着特殊的作用。 计算技术的飞速发展使大规模的现实模拟成为可能,而针对社会和生物现象的模拟,对人类认识自身及其环境具有重大意义,进化是其中最为诱人的领域之一。人的智能是从哪里来的?归根结底是从生物进化中得来的,反映在遗传基因中,脑的结构变化也是通过基

遗 传 算 法 详 解 ( 含 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、设置遗传算法的运行参数。包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

遗传算法的参数整定报告

基于遗传算法的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之间随机选择的。同样,

种函数优化问题的混合遗传算法

一种函数优化问题的混合遗传算法 彭伟卢锡城 摘要将传统的局部搜索算法和遗传算法相结合,可以较好地解决遗传算法在达到全局最优解前收敛慢的问题.文章给出一种结合可变多面体法和正交遗传算法的混合算法.实验表明,它通过对问题的解空间交替进行全局和局部搜索,能更有效地求解函数优化问题. 关键词遗传算法,可变多面体法,正交交叉,函数优化. 中图法分类号TP A Hybrid Genetic Algorithm for Function Optimization PENG Wei LU Xi-cheng (Department of Computer Changsha Institute of Technology Changsha 410073) Abstract To overcome the problem of slow convergence before the genetic algorithms (GAs) reach the global optima, it is an effective way to combine the conventional local search algorithms with GAs. A new hybrid algorithm that incorporates the flexible polyhedron method into the orthogonal genetic algorithm (OGA) is presented in this paper. The experiments showed that it can achieve better performance by performing global search and local search alternately. The new algorithm can be applied to solve the function optimization problems efficiently. Key words Genetic algorithm, flexible polyhedron, orthogonal crossover, function optimization. 遗传算法(genetic algorithms)通过模拟生物进化的途径来在问题的解域中定向搜索最优解,在组合优化、机器学习、自适应控制、多目标决策等领域中有许多应用.对于传统方法较难求解的一些NP问题,遗传算法往往能得到更好的结果.但对传统方法已能较好解决的问题(如一般的非线性优化问题),它并不显示较强的优势.原因在于,遗传算法对问题特定的知识(如梯度、Hessian阵、某些定理等)利用较少.它主要采用群体搜索技术,通过对解的不断组合、随机改变以及对候选解的评估和选择来完成求解过程.在达到全局最优解前,它尚存在收敛慢的问题.设计遗传算法时往往需要在其通用性与有效性之间折衷.设计针对问题的特定遗传算子,可以更有效地求解问题,但缺乏通用性.另一种途径是将遗传算法与问题领域中一些传统的寻优方法(如爬山法、模拟退火法、牛顿法等)结合起来,可在保持算法一定的通用性时提高算法的效率.这类混合算法的基本框架如图1所示.

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

最新最全的遗传算法工具箱Gaot_v5及说明 Gaot_v5下载地址:https://www.360docs.net/doc/8414008786.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--最优种群的一个搜索轨迹 【输入参数】

混合遗传算法及其应用

混合遗传算法及其应用 辛海涛 (哈尔滨商业大学计算机与信息工程学院,黑龙江哈尔滨150028) 摘 要:给出一种结合梯度法和正交遗传算法的混合算法。实验表明,它通过对问题的解空间交替进行全局和局部 搜索,能更有效地求解函数优化问题。关键词:遗传算法;正交交叉;函数优化中图分类号:TP312 文献标识码:A 文章编号:1672-7800(2010)05-0059-02 0引言 遗传算法是近年来发展起来的一种新型优化算法,是基于 自然选择和遗传学机理的迭代自适应概率性搜索方法。它通过模拟生物进化的途径问题的解域中定向搜索最优解,在组合优化、机器学习、自适应控制、多目标决策等领域中有许多应用。 遗传算法的实现涉及5个主要因素:参数编码、初始群体的设定、评估函数(即适应函数)的设计、遗传操作的设计和算法控制参数的设定。对于传统方法较难求解的一些NP 问题,遗传算法往往能得到更好的结果。但对传统方法已能较好解决的问题(如一般的非线性优化问题),它并没有较强的优势。遗传算法主要采用群体搜索技术,通过对解的不断组合、随机改变以及对候选解的评估和选择来完成求解过程。在达到全局最优解前,它尚存在收敛慢的问题。设计遗传算法时往往需要在其通用性与有效性之间折衷。设计针对问题的特定遗传算子,可以更有效地求解问题,但缺乏通用性。另一种途径是将遗传算法与问题领域中一些传统的寻优方法(如爬山法、模拟退火法、牛顿法等)结合起来,可在保持算法一定的通用性时提高算法的效率。 本文考虑一类非线性函数优化问题,即: minf (x )x ∈D 其中f (x )是n 元连续函数,D 是R n 的有界子集。本文探讨将梯度法与遗传算法相结合的算法,梯度法对初始解的构成具有较强的依赖性,算法执行过程中难于发现新的可能存在最优解的区域。通过将它与遗传算法相结合,一方面可以利用其局部搜索能力,另一方面可通过遗传算法来不断“发现”新的更有希望的搜索区域,并动态调整可变多面体法的搜索方向,从而使算法具有更好的灵活性,也使算法更易于并行化。实验表明,对于求解上述非线性优化问题,混合遗传算法具有比传统遗传 算法和梯度法都好的性能。 1 混合遗传算法 1.1 编码方式 编码的实质是在问题的解空间与算法的搜索空间之间建 立一个映射。传统遗传算法一般采用一种将实数空间离散化的二进制编码方式。这种方式存在编码长度影响求解精度、操作费时、不直观等缺点,因而提出了实数的直接编码方式并表明可以获得更好的性能。在实数编码方式下,每个个体用一个n 维的实向量来表示,这种方式具有直观、易操作的优点,且可以针对它设计非传统的交叉算子。本文采用此编码方式。 1.2交叉和选择操作 正交遗传算法在非线性优化问题及其他组合优化问题中 已显示出其有效性,我们的算法采用了正交交叉算子。由两个父本交叉操作产生一组个体,从新个体和两个父本中选择最优的进入下一代群体。由于采用局部选择而不是全局选择,在一定程度上保持了群体的多样性。 1.3变异操作 在实数编码方式下,变异操作对个体X 的每个分量X [i ] 作用一个随机偏差量,即: X′[i ]=X [i ]+δ,i=1,2,…,n 在进化规划和进化策略中,广泛采用了高斯变异算子,用正态分布的随机变量来作为变异操作中的偏差量。 1.4局部搜索 在本文中,我们采用梯度法进行局部搜索,梯度法步骤如下: (1)选定ε>0为终止限。选定初始点X (0),令k =0。(2)计算△f (X (k ))。如果‖△f (X (k ))‖<ε,迭代停止,取近试 最优解X *=X (k ),否则,令S (k )=-△f (X (k )),从X (k )出发沿S (k )作一 软件导刊 Software Guide 第9卷%第5期 2010年5月Vol.9No.5May.2010 作者简介:辛海涛(1970-),男,黑龙江鹤岗人,硕士,哈尔滨商业大学计算机与信息工程学院副教授,研究方向为算法分析。

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

第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/8414008786.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].遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高.现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明.遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初始种群对计算结果影响较大.但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题 进行多次重复计算后取平均值的方法,提高遗传算 法在实际计算中的准确性和可信度. 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决.遗传算法对这类问题的计算结果也难达到精确的最优解.这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣. 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数.使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果.本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进

遗传算法概述

第一章 遗传算法概述 2.1 遗传算法的原理 遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种概率搜索算法。遗传算法是通过模拟生物在自然界中的进化过程而形成的一种优化算法。它的基本过程是:先随机生成规模为m 的初始群体,对连续优化问题即为n R 中的m 个点},,,{,},,,,{21112111m n m m m n x x x x x x x x ==的集合, },,,{21k sn k s k s x x x 称为个体或者染色体,通过对该群体使用遗传操作(包括选择、 交叉、变异遗传算子),得到m 个新的个体,这称作是群体的一代进化,相当于通常优化算法的一次迭代。不断重复这一过程,可看作是群体的逐代演化,直到得到满足给出条件的问题解。 可以看出,遗传算法的关键是进化过程中使用的遗传操作即选择、交叉和变异等算子,这些算子决定了下一代个体的具体位置。 选择策略对算法性能的影响有举足轻重的作用。常用的是轮盘选择和精英选择。 a. 轮盘选择(roulette wheel selection ) 选择的基本依据是个体的适应值,对于最小化问题,个体适应值取为)()(x f K x f -=',其中K 为一足够大的正数。定义第i 个体的选择概率为 ∑=''=n i i i i x f x f p 1)() ( (3) 其意义是个体适应值在群体总适应值中所占的比例。生成一个[0,1]内的随机数r ,若i i p p p r p p p +++≤<+++- 21110,假设00=p ,则选择个体i 。 b. 精英选择(elitist selection ) 当下一代群体的最佳个体适应值小于当前群体最佳个体的适应值,则将当前群体最佳个体或者适应值大于下一代最佳个体适应值的多个个体直接复制到下一代,随机替代或替代最差的下一代群体中的相应数量的个体。 交叉与变异算子的选取与编码方式有关,最初Holland[5] 提出的遗传算法是采用二进制编码来表现个体,后来发现对连续优化问题采用浮点编码可以达到更好的效果,因此越来越多地使用浮点编码,下述的交叉、变异算子针对浮点编码。

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来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

相关文档
最新文档