kenan88 发表于 2006-5-1 21:33:18

遗传算法

遗传算法<FONT face="宋体, MS Song">(GeneticAlgorithm</FONT>,简称<FONT face="宋体, MS Song">GA)</FONT>是一种基于进化论优胜劣汰、适者生存的物种遗传思想的搜索算法。本世纪<FONT face="宋体, MS Song">50</FONT>年代初,由于一些生物学家尝试用计算机模拟生物系统,从而产生了<FONT face="宋体, MS Song">GA</FONT>的基本思想。美国密执根大学的霍勒德(<FONT face="宋体, MS Song">J.H.Holland</FONT>)于<FONT face="宋体, MS Song">70</FONT>年代初提出并创立了遗传算法。遗传算法作为一种解决复杂问题的崭新的有效优化方法,近年来得到了广泛的实际应用,同时也渗透到人工智能、机器学习、模式识别、图像处理、软件技术等计算机学科领域。<FONT face="宋体, MS Song">GA</FONT>在机器学习领域中的一个典型应用就是利用<FONT face="宋体, MS Song">GA</FONT>技术作为规则发现方法应用于分类系统。<BR><BR>  遗传算法将个体的集合──群体作为处理对象,利用遗传操作──交换和突变,使群体不断<FONT face="宋体, MS Song">"</FONT>进化<FONT face="宋体, MS Song">"</FONT>,直到成为满足要求的最优解。<BR><BR>  在霍勒德的<FONT face="宋体, MS Song">GA</FONT>算法中采用二进制串来表示个体。考虑到物种的进化或淘汰取决于它们在自然界中的适应程度,<FONT face="宋体, MS Song">GA</FONT>算法为每一个体计算一个适应值或评价值,以反映其好坏程度。因而,个体的适应值越高,就有更大的可能生存和再生,即它的表示特征有更大的可能出现在下一代中。遗传操作<FONT face="宋体, MS Song">"</FONT>交换<FONT face="宋体, MS Song">"</FONT>旨在通过交换两个个体的子串来实现进化;遗传操作<FONT face="宋体, MS Song">"</FONT>突变<FONT face="宋体, MS Song">"</FONT>则随偶地改变串中的某一(些)位的值,以期产生新的遗传物质或再现已在进化过程中失去的遗传物质。<BR><BR>  霍勒德提出的遗传算法也称为简单遗传算法(<FONT face="宋体, MS Song">simplegeneticalgorithm,SGA</FONT>),是一种基本的遗传算法。<FONT face="宋体, MS Song">SGA</FONT>的处理过程如下:<BR>    <FONT face="宋体, MS Song">begin</FONT><BR>       <FONT face="宋体, MS Song">1.</FONT>选择适当表示,生成初始群体;<BR>     <FONT face="宋体, MS Song">      2.</FONT>评估群体;<BR>       <FONT face="宋体, MS Song">3.While</FONT>未达到要求的目标<FONT face="宋体, MS Song">do</FONT><BR>          <FONT face="宋体, MS Song">begin</FONT><BR>          <FONT face="宋体, MS Song">            1.</FONT>选择作为下一代群体的各个体;<BR>          <FONT face="宋体, MS Song">            2.</FONT>执行交换和突变操作;<BR>          <FONT face="宋体, MS Song">            3.</FONT>评估群体;<BR>          <FONT face="宋体, MS Song">end</FONT><BR>    <FONT face="宋体, MS Song">end</FONT><BR><BR>  因此,对于一个<FONT face="宋体, MS Song">SGA</FONT>算法来说主要涉及以下内容:<BR>   ·编码和初始群体生成;<BR>   ·群体的评价;<BR>   ·个体的选择;<BR>   ·交换;<BR>   ·突变;<BR><BR>

kenan88 发表于 2006-5-1 21:34:19

