You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遗传算法种群适应度计算报错:TypeError: object of type 'int' has no len()

问题:遗传算法种群适应度计算报错TypeError: object of type 'int' has no len()

报错详情

TypeError: object of type 'int' has no len()

触发报错的DEAP库源码片段

/usr/local/lib/python3.9/dist-packages/deap/base.py in setValues(self, values)
186 
187     def setValues(self, values):
188         assert len(values) == len(self.weights), "Assigned values have not the same length than fitness weights"                                                
189         try:
190             self.wvalues = tuple(map(mul, values, self.weights))

原始适应度计算代码

fitness_set = list(tb.map(tb.evaluate, population))
for ind, fit in zip(population, fitness_set):
    ind.fitness.values = fit

问题原因

DEAP框架里,ind.fitness.values要求传入可迭代的序列(如元组、列表),但你的tb.evaluate函数返回的是单个整数,赋值时代码尝试对整数调用len(),直接触发报错。这是因为DEAP的Fitness类默认支持多目标优化,哪怕是单目标场景,也需要用长度为1的序列来赋值。

两种修正方案

  • 方案一:修改评估函数
    让tb.evaluate返回元组形式的结果,比如原本返回单个分数score,改成返回(score,)。

  • 方案二:在赋值时包装结果
    不修改评估函数,直接在赋值步骤把单个整数转为元组:

    fitness_set = list(tb.map(tb.evaluate, population))
    for ind, fit in zip(population, fitness_set):
        ind.fitness.values = (fit,)  # 将单个整数包装为长度1的元组
    

内容的提问来源于stack exchange,提问作者Jess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:35:06