我有一个有以下基因的个体:
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]我这个突变的问题是,这个个体的高斯统计量似乎是用所有的基因来决定的,而不是对大多数基因的每个gene...while a +/- 2突变都是正确的,从300开始的数值应该会发生更大的变化。
我感到奇怪的是,在文档中没有考虑到这一需求。
是否没有内置的机制来利用每种基因的统计数据来突变个体?
我假设群体中的每一个个体都利用其所有的基因形成了一个分布。我想要的是利用种群中的所有个体,为每个基因形成一个分布。
发布于 2019-11-06 12:31:22
您可以将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,https://stackoverflow.com/questions/53218243
复制相似问题