<B><FONT face="宋体, MS Song">1.</FONT></B><B>编码和初始群体的生成</B><BR><BR>  <FONT face="宋体, MS Song">GA</FONT>的工作基础是选择适当的方法表示个体和问题的解(作为进化的个体)。<FONT face="宋体, MS Song">SGA</FONT>要求个体均以<FONT face="宋体, MS Song">0</FONT>、<FONT face="宋体, MS Song">1</FONT>组成的串来表示,且所有个体串都是等长的。实际上,可以任意指定有限元素组成的串来表示个体,而不影响<FONT face="宋体, MS Song">GA</FONT>的基本算法。<BR><BR>  对于同一问题,可以有不同的编码表示方法。由于遗传操作直接作用于所表示的串上,因而不同的表示方法对<FONT face="宋体, MS Song">SGA</FONT>的效率和结果都会有影响。从原理上讲,任何取值为整数(或其它有限可枚举的值)的变量,均可用有限长度的<FONT face="宋体, MS Song">0</FONT>、<FONT face="宋体, MS Song">1</FONT>串来表示,而任何取值为连续实数的变量也均可用有限长度的<FONT face="宋体, MS Song">0</FONT>、<FONT face="宋体, MS Song">1</FONT>串来近似表示。因此,对任何一个变量,均可在一定程度上用<FONT face="宋体, MS Song">0</FONT>、<FONT face="宋体, MS Song">1</FONT>串来表示(编码),而当问题的解涉及多个变量时,则可用各变量对应串的拼接(形成一个长串)来表示相应解。<FONT face="宋体, MS Song"></FONT><BR><BR>  <FONT face="宋体, MS Song">SGA</FONT>处理的起始点并非一个个体,而是由一组个体所组成的群体。一般可用随机方法来产生初始群体,当然最好能考虑各个体的代表性和分布概率。<BR><BR line-break"><BR line-break">

kenan88 发表于 2006-5-1 21:39:30

<P>2. 群体的评价</P>
<P>  对群体中各个体的适应性评价常需直接利用待优化问题的目标函数。这一目标函数也可称为适应函数,个体选择(或再生)过程正是基于这一函数来评价当前群体中各个体的再生概率。<BR></P>

kenan88 发表于 2006-5-1 22:02:57

<B><FONT face="宋体, MS Song">3.</FONT></B><B>个体的选择</B><BR><BR>  选择操作是对自然界<FONT face="宋体, MS Song">"</FONT>适者生存<FONT face="宋体, MS Song">"</FONT>的模拟。评价值(目标函数值)较大的个体有较高的概率生存,即在下一代群体中再次出现。<BR><BR>  一种常用的选择方法是按比例选择,即若个体<FONT face="宋体, MS Song">i</FONT>的适应值(目标函数值)是<FONT face="宋体, MS Song">fi</FONT>,则个体<FONT face="宋体, MS Song">i</FONT>在下一代群体中复制(再生)的子代个数在群体中的比例将为:<BR>        <FONT face="宋体, MS Song">fi/</FONT>∑<FONT face="宋体, MS Song">fi</FONT>。<BR>  其中,∑<FONT face="宋体, MS Song">fi</FONT>示指所有个体适应值之和。<BR><BR><FONT face="宋体, MS Song">      </FONT>若当前群体与下一代群体的个数均维持在<FONT face="宋体, MS Song">n</FONT>,则每一个体<FONT face="宋体, MS Song">i</FONT>在下一代群体中出现的个数将是:<BR>        <FONT face="宋体, MS Song">n*fi/</FONT>∑<FONT face="宋体, MS Song">fi=fi/f,</FONT><BR>  其中<FONT face="宋体, MS Song">f=</FONT>∑<FONT face="宋体, MS Song">fi/n</FONT>是群体评价的平均值。<FONT face="宋体, MS Song">fi/f</FONT>的值不一定是一个整数。为了确定个体在下一代中的确切个数,可将<FONT face="宋体, MS Song">fi/f</FONT>的小数部分视为产生个体的概率。如,若<FONT face="宋体, MS Song">fi/f</FONT>为<FONT face="宋体, MS Song">2.7</FONT>,则个体<FONT face="宋体, MS Song">i</FONT>有<FONT face="宋体, MS Song">70</FONT>%的可能再生<FONT face="宋体, MS Song">2+1=3</FONT>个,而有<FONT face="宋体, MS Song">30</FONT>%的可能只再生<FONT face="宋体, MS Song">2</FONT>个。<BR>  <BR><FONT face="宋体, MS Song">      SGA</FONT>采用称为旋转盘(<FONT face="宋体, MS Song">roulettewheel</FONT>)的方法来产生各个体的再生数。方法是:<BR>  每一个体均对应于旋转盘中的一个以园点为中心的扇形区域,区域角度为<FONT face="宋体, MS Song">2</FONT>π<FONT face="宋体, MS Song">*fi/</FONT>∑<FONT face="宋体, MS Song">fi</FONT>,因而,各个体的区域角度之和等于<FONT face="宋体, MS Song">2</FONT>π。然后随机产生一个<FONT face="宋体, MS Song">0</FONT>到<FONT face="宋体, MS Song">2</FONT>π的值,根据该值所对应的区域,再生一个对应个体,直到产生的个体个数达到所需的数目,从而生成下一代的原始群体。这个群体还需进一步应用交换和突变操作。<FONT face="宋体, MS Song"></FONT><BR><BR line-break"><BR line-break">

