【问题标题】:How should roulette wheel selection be organized for non-sorted population in genetic algorithm?遗传算法中未排序的种群应该如何组织轮盘赌选择?
【发布时间】:2012-05-18 21:09:49
【问题描述】:

我的问题与这个问题有关: Roulette-wheel selection in Genetic algorithm. Population needs to be sorted first? 如果我们不对总体进行排序,那么组织轮盘选择的方式是什么? 当然,我们现在必须以线性方式搜索。对于这种情况,你有 C++ 或 Java 的代码 sn-ps 吗?

【问题讨论】:

    标签: c++ genetic-algorithm roulette-wheel-selection


    【解决方案1】:

    人口根本不需要排序 - 轮盘赌选择的关键是给定个体被选择繁殖的概率与其适应度成正比。

    假设您有一个未排序的人口,其适应度如下:

    [12, 45, 76, 32, 54, 21]
    

    要执行轮盘赌选择,您只需选择 0 到 240 范围内的随机数(人口适应度的总和)。然后,从列表中的第一个元素开始,减去每个人的适应度,直到随机数小于或等于零。因此,在上述情况下,如果我们随机选择 112,我们会执行以下操作:

    Step 1: 112 - 12 = 100. This is > 0, so continue.
    Step 2: 100 - 45 = 55.  This is > 0, so continue.
    Step 3: 55 - 76 = -21.  This is <= 0, so stop.
    

    因此,我们选择个体#3 进行复制。请注意,这根本不需要对总体进行排序。

    所以,在伪代码中,它归结为:

    let s = sum of population fitness
    let r = random number in range [0, s].
    let i = 0.
    while r > 0 do:
        r = r - fitness of individual #i
        increment i
    select individual #i - 1 for reproduction.
    

    请注意,最后一行中的- 1 是为了抵消在循环的最后一次迭代中完成的increment i(因为即使我们找到了我们想要的个体,它也会增加)。

    【讨论】:

    • 感谢您,互联网上的很多 GA 内容只是排序。好像每个人都忘记了时间复杂度。
    • 你知道其他选择方法(排名、锦标赛、玻尔兹曼等)是否也可以不进行排序?
    猜你喜欢
    • 2014-05-25
    • 2010-09-15
    • 2011-05-02
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2019-07-06
    • 2012-09-28
    相关资源
    最近更新 更多