Python DEAP框架——基于每基因统计的多变量遗传算法

Python DEAP框架——基于每基因统计的多变量遗传算法,python,genetic-algorithm,deap,Python,Genetic Algorithm,Deap,我有一个人有以下基因: 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] 我对这种突变的问题是,这个个体的高斯统计数据似乎是使用所有基因而不是每个基因来确定的……虽然大多数

我有一个人有以下基因:

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开始的值应该会发生更大的变化

对我来说很奇怪的是,没有人能解释这种需求

使用每基因统计数据进行个体突变是否没有内在机制


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

您可以将
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,
def(个人、西格玛、indpb):
对于范围内的i(len(个人)):
如果random.random()