Каков наилучший способ применения ограничений в DEAP?

У меня есть 6-7 ограничений для использования в моем генетическом алгоритме DEAP. В настоящее время я использую и Decorate, и функциональность фильтра для их применения. Я использую функцию decorate, чтобы убедиться, что каждый ген в моем поколении 0 и в последующих поколениях находится в пределах определенной верхней и нижней границы. Чтобы использовать другие ограничения, я использую функциональность фильтра. Мой код выглядит следующим образом:

    pop = list(filter(valid,pop))


    while len(pop) < originalPopsize:
        popsize = originalPopsize-len(pop)
        toolbox.register("population", tools.initRepeat, list, toolbox.individual)
        newpop = toolbox.population(n=popsize)
        [pop.append(item) for item in newpop]

        pop = list(filter(valid,pop))
        print(len(pop))

Любой человек, который не следует условию, отфильтровывается, и алгоритм продолжает пытаться найти людей, которые удовлетворяют условию, и поместить их в совокупность. Но этот процесс очень медленный. Создание одного поколения из 10 человек занимает до 30 минут! Более быстрое или более элегантное решение будет очень высоко ценится!

0 ответов

Другие вопросы по тегам