遗传算法入门(三)

一个简单的遗传算法例子:求 [0,31]范围内的y=(x-10)^2的最小值
1)编码算法选择为"将x转化为2进制的串",串的长度为5位。(等位基因的值为0 or 1)
2)计算适应度的方法是:先将个体串进行解码,转化为int型的x值,然后使用y=(x-10)^2作为其适应度计算合适(由于是最小值,所以结果越小,适应度也越好)
3)正式开始,先设置群体大小为4,然后初始化群体 => (在[0,31]范围内随机选取4个整数就可以编码)
4)计算适应度Fi(由于是最小值,可以选取一个大的基准线1000,Fi = 1000 - (x-10)^2)
5)计算每个个体的选择概率.选择概率要能够反映个体的优秀程度.这里用一个很简单的方法来确定选择概率
P=Fi / TOTAL(Fi).
6)选择.
根据所有个体的选择概率进行淘汰选择.这里使用的是一个赌轮的方式进行淘汰选择.先按照每个个体的选择概率创建一个赌轮,然后选取4次,每次先产生一个0-1的随机小数,然后判断该随机数落在那个段内就选取相对应的个体.这个过程中,选取概率P高的个体将可能被多次选择,而概率低的就可能被淘汰.

下面是一个简单的赌轮的例子
      13%                 35%        15%                37%        
----------|----------------------------|------------|-*-------------------------|
     个体1                个体2      个体3    ^0.67       个体4
随机数为0.67落在了个体4的端内.本次选择了个体4. 

被选中的个体将进入配对库(mating pool,配对集团)准备开始繁殖.
7)简单交叉
先对配对库中的个体进行随机配对.然后在配对的两个个体中设置交叉点,交换两个个体的信息后产生下一代.
比如( | 代表简单串的交叉位置)
 ( 0110|1, 1100|0 ) --交叉--> (01100,11001)
 ( 01|000, 11|011 ) --交叉--> (01011,11000)
两个父代的个体在交叉后繁殖出了下一代同样数量的个体.
复杂的交叉在交叉的位置,交叉的方法,双亲的数量上都可以选择.其目的都在于尽可能的培育出更优秀的后代
8)变异
变异操作是按照基因座来的.比如说每计算两万个基因座就发生一个变异(现在的每个个体有5个基因座.也就是说要进化1000代后才会在其中的某个基因座发生一次变异),变异的结果是基因座上的等位基因发生了变化。这里就是把0变成1或1变成0。

至此已经产生了一个新的(下一代)集团.然后回到第4步,周而复始,生生不息下去。

小结:
遗传算法中最重要的过程就是选择交叉
选择要能够合理的反映"适者生存"的自然法则,而交叉必须将有利的基因尽量遗传给下一代(这个算法很关键!)
还有就是编码的过程要能够使编码后的染色体能充分反映个体的特征并且能够方便计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值