标签:如何 字符串 需要 个人 二进制 公司 色子 简单 循环
遗传算法,网上大把资料,但是总是说得云里来雾里去的,本来很简单的一个算法,当初研究的时候也弄了好久才初步入门。最近公司实行KPI,每个月需要发文一篇,好久之前就想写一写算法类的文章,刚刚刚好有这样的机会,写个系列,首先拿遗传算法来开刀。
【故事背景】:上帝造人,要求尽可能的达到完美状态。
【基因编码】:假设每一个人都是一个二进制的“字节”,即10101010这样的串,0代表缺点,1代表优点,即“字节”中的每一位当成是一个基因。即一个人的基因就是10101010这样的串,一个完美的人表示为:11111111。
【初始种群】:上帝造了亚当(10101010)与夏娃(01010101)
【种群大小】:确定种群的大小,为了方便计算,把种群大小确定为4,即以亚当夏娃的四个后代作为种,分别为ABCD。
A:10111000 、B:00011001、C:10110111 、D:00111111
【适应度计算】:个体的优点越多,评价越高,(题外话,比如第一位1代表有钱,第二个1代表帅,它们基本上是上面所有优点的总和,哈哈哈哈)。按照适应度来计算,ABCD四个个体所对应的数值:
A:10111000,184
B:00011001,25
C:10110111,183
D:00111111,63
【适者生存】:优点越多,越能得到繁衍后代的机会,选中繁衍后代的概率,以种群中所有优点数值的总和即A,B,C,D总和为:455。即每个个体被选中的概率为
A:184/455=40.43%。
B:25/445=5.49%。
C: 183/455=40.21%。
D: 63/455=13.84%。
然后,上帝开始掷色子,(产生一个0到1之间的随机数,依据该随机数,进行概率的选择)。这里面存在的概率问题,优点越大越有机率选中,而不是必然,也存在优点巨大,而没有被选中的个体。假定通过概率选出的个体是:AACD,即B被社会所淘汰了,而A凭借着强大的基因,获得了两次繁衍后代的机会。
【基因交换】是产生新个体的主要操作过程,它以某一概率相互交换某两个个体之间的部分染色体,其交叉点的位置为随机确定。先对群体进行随机配对,其次随机设置交叉点位置, 最后再相互交换配对染色体之间的部分基因,获取新的结果作为个体。
AC:
10111* 000
10110 *111
以左数第五位(随机)为交换点,即繁衍出来的新个体分别为:10111* 111、10110 *000
AD:
101*10111
001*11111
以左数第三位(随机)为交换点,即繁衍出来的新个体分别为:101*11111、001*10111
【个体变异】:变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变。
繁衍后代中出来的四个个体,重新号为ABCD。A:10111111、B:10110000、C:10111111、D:00110111.四个个体中,随机找出一个位进行变异,即取后操作。
假设通过随机运算,确定
A:第三位取反10111111->10011111,
B:第二位取反10110000->11110000,
C:第七位取反10111111->10111101,
D:第一位取反00110111->10110111
【适应度评价】通过第一次迭代,产生的新的个体为:
A:10011111,159
B:11110000,240
C:10111101,189
D:10110111,183
从ABCD四个个体的种群中可以看出,其中,产生的新的群体,适应度的评价比前一代高,此算法为了寻找符合条件的个体,进行最终的选择。
【循环】:产生的新的个体,以种群设定的大小,从【适应度计算】->【适者生存】->【基因交换】->【个体变异】->【适应度评价】这几个关键步骤重复循环,寻找符合完美条件的,如果有,即完成任务,如果没有,即进行下一次的迭代。
【总结】:遗传算法就是几个点:
1.基因的编码,即如何将问题解变成基因序列的形式,并不一定是本文中所用到的10101010这样的字符串
2.适应度评价,即如何评价出个体是否符合最优的个体,如何衡量出具体的数值
3.基因交换中,如何保证所交换出来的个体,也是属于问题的解。
4.种群的大小确定与迭代次数的确定及最优条件确定。
标签:如何 字符串 需要 个人 二进制 公司 色子 简单 循环
原文地址:http://www.cnblogs.com/szc3659/p/7616184.html