В задаче ниже я работаю с временными рядами. Поэтому я надеюсь использовать такие функции, как 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)