У меня есть 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 минут!Более быстрое или более элегантное решение будет очень цениться!