Как сделать личность списком переменной длины в DEAP - PullRequest
0 голосов
/ 08 ноября 2019

Я смотрел на пример Рюкзак , и я хотел бы перенести его на случай, когда отдельные лица представлены списками, а не наборами.

Если я запускаю этот фрагмент

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.

Однако, если я запускаю следующий фрагмент, толькоизменяя 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]]

Можно ли построить популяцию людей, представляющих собой списки различной длины?

1 Ответ

0 голосов
/ 08 ноября 2019

Это на самом деле не отвечает на вопрос, но я думаю, что то, что может происходить, связано с разницей между set и list. Поскольку набор представляет собой упорядоченную структуру отдельных элементов, если, например, 5 наборов случайных чисел 1, 3, 1, 5, 4 помещены в набор, результатом будет {1, 3, 4, 5}, набор длиной 4. Однако, если 5 случайных чисел будут помещены вlist, результатом всегда будет список длиной 5.

Вот почему первый пример с множествами приводит к индивидуумам различной длины, а второй пример со списками приводит к индивидуумам с одинаковой длиной.

...