I am trying to use DEAP to maximise a function.
I understand how to do it with the basic example:
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual,
toolbox.attr_bool, 100)
which creates 100 random values or either 0 or 1. You then go on and create a population and mutate ...
How do you build a population when you have for example two parameters:
parameter 1 integer with range [0,1]
parameter 2 float with range [0,2]
Then create an individual combining both randomly sampled parameters? or for parameter 2 sample with an arbitary step value , for example 0.25.
You can simply do as follows to create chromosomes of multiple types:
toolbox.register("attr_int", random.randint, 0, 1)
toolbox.register("attr_flt", random.uniform, 0, 2)
toolbox.register("individual", tools.initCycle, creator.Individual,
(toolbox.attr_int, toolbox.attr_flt),
n=1)
and then create a population of size 100:
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
population = toolbox.population(n=100)
So, I have created the chromosomes which are a mix of integer and float. Now, after a generation is evaluated, you have the mutate and mate operators, which create new chromosomes. However, I do not know how to create these operators such that they are also a mix of integers and floats. This is the function to create chromosomes.
def uniform(float_min, float_max, int_max, N_inputs):
""" function to create individual """
integers = list(numpy.random.randint(0, int_max, N_inputs))
floats = list(numpy.random.uniform(float_min, float_max, N_inputs))
return integers+ floats
I need not to register mutate and mate:
toolbox.register("mate", deap.tools.???)
toolbox.register("mutate", deap.tools.???)
Hope you can help me. Cheers Sebastian
来源:https://stackoverflow.com/questions/46811850/deap-python-package-create-individuals-with-different-ranges-and-mix-of-integer