微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遗传算法个人不可迭代

如何解决遗传算法个人不可迭代

在uni GA中的解释不是很好,因此,为什么我要在业余时间提高对它的了解,我正在做一个简单的任务,我有10张纸牌,编号为1到10,我必须将它们分成两堆5,因此第一堆的总和为36,第二堆的乘积为360。

我正在使用deap库,并开始做教科书GA的工作...直到到达评估函数,该函数将发送错误消息,指出个体不可迭代,即使我的总体是由包含10个数字的数组组成的个体构成的从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

在程序的主要部分中,我使用deap工具箱创建弹出窗口。

self.toolBox.register("attr_bool",random.randint,1,LEN)
        self.toolBox.register("individual",tools.initRepeat,creator.Individual,self.toolBox.attr_bool,LEN)
        self.toolBox.register("population",list,self.toolBox.individual) 

这部分应该产生一个由个体组成的总体,这些个体的向量大小为LEN,并且包含从1到10的随机数。

File "C:blabla/bla.py",line 37,in evaluateInd
    for x in individual:

TypeError: 'int' object is not iterable
因此,我被困住了。 https://deap.readthedocs.io/en/master/examples/ga_onemax.html 在deap的官方文档中,我遵循的示例以非常相似的方式创建了pop。
#THIS CODE IS FROM THE OFFICIAL DOCUMENTATION
toolBox = base.ToolBox()
# Attribute generator 
toolBox.register("attr_bool",1)
# Structure initializers
toolBox.register("individual",toolBox.attr_bool,100)
toolBox.register("population",toolBox.individual)

我们的个人将使用函数initRepeat()生成。它的第一个参数是容器类,在我们的示例中,我们在上一节中定义了“个人”。将使用作为第二个参数提供的attr_bool()方法填充此容器,该容器将包含使用第三个参数指定的100个整数。

我通过设置我自己的LEN大小以及从1到10的数字来调整了此示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。