我需要生成遗传算法的初始种群。考虑以下向量:
[20, 2, 20, 1.5, 5, 20, 5, 0.5, -0.5, 5, 20, 5, 3, 14, 70, 30, 10, 5, 5, 20, 8, 20, 2.5]
我会这样做:
new_population = numpy.random.uniform(low=0.1, high=50.0, size=pop_size)
问题是,问题空间中的一些染色体具有不同的步骤和不同的最大值。元素0应为1-100,步长为1(So int)。元素3应为0.1-10,步长为0.1(Float)。这种随机化的最简单方法是什么?
由于您的染色体的范围似乎是硬编码的,我建议您生成所有数字,只有一个numpy.random.uniform(),您需要的范围最小,例如在您的示例中为0.1-10,然后您将获得的数字相乘按以下比例编号:
wanted_range / base_range
在您的示例中,您将乘以10.(请注意,此方法的步长和范围之间的比率必须相同)
您没有提供足够的数据来查看短代码的任何模式。
但是,您可以执行以下操作:列出列表,其中每个子列表由以下元素组成:bounds = [[low, high, step], ...]
然后初始化一个空的numpy数组,即new_population = np.empty(23)
然后你可以用for循环遍历bounds并生成每个元素:
for i, value in enumerate(bounds):
new_population[i] = np.random.uniform((low=value[0], high=value[1], size=value[2])