Python Пользовательская функция DEAP для примитивов - PullRequest
0 голосов
/ 11 января 2020

В задаче ниже я работаю с временными рядами. Поэтому я надеюсь использовать такие функции, как Rolling_max, Rolling_min и т. Д. c, которые требуют, чтобы был выбран определенный c целочисленный параметр, ie rolling_max(input,5). В DEAP, как создать пользовательские функции, которые принимают определенные c параметры, которые можно добавить в pset.addPrimitive? Я стараюсь избегать использования программирования type-geneti c, если это возможно, потому что это создает целую кучу проблем для моего проекта.

Единственный (тупой) способ, которым я придумал, это просто жестко закодировать его. Поэтому, если я хочу получить rolling_max(input,5), я бы кодировал функцию, которая называется rolling_max_5(input), но тогда возникает проблема вероятностей выборки. Эта проблема будет влиять на то, сколько раз функции были выбраны для начальной популяции. Например, если у меня есть 5 целочисленных параметров для rolling_max, то у меня будет 5 таких функций. Когда популяция будет создана, связанная с rolling_max функция будет иметь более высокую вероятность выбора ...

Любые идеи?

from deap import base
from deap import creator
from deap import tools
from deap import gp

pset = gp.PrimitiveSet("Main",1)
pset.addPrimitive(operator.add, 2)
pset.addPrimitive(operator.sub, 2)
pset.addPrimitive(operator.mul, 2)
pset.addPrimitive(protectedDiv, 2)
pset.addPrimitive(operator.neg, 1)
pset.addPrimitive(operator.abs, 1)
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax, pset=pset)


toolbox = base.Toolbox()
toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=3)
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.expr)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
toolbox.register("compile", gp.compile, pset=pset)
...