【问题标题】:Difference of using different population size and different crossover method使用不同种群规模和不同交叉方法的差异
【发布时间】:2016-08-04 22:53:13
【问题描述】:

我有几个关于遗传算法的一般性问题。在从种群中挑选染色体的选择步骤中,是否有理想的染色体数量可供挑选?如果我选择 10 条染色体而不是 20 条,有什么区别?对最终结果有影响吗?在变异阶段,我了解到有不同的变异方式——单点交叉、两点交叉、均匀交叉和算术交叉。我什么时候应该选择一个而不是另一个?我知道它们听起来很基本,但我无法在任何地方找到答案。所以我想我应该在 Stackoverflow 中提问。 谢谢

【问题讨论】:

    标签: artificial-intelligence genetic-algorithm


    【解决方案1】:

    在我看来,您的术语和概念有点混乱。让我澄清一下。

    首先 - 人们称呼群体成员的方式有很多种:基因型、基因组、染色体、个体、解决方案...我现在将按原样使用 解决方案,在我的意见,最笼统的说法,它是我们最终进化的东西,而且我不是生物学家,所以我不知道基因型、基因组和染色体是否有某种不同,如果它们有什么不同......

    人口

    遗传算法是基于种群的进化算法。这些算法(通常)具有它正在解决的问题的固定大小的解决方案群体。

    遗传算子

    有两个主要的遗传算子 - 交叉和变异。交叉的目标是采用两个(或在某些情况下更多)解决方案并将它们组合以创建具有两者的某些特性的解决方案,最好是两者的最佳特性。突变的目标是通过进行小的随机变化来创造新的遗传物质,该物质以前不存在于种群中。

    特定运算符的选择,即是单点交叉还是多点交叉...,完全取决于问题。例如,如果您的解决方案由在每个块中协同工作的一些逻辑位块组成,则使用统一交叉可能不是一个好主意,因为它会破坏这些块。在这种情况下,单点或多点交叉是更好的选择,最好的选择可能是将交叉点限制在块的边界上。

    您必须尝试最适合您的问题的方法。此外,您始终可以使用所有这些,即在每次即将执行交叉时随机选择要使用的交叉运算符。突变也是如此。

    操作模式

    现在回答关于所选解决方案数量的第一个问题。遗传算法可以在两种基本模式下运行 - 世代模式和稳态模式。

    代际模式

    在分代模式下,算法的每一代(迭代)都会替换整个种群。用于分代模式 GA 的类似 python 的简单伪代码可能如下所示:

    P = [...]  # initial population
    while not stopping_condition():
        Pc = []  # empty population of children
        while len(Pc) < len(P):
            a = select(P)  # select a solution from P using some selection strategy
            b = select(P)
            if rand() < crossover_probability:
                a, b = crossover(a, b)
            if rand() < mutation_probability:
                a - mutation(a)
            if rand() < mutation_probability:
                b = mutation(b)
            Pc.append(a)
            Pc.append(b)
        P = Pc  # replace the population with the population of children
    

    省略了解决方案的评估。

    稳态模式

    在稳态模式下,总体保持不变,每次迭代中只替换少数解决方案。同样,一个简单的稳态 GA 可能如下所示:

    P = [...]  # initial population
    while not stopping_condition():
        a = select(P)  # select a solution from P using some selection strategy
        b = select(P)
        if rand() < crossover_probability:
            a, b = crossover(a, b)
        if rand() < mutation_probability:
            a - mutation(a)
        if rand() < mutation_probability:
            b = mutation(b)
        replace(P, a)  # put a child back into P based on some replacement strategy
        replace(P, b)
    

    省略了解决方案的评估。

    因此,所选解决方案的数量取决于您希望算法如何运行。

    【讨论】:

    • 非常感谢您的详细解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2023-04-07
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多