kenan88 发表于 2006-5-1 22:37:45

<B><FONT face="宋体, MS Song">4.</FONT></B><B>交换</B><BR>  <BR><FONT face="宋体, MS Song">      </FONT>交换是<FONT face="宋体, MS Song">GA</FONT>中最主要的遗传操作,其工作于选择过程结束后产生的下一代群体。交换操作应用于从这一群体中随机选择的一系列个体对(串对)。<BR><BR>  <FONT face="宋体, MS Song">SGA</FONT>采用的是单点交换。设串长为<FONT face="宋体, MS Song">L</FONT>,交换操作将随机选择一个交换点(对应于从<FONT face="宋体, MS Song">1</FONT>到<FONT face="宋体, MS Song">L-1</FONT>的某个位置序号),紧接着两串交换点右边的子串互换,从而产生了两个新串。<BR><BR><FONT face="宋体, MS Song">      </FONT>例如,设A<FONT face="宋体, MS Song">1</FONT>,A<FONT face="宋体, MS Song">2</FONT>为要交换的串,交换点被随机选择为<FONT face="宋体, MS Song">7</FONT>(串长为<FONT face="宋体, MS Song">10</FONT>)。<BR>  <FONT face="宋体, MS Song"></FONT>A<FONT face="宋体, MS Song">1</FONT>=<FONT face="宋体, MS Song">1000011111</FONT><BR>  <FONT face="宋体, MS Song"></FONT>A<FONT face="宋体, MS Song">2</FONT>=<FONT face="宋体, MS Song">1111111011</FONT><BR><FONT face="宋体, MS Song">      </FONT>交换得新串A<FONT face="宋体, MS Song">1'</FONT>,A<FONT face="宋体, MS Song">2'</FONT>:<BR>  <FONT face="宋体, MS Song"></FONT>A<FONT face="宋体, MS Song">1'</FONT>=<FONT face="宋体, MS Song">1000011011</FONT><BR> <FONT face="宋体, MS Song"></FONT> A<FONT face="宋体, MS Song">2'</FONT>=<FONT face="宋体, MS Song">1111111111</FONT><BR><BR>  当然,并非所有选中的串对都会发生交换。这些串对发生交换的概率是<FONT face="宋体, MS Song">Pc</FONT>。<FONT face="宋体, MS Song">Pc</FONT>为事先指定的<FONT face="宋体, MS Song">0</FONT>-<FONT face="宋体, MS Song">1</FONT>之间的值,称为交换率。<BR><BR><FONT face="宋体, MS Song">5.</FONT>突变<BR><BR>  另一种遗传操作是突变,它一般在交换后进行。突变操作的对象是个体(即串),旨在改变串中的某些位的值,即由<FONT face="宋体, MS Song">0</FONT>变为<FONT face="宋体, MS Song">1</FONT>,或由<FONT face="宋体, MS Song">1</FONT>变为<FONT face="宋体, MS Song">0</FONT>。并非所有位都能发生变化,每一位发生变化的概率是<FONT face="宋体, MS Song">Pm</FONT>。<FONT face="宋体, MS Song">Pm</FONT>为事先指定的<FONT face="宋体, MS Song">0</FONT>-<FONT face="宋体, MS Song">1</FONT>之间的某个值,称为突变率。串中每一位的突变是独立的,即某一位是否发生突变并不影响其它位的变化。突变的作用是引进新的遗传物质或恢复已失去的遗传物质。例如,若群体的各串中每一位的值均为<FONT face="宋体, MS Song">0</FONT>,此时无论如何交换都不能产生有<FONT face="宋体, MS Song">1</FONT>的位,只有通过突变。<BR line-break"><BR line-break">

