菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
488
0

遗传算法-选择算子

原创
05/13 14:22
阅读数 58171

选择算子很多,本文先做个简单汇总,等应用时再自行研究 

轮盘赌选择(roulette wheel selection)

锦标赛选择(tournament selection)

随机遍历抽样(stochastic universal selection)

局部选择(local selection)

截断选择(truncation selection)

 

轮盘赌选择

个体适应度越高,被选择的概率越大;    【没特点】

在该策略下,

最优个体不一定被遗传到下一代,但这不是缺点,因为这同时避免了超级个体的影响;

最差个体可能被遗传到下一代,这个不提倡,但也不是说不可以,说不定最差个体交叉变异后很牛逼;

 

 

锦标赛选择

每次随机选择若干个体,挑选适应度最好的保留下来,迭代 N 次生成新种群;   【特点是最差个体一定被淘汰】 

在该策略下,最差个体一定会被淘汰;最优个体不一定保留

 

随机竞争选择

每次按轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止  【特点是最差个体一定被淘汰】

 

精英保留策略

依某种策略生成新种群后,用当代最优个体随机替换新种群的某个体,或者直接替换最差个体;  【特点是最优个体一定被保留】

 

示例代码

import random
import numpy as np


class GeneticAlgorithm(object):
    def __init__(self):
        pass

    def select_lunpandu(self, fitness, pop_size):
        '''
        选择算子:轮盘赌选择
        '''
        new_pop_index = np.random.choice(range(pop_size), size=pop_size, replace=True, p=fitness / fitness.sum())
        return new_pop_index

    def select_jingying(self, fitness, pop_size):
        '''
        选择算子:精英保留策略
        '''
        ### 首先按轮盘赌选择
        new_pop_index = np.random.choice(range(pop_size), size=pop_size, replace=True, p=fitness / fitness.sum())
        print('temp', new_pop_index)
        new_fitness = fitness[new_pop_index]    # 新种群
        max_fit_index = np.argmax(fitness)      # 当代最优个体
        min_fit_index = np.argmin(new_fitness)  # 新种群中最差个体
        new_pop_index[min_fit_index] = max_fit_index    # 替换
        return new_pop_index


if __name__ == '__main__':
    ##### test GeneticAlgorithm
    ga = GeneticAlgorithm()

    ### test select_lunpandu
    fitness = np.array([1, 3, 8, 4])
    print(ga.select_lunpandu(fitness, 4))

    ### test select_jingying
    fitness = np.array([1, 3, 5, 4])
    print(ga.select_jingying(fitness, 4))

 

其他

  • 无回放随机选择(也叫期望值选择Excepted Value Selection):根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下:

    (1) 计算群体中每个个体在下一代群体中的生存期望数目N。

    (2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未 被选中参与交叉运算,则它在下一代中的生存期望数目减去1.0。

    (3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。

  • 确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:

    (1) 计算群体中各个个体在下一代群体中的期望生存数目N。

    (2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。

    (3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。

  • 无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群体中,因而选择误差比较小。

  • 均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。

  • 随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。

  • 排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性

 

参考资料:

https://zhuanlan.zhihu.com/p/29474851  遗传算法中几种不同选择算子

https://www.jianshu.com/p/ae5157c26af9

发表评论

0/200
488 点赞
0 评论
收藏
为你推荐 换一批