1

我有一个具有以下基因的人:

genes = [8, 2, 300, 2, 25, 10, -64, -61]

然后我应用以下高斯突变:

toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=1)
toolbox.mutate(genes)

产生新基因:

[9, 4, 301, 2, 24, 9, -65, -60]

我对这个突变的问题是,这个人的高斯统计数据似乎是使用所有基因而不是每个基因来确定的......虽然大多数基因的 +/- 2 突变很好,但开始的值300应该变化更剧烈。

我很奇怪,文档中没有考虑到这种需求。

是否没有使用每个基因统计数据来突变个体的内置机制?

我假设使用其所有基因为种群中的每个个体形成分布。我想要的是使用种群中的所有个体为每个基因形成分布。

4

1 回答 1

1

您可以设置sigma为列表而不是浮点数。这样,如果每个基因取自不同的范围,您可以调整 的值sigma以更好地拟合每个基因所取的值。

如果你不提前知道哪些基因会比其他基因大,你可以实现自己的突变功能。例如,您可以将sigma高斯的 设置为取决于基因的值:

def mutGaussian(individual, sigma, indpb):
    for i in range(len(individual)):
        if random.random() < indpb:
            individual[i] = random.gauss(individual[i], sigma*individual[i])

    return individual,
于 2019-11-06T12:31:22.143 回答