使用 Python 包 deap 的自定义人口表示
Custom representation of population with Python package deap
我正在使用 Python 软件包 deap。
我的问题是从数据集中获取人口而不是从基因中生成人口。
例如:
我有 [[1,2,0,0,...],[1,3,4,0,...],...] 作为数据集
我想从这个数据集中 select 随机 n 个元素作为我的人口。
这是使随机二进制数的数量为 0 或 1 的代码,向量为 100 in len:
import random
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual,
toolbox.attr_bool, 100)
# define the population to be a list of individuals
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
请注意,我可以简单地使用 random.sample(Data_set, Num_of_ind)
使我的人口增加,但这不适用于 deap 包。
我需要一个使用 Deap 包的解决方案。
实际上,您可以在 DEAP 中使用 random.sample()。只需要注册函数,然后在注册的时候传给个人即可:
# Example of dataset (300 permutations of [0,1,...,99]
data_set = [random.sample(range(100), 100) for i in range(300)]
toolbox = base.Toolbox()
# The sampling is used to select one individual from the dataset
toolbox.register("random_sampling", random.sample, data_set, 1)
# An individual is generated by calling the function registered in
# random_sampling, with the input paramters given
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.random_sampling)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
请注意,每个人都将由一个包含值列表的列表组成(类似于 [[7, 40, 87, ...]]
。如果你想删除外部列表(取而代之的是 [7, 40, 87, ...]
),你应该将 random_sampling
替换为:
toolbox.register("random_sampling", lambda x,y: random.sample(x,y)[0], data_set, 1)
我正在使用 Python 软件包 deap。 我的问题是从数据集中获取人口而不是从基因中生成人口。 例如: 我有 [[1,2,0,0,...],[1,3,4,0,...],...] 作为数据集 我想从这个数据集中 select 随机 n 个元素作为我的人口。 这是使随机二进制数的数量为 0 或 1 的代码,向量为 100 in len:
import random
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual,
toolbox.attr_bool, 100)
# define the population to be a list of individuals
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
请注意,我可以简单地使用 random.sample(Data_set, Num_of_ind) 使我的人口增加,但这不适用于 deap 包。 我需要一个使用 Deap 包的解决方案。
实际上,您可以在 DEAP 中使用 random.sample()。只需要注册函数,然后在注册的时候传给个人即可:
# Example of dataset (300 permutations of [0,1,...,99]
data_set = [random.sample(range(100), 100) for i in range(300)]
toolbox = base.Toolbox()
# The sampling is used to select one individual from the dataset
toolbox.register("random_sampling", random.sample, data_set, 1)
# An individual is generated by calling the function registered in
# random_sampling, with the input paramters given
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.random_sampling)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
请注意,每个人都将由一个包含值列表的列表组成(类似于 [[7, 40, 87, ...]]
。如果你想删除外部列表(取而代之的是 [7, 40, 87, ...]
),你应该将 random_sampling
替换为:
toolbox.register("random_sampling", lambda x,y: random.sample(x,y)[0], data_set, 1)