Python 遗传算法是不适用的

Python 遗传算法是不适用的,python,generics,genetic-algorithm,genetic-programming,deap,Python,Generics,Genetic Algorithm,Genetic Programming,Deap,在uni-GA中没有得到很好的解释,因此我在空闲时间提高了对它的知识,我在做一个简单的任务,我有10张编号为1到10的牌,我必须将它们分成两堆,每堆5张,第一堆的和是36,第二堆的积是360 我正在使用deap图书馆,并开始做教科书GA的东西。。。直到我到达一个evaluate函数,它发送一个错误,说个体不可iterable,即使我的总体是由个体组成的,个体是从1到10随机生成的10个数的数组 def evaluateInd(individual): ssum = 0 prod

在uni-GA中没有得到很好的解释,因此我在空闲时间提高了对它的知识,我在做一个简单的任务,我有10张编号为1到10的牌,我必须将它们分成两堆,每堆5张,第一堆的和是36,第二堆的积是360

我正在使用deap图书馆,并开始做教科书GA的东西。。。直到我到达一个evaluate函数,它发送一个错误,说个体不可iterable,即使我的总体是由个体组成的,个体是从1到10随机生成的10个数的数组

def evaluateInd(individual):
    ssum = 0
    prod = 1
    count = 0
    for x in individual:
        if count < 5:
            prod *= individual[count]
            count+=1
    count = 5        
    for x in individual:
        if count < 10:
            ssum += individual[count]
            count+=1
    scaled_sum_error = (ssum - SUM_TARGET) / SUM_TARGET
    scaled_prod_error = (prod - PROD_TARGET) / PROD_TARGET
    combined_error = math.fabs(scaled_sum_error) + math.fabs(scaled_prod_error)
    return combined_error
File "C:blabla/bla.py", line 37, in evaluateInd
    for x in individual:

TypeError: 'int' object is not iterable
这一部分假设生成一个由向量大小为LEN的个体组成的群体,其中包含1到10的随机数

def evaluateInd(individual):
    ssum = 0
    prod = 1
    count = 0
    for x in individual:
        if count < 5:
            prod *= individual[count]
            count+=1
    count = 5        
    for x in individual:
        if count < 10:
            ssum += individual[count]
            count+=1
    scaled_sum_error = (ssum - SUM_TARGET) / SUM_TARGET
    scaled_prod_error = (prod - PROD_TARGET) / PROD_TARGET
    combined_error = math.fabs(scaled_sum_error) + math.fabs(scaled_prod_error)
    return combined_error
File "C:blabla/bla.py", line 37, in evaluateInd
    for x in individual:

TypeError: 'int' object is not iterable
所以我被卡住了。 在deap的官方文档中,我遵循的示例以非常相似的方式创建了pop

#THIS CODE IS FROM THE OFFICIAL DOCUMENTATION
toolbox = base.Toolbox()
# Attribute generator 
toolbox.register("attr_bool", random.randint, 0, 1)
# Structure initializers
toolbox.register("individual", tools.initRepeat, creator.Individual, 
    toolbox.attr_bool, 100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
我们的个体将使用函数initRepeat()生成。它的第一个参数是一个容器类,在我们的示例中是我们在上一节中定义的单个容器类。此容器将使用attr_bool()方法填充,该方法作为第二个参数提供,并将包含100个整数,如使用第三个参数指定的那样


我调整了这个示例,将自己的LEN大小和数字从1设置为10。

@user3386109不确定这有什么帮助。。。我无法更改deap函数返回的内容。。。不要改变工具箱。。。我在这里错过了什么。。。我只想重复这个个体,我刚刚又读了一遍这个问题,我同意我的解释是错误的。这个错误清楚地告诉你个体是一个整数,而不是一个列表。在某些情况下,列表是否只有一个元素?
def evaluateInd(individual):
    ssum = 0
    prod = 1
    count = 0
    for x in individual:
        if count < 5:
            prod *= individual[count]
            count+=1
    count = 5        
    for x in individual:
        if count < 10:
            ssum += individual[count]
            count+=1
    scaled_sum_error = (ssum - SUM_TARGET) / SUM_TARGET
    scaled_prod_error = (prod - PROD_TARGET) / PROD_TARGET
    combined_error = math.fabs(scaled_sum_error) + math.fabs(scaled_prod_error)
    return combined_error
File "C:blabla/bla.py", line 37, in evaluateInd
    for x in individual:

TypeError: 'int' object is not iterable