DEAP 框架 - mutGaussian 使用每个基因的统计数据
DEAP framework - mutGaussian using per gene statistics
我有一个人具有以下基因:
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
开始的值应该会发生更大的变化。
令我感到奇怪的是 docs 中没有考虑到这种需求。
是否没有使用每个基因的统计数据来变异个体的内置机制?
我假设使用其所有基因为种群中的每个个体形成一个分布。我想要的是使用种群中的所有个体为每个基因形成一个分布。
您可以将 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,
我有一个人具有以下基因:
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
开始的值应该会发生更大的变化。
令我感到奇怪的是 docs 中没有考虑到这种需求。
是否没有使用每个基因的统计数据来变异个体的内置机制?
我假设使用其所有基因为种群中的每个个体形成一个分布。我想要的是使用种群中的所有个体为每个基因形成一个分布。
您可以将 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,