kenan88 发表于 2006-5-1 22:43:05

<B>遗传算法进化循环的一个例子</B><BR><BR><FONT face="宋体, MS Song">      </FONT>设每一串的长度为<FONT face="宋体, MS Song">10</FONT>,共有<FONT face="宋体, MS Song">4</FONT>个串组成第一代群体(<FONT face="宋体, MS Song">POP1</FONT>),<FONT face="宋体, MS Song"></FONT>目标函数(适应函数)为各位值之和,因而函数值为<FONT face="宋体, MS Song">0</FONT>-<FONT face="宋体, MS Song">10</FONT>。<FONT face="宋体, MS Song">POP1</FONT>中四个串的适应值分别为:<FONT face="宋体, MS Song">3</FONT>,<FONT face="宋体, MS Song">6</FONT>,<FONT face="宋体, MS Song">6</FONT>,<FONT face="宋体, MS Song">9</FONT>,所以再生的比例个数为:<FONT face="宋体, MS Song">0.5</FONT>,<FONT face="宋体, MS Song">1</FONT>,<FONT face="宋体, MS Song">1</FONT>,<FONT face="宋体, MS Song">1.5</FONT>。若最后实际的再生个数为<FONT face="宋体, MS Song">0</FONT>,<FONT face="宋体, MS Song">1</FONT>,<FONT face="宋体, MS Song">1</FONT>,<FONT face="宋体, MS Song">2</FONT>,则产生选择后的群体<FONT face="宋体, MS Song">POP2</FONT>。下一步对<FONT face="宋体, MS Song">POP2</FONT>中各串配对,随机选择串<FONT face="宋体, MS Song">1</FONT>和串<FONT face="宋体, MS Song">4</FONT>为一对,串<FONT face="宋体, MS Song">2</FONT>和串<FONT face="宋体, MS Song">3</FONT>为另一对。<BR><BR>  <FONT face="宋体, MS Song"></FONT>群体<FONT face="宋体, MS Song">POP1</FONT><BR>         串     <FONT face="宋体, MS Song"></FONT> 适应值<BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0000011100</FONT>    <FONT face="宋体, MS Song">3</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1000011111</FONT> <FONT face="宋体, MS Song"></FONT> <FONT face="宋体, MS Song"></FONT> <FONT face="宋体, MS Song">6</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0110101011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">6</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR><BR>  <FONT face="宋体, MS Song"></FONT>群体<FONT face="宋体, MS Song">POP2</FONT>(选择后)<BR>    <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song"></FONT>  串<FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song"></FONT> 适应值<BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1000011111</FONT> <FONT face="宋体, MS Song"></FONT>   <FONT face="宋体, MS Song">6</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0110101011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">6</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR><BR> <FONT face="宋体, MS Song"></FONT> 群体<FONT face="宋体, MS Song">POP3</FONT>(交换后)<BR>    <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song"></FONT>  串<FONT face="宋体, MS Song"></FONT> <FONT face="宋体, MS Song"></FONT>    适应值<BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1000011011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">5</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0110101011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">6</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111111</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">10</FONT><BR><BR> <FONT face="宋体, MS Song"></FONT> 群体<FONT face="宋体, MS Song">POP4</FONT>(突变后)<BR>    <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song"></FONT>  串    <FONT face="宋体, MS Song"></FONT>  适应值<BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1000011011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">5</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0110111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">7</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">1111111011</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR> <FONT face="宋体, MS Song"></FONT>      <FONT face="宋体, MS Song">0111111111</FONT> <FONT face="宋体, MS Song"></FONT>  <FONT face="宋体, MS Song">9</FONT><BR><BR><BR>  设交换率为<FONT face="宋体, MS Song">0.5</FONT>,即只有一对串发生交换,如串<FONT face="宋体, MS Song">1</FONT>和串<FONT face="宋体, MS Song">4</FONT>。若交换点随机选在位置<FONT face="宋体, MS Song">7</FONT>,因而交换后产生群体<FONT face="宋体, MS Song">POP3</FONT>。设突变率为<FONT face="宋体, MS Song">0.05</FONT>,即在<FONT face="宋体, MS Song">POP3</FONT>的<FONT face="宋体, MS Song">40</FONT>个位中,共有<FONT face="宋体, MS Song">2</FONT>个位发生突变,不妨设突变发生在串<FONT face="宋体, MS Song">2</FONT>的第<FONT face="宋体, MS Song">6</FONT>位和串<FONT face="宋体, MS Song">4</FONT>的第<FONT face="宋体, MS Song">1</FONT>位,从而产生群体<FONT face="宋体, MS Song">POP4</FONT>。注意,仅群体<FONT face="宋体, MS Song">POP4</FONT>代表新一代的群体(上一代为<FONT face="宋体, MS Song">POP1</FONT>),<FONT face="宋体, MS Song">POP2</FONT>和<FONT face="宋体, MS Song">POP3</FONT>只是一些进化中的中间群体。<BR><BR>  在<FONT face="宋体, MS Song">SGA</FONT>算法中,一般采用的群体大小为<FONT face="宋体, MS Song">30</FONT>到<FONT face="宋体, MS Song">200</FONT>,交换率为<FONT face="宋体, MS Song">0.5</FONT>到<FONT face="宋体, MS Song">1</FONT>,突变率为<FONT face="宋体, MS Song">0.001</FONT>到<FONT face="宋体, MS Song">0.05</FONT>。这些参数:群体大小、交换率、突变率,统称为<FONT face="宋体, MS Song">GA</FONT>的控制参数,应在算法运行前事先设定。当然,已有人研究了控制参数在算法运行中的自适应调整,以提高<FONT face="宋体, MS Song">GA</FONT>的灵活性。<BR><BR>  尽管遗传算法在实际优化问题中取得了很好的效果<FONT face="宋体, MS Song">,</FONT>目前对该算法尚无一个清楚完整的理论解释。霍勒德的图式理论<FONT face="宋体, MS Song">(schematheory)</FONT>和戈尔伯格(<FONT face="宋体, MS Song">Goldberg</FONT>,<FONT face="宋体, MS Song">1989</FONT>)的积木块假设仅在一定程度上解释了<FONT face="宋体, MS Song">GA</FONT>的工作原理。<BR><BR line-break"><BR line-break">

343381794 发表于 2006-5-4 19:17:48

<P>这个可以用在评分原则上么</P>

徐耀辉 发表于 2006-5-12 08:37:24

页: [1]
查看完整版本: 遗传算法