Python 3.x DEAP中的多重统计访问

Python 3.x DEAP中的多重统计访问,python-3.x,deap,Python 3.x,Deap,接下来,我尝试使用多种统计数据 import numpy as np import random from deap import base, creator, tools, algorithms # Define toolbox toolbox = base.Toolbox() creator.create("FitnessMin", base.Fitness, weights=(-1.0,)) creator.create("Individual", list, fitness=crea

接下来,我尝试使用多种统计数据

import numpy as np
import random
from deap import base, creator, tools, algorithms

# Define toolbox
toolbox = base.Toolbox()

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
IND_SIZE=5
toolbox.register("individual", tools.initRepeat, creator.Individual, random.random, n=IND_SIZE)

toolbox.register("population", tools.initRepeat, list, toolbox.individual)
popul = toolbox.population(n=7)

def evaluate(individual):
    a = sum(individual)
    b = len(individual)
    return (a / b,)

toolbox.register('evaluate', evaluate)
toolbox.register('mutate', tools.mutGaussian, mu=0.0, sigma=0.2, indpb=0.1)
toolbox.register('mate', tools.cxUniform, indpb=0.4)
toolbox.register('select', tools.selBest)

# Define statistical tools
stats_fit = tools.Statistics(key=lambda ind: ind.fitness.values)
stats_size = tools.Statistics(key=len)
mstats = tools.MultiStatistics(fitness=stats_fit, size=stats_size)

mstats.register("avg", np.mean)
mstats.register("std", np.std)

# Run algorithm
popul, mlogbook = algorithms.eaSimple(popul, toolbox, cxpb=0.5, mutpb=0.2, ngen=10,
                                      stats=mstats, verbose=True)
这将在屏幕上打印统计数据

文件指出:

多重统计对象可以通过以下方式指定给算法[…] 与简单统计完全相同的过程

import numpy as np
import random
from deap import base, creator, tools, algorithms

# Define toolbox
toolbox = base.Toolbox()

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
IND_SIZE=5
toolbox.register("individual", tools.initRepeat, creator.Individual, random.random, n=IND_SIZE)

toolbox.register("population", tools.initRepeat, list, toolbox.individual)
popul = toolbox.population(n=7)

def evaluate(individual):
    a = sum(individual)
    b = len(individual)
    return (a / b,)

toolbox.register('evaluate', evaluate)
toolbox.register('mutate', tools.mutGaussian, mu=0.0, sigma=0.2, indpb=0.1)
toolbox.register('mate', tools.cxUniform, indpb=0.4)
toolbox.register('select', tools.selBest)

# Define statistical tools
stats_fit = tools.Statistics(key=lambda ind: ind.fitness.values)
stats_size = tools.Statistics(key=len)
mstats = tools.MultiStatistics(fitness=stats_fit, size=stats_size)

mstats.register("avg", np.mean)
mstats.register("std", np.std)

# Run algorithm
popul, mlogbook = algorithms.eaSimple(popul, toolbox, cxpb=0.5, mutpb=0.2, ngen=10,
                                      stats=mstats, verbose=True)
但是当我尝试访问日志时,它返回一个
None
列表

In: mlogbook.select("avg")

Out: [None, None, None, None, None, None, None, None, None, None, None]
如果我使用常规统计信息而不是多个统计信息,我就没有这个问题:
logbook.select(“avg”)
返回一个浮动列表


使用多个统计信息时,如何访问记录的统计信息?

必须指定从中选择统计信息的章节。比如说,

mlogbook.chapters["fitness"].select("avg")
返回跨代适应度平均值的预期列表