1

我正在使用 Python 包。我的问题是从数据集中获取我的人口,或者从基因生成它。例如:我有 [[1,2,0,0,...],[1,3,4,0,...],...] 作为数据集,我想从中选择随机 n 个元素这个数据集是我的人口。这是使随机二进制数的填充为 0 或 1 的代码,向量在 len 中为 100:

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 包的解决方案。

4

1 回答 1

0

实际上,您可以在 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)
于 2018-03-08T13:27:17.170 回答