遗传算法原理与实现

来源:互联网 发布:看网络电视用什么软件 编辑:程序博客网 时间:2024/06/10 05:07

遗传算法形式化定义

遗传算法可定义为一个8元组:
SGA=(C , E , P0 ,M , O ,S ,R, T)
其中,C:个体的编码方法
           E:个体适应度评价函数
   P0:初始群体
   M:群体大小
   O:选择算子
   S:交叉算子
   R:变异算子
   T:遗传算法终止条件
遗传算法伪代码:
begin     initialize  P(0)     t=0;     while (t<=T){           for( i= 1 to M )                 Evaluate fitness of P(t);           for( i=1 to M)                 Select operation to P(t);           for( i=1 to M/2)                 Crossover operation to P(t);           for(i=1 to M)                 Mutation operation to P(t);           for(i=1 to M)                 P(t+1)=p(t)           t=t+1;}end

遗传算法实现

1. 个体适应度评价

个体适应度的大小决定了该个体被遗传到下一代群体中的概率。要求所有个体的适应度必须为正数或者零,不能为负数。

2. 比例选择算子

选择算子的作用是从当前代群体中选择出一些比较优良的个体,并复制到下一代群体中。基本方法有赌盘选择方法,这种方法类似赌博中的赌盘操作。
执行过程:
1)先计算出群体中所有个体的适应度的总和
2)其次计算出每个个体的相对适应度的大小,它即为各个个体被遗传到下一代群体中的概率。
3)最后再使用赌盘操作(即0到1之间的随机数)来确定各个个体被选中的次数

3. 单点交叉算子

单点交叉算子的具体执行过程如下。
1)对群体中的个体进行两两随机匹配。
2)对每一对相互匹配的个体,随机设置某一基因位之后的位置为交叉点。若染色体的长度为n,则共有(n-1)个可能的交叉点位置。
3)对每一对相互配对的个体,依照设定的交叉概率p在其交叉点处相互交换两个个体的部分染色体,从而产生出两个新的个体。

4. 基本位变异算子

对于用二进制编码符号串所表示的个体,若需要进行变异操作,则将原有基因值0变1,1变0。
具体执行过程:
1)对个体的每一个基因位,依变异概率p指定其为变异点。
2)对每一个指定的变异点,对其基因值做取反运算,从而产生一个新的个体。
参考网上遗传算法Java实现源代码,我实现了一版scala的遗传算法,scala还在学习阶段,有误的地方请指教



原创粉丝点击