我不知道为什么我的 python 软件出现异常(我在 windows 下运行):
File "C:\Users\lumy\PycharmProjects\EternityPuzzle\puzzle.py", line 94, in log_stats
self.record = self.stats.compile(self.population)
File "C:\Python27\lib\site-packages\deap\tools\support.py", line 237, in compile
record[name] = stats.compile(data)
File "C:\Python27\lib\site-packages\deap\tools\support.py", line 204, in compile
values = tuple(self.key(elem) for elem in data)
File "C:\Python27\lib\site-packages\deap\tools\support.py", line 204, in <genexpr>
values = tuple(self.key(elem) for elem in data)
File "C:\Users\lumy\PycharmProjects\EternityPuzzle\puzzle.py", line 73, in <lambda>
stats2 = tools.Statistics(key=lambda ind: ind.fitness_group.values)
File "C:\Python27\lib\site-packages\deap\base.py", line 181, in getValues
return tuple(map(truediv, self.wvalues, self.weights))
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'
我试图记录两个不同的健身。
所以 getValues 函数在 Fitness Object 中:
def getValues(self):
print self.wvalues, self.weights
return tuple(map(truediv, self.wvalues, self.weights))
输出:
() (1.0,)
如果我理解,wvalues 应该包含所有旧值,但第一次它似乎是空的。我的代码示例如下所示:
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessInd", base.Fitness, weights=(1.0,))
creator.create("FitnessGroup", base.Fitness, weights=(1.0,))
creator.create("Individual", ind.Ind, fitness_ind=creator.FitnessInd, fitness_group=creator.FitnessGroup)
toolbox.register("new_individual", creator.Individual)
toolbox.register("desk", tools.initRepeat, list, toolbox.new_individual)
population = toolbox.desk(n=len(arr))
stats2 = tools.Statistics(key=lambda ind: ind.fitness_group.values)
stats1 = tools.Statistics(key=lambda ind: ind.fitness_ind.values)
stats = tools.MultiStatistics(fitness_ind=stats1, fitness_group=stats2)
stats.register("min", min)
logbook = tools.Logbook()
values = eval_solution(population)
for ind, v in zip(population, values):
ind.fitness_ind.value = v,
ind.fitness_group.value = v,
record = stats.compile(population)
不知道我做错了什么。