Numpy random - 指定多个边界和步骤

问题描述 投票:0回答:2

我需要生成遗传算法的初始种群。考虑以下向量:

[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)。这种随机化的最简单方法是什么?

python numpy random genetic-algorithm
2个回答
1
投票

由于您的染色体的范围似乎是硬编码的,我建议您生成所有数字,只有一个numpy.random.uniform(),您需要的范围最小,例如在您的示例中为0.1-10,然后您将获得的数字相乘按以下比例编号:

wanted_range / base_range

在您的示例中,您将乘以10.(请注意,此方法的步长和范围之间的比率必须相同)


1
投票

您没有提供足够的数据来查看短代码的任何模式。

但是,您可以执行以下操作:列出列表,其中每个子列表由以下元素组成: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])
© www.soinside.com 2019 - 2024. All rights reserved.