Как определить индивидуальных пользователей Генетического алгоритма, которые следуют определенному образцу заказа, используя DEAP - PullRequest
0 голосов
/ 31 мая 2018

Мой индивидуальный GA - это случайная последовательность int (например: [4, 5, 10, 11, 8, 12, 9, 13, 2, 6, 3, 7, 0, 14, 15, 1]), которая следует за определенным ограничением порядка, которое рассматривается в другой самоопределяемой функции.

Как я могу включить мою функцию ограничения заказа в DEAP индивидуальную инициализацию?

Я реализовал этот способ с вдохновением от https://groups.google.com/forum/#!msg/deap-users/KZYYHCGrFyY/x1nXcXpCyscJ:

class MyContainer(list):
    def __init__(self, attributes):
        # Some initialisation with received values
        # self.attr1 = attributes[0]
        pass


def generate_individual(ind_class, size):
    # ind_class will receive a class inheriting from MyContainer
    # individual = ind_class(random.random() for _ in range(size))
    individual = ind_class(random.sample(range(IND_SIZE), k=size))
    individual = make_individual_valid(individual, other_parameters)
    # make_individual_valid is the self-defined order constraint function
    return individual

creator.create('FitnessMin', base.Fitness, weights=(-1.0,))
creator.create('Individual', MyContainer, fitness=creator.FitnessMin)

toolbox = base.Toolbox()
toolbox.register('individual', generate_individual, creator.Individual, size=IND_SIZE)
toolbox.register('population', tools.initRepeat, list, toolbox.individual)

Но я получил ошибку ниже:

AttributeError: 'list' object has no attribute 'fitness'

1 Ответ

0 голосов
/ 14 июня 2018

У меня была такая же ошибка.Я понял, что ваши generate_individual функции возвращают список [].Поэтому, когда создается новый индивид, он сохраняется в списке, давая результат в виде списка внутри списка [[]].Если вы попытаетесь напечатать одно лицо, чтобы получить желаемый список, вам нужно будет получить к нему доступ с помощью ...

individual[0]

..., чтобы получить список, который вы создали.

В настоящее время я не знаю, как это исправить (поскольку я новичок в DEAP).

РЕДАКТИРОВАТЬ: Я нашел еще один вопрос StackOverflow, который решил эту проблему.Я думаю, было бы неплохо, если бы вы проверили это.Посмотрите, как пользователь создает своего индивидуума:

Вопрос, который мне помог

...