【问题标题】:How to make individuals be a list of variable length in DEAP如何使个人成为 DEAP 中的可变长度列表
【发布时间】:2019-11-08 10:29:52
【问题描述】:

我正在查看Knapsack example,我想将其转换为个人由列表而不是集合表示的情况。

如果我运行这个 sn-p

from deap import creator, base, tools
import random

creator.create("Fitness", base.Fitness, weights=(-1.0, 1.0))
creator.create("Individual", set, fitness=creator.Fitness)

toolbox = base.Toolbox()
toolbox.register("attr_item", random.randrange, 5)
toolbox.register("individual", tools.initRepeat, creator.Individual, 
    toolbox.attr_item, 3)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox.population(n=5)

然后我得到以下输出:

Out: [{0, 1}, {0, 1, 4}, {0}, {0, 1, 2}, {0, 2}]

与长度为 1、2 或 3 的个体。

但是,如果我运行下一个 sn-p,只在第四行将 set 更改为 list

from deap import creator, base, tools
import random

creator.create("Fitness", base.Fitness, weights=(-1.0, 1.0))
creator.create("Individual", list, fitness=creator.Fitness)

toolbox = base.Toolbox()
toolbox.register("attr_item", random.randrange, 5)
toolbox.register("individual", tools.initRepeat, creator.Individual, 
    toolbox.attr_item, 3)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox.population(n=5)

那么所有个体的长度都相同。

Out: [[2, 2, 4], [0, 1, 0], [2, 2, 4], [1, 4, 1], [2, 2, 0]]

是否有可能建立一个由不同长度的列表组成的个体群体?

【问题讨论】:

    标签: python deap


    【解决方案1】:

    这并不能真正回答问题,但我认为可能发生的事情与set 和list 之间的区别有关。由于集合是不同元素的有序结构,如果将 5 个随机数 1, 3, 1, 5, 4 放入一个集合中,结果将是 {1, 3, 4, 5},长度为 4 的集合。但是,如果将 5 个随机数放入一个列表,结果将始终是长度为 5 的列表。

    这就是为什么第一个带有集合的示例会产生不同长度的个体,而带有列表的第二个示例会产生所有相同长度的个体。

    【讨论】:

      猜你喜欢
      • 2018-05-05
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2019-08-11
      • 1970-01-01
      • 2012-06-29
      相关资源
      最近更新 更多