1

我不明白算法期望init参数的形状。

帮助中,它说:

initstr 或类似数组,可选

指定执行哪种类型的人口初始化。应该是以下之一:

‘latinhypercube’

‘random’

array specifying the initial population. 

数组应具有形状 (M, len(x)),其中 len(x) 是参数的数量。init 在使用前被剪裁到边界。

我正在传递形状为(1,17)的东西(数组数组)作为初始值(=init参数)。因此,代表我的 17 个参数的 17 个值的 numpy 数组并收到以下错误消息:

ValueError:提供的总体需要具有形状 (M, len(x)),其中 M > 4。

试图深入研究它,我在源代码中得到了这一行:

        if (np.size(popn, 0) < 5 or
                popn.shape[1] != self.parameter_count or
                len(popn.shape) != 2):
            raise ValueError("The population supplied needs to have shape"
                             " (M, len(x)), where M > 4.")

if我理解的 3 条语句中的最后 2 条。您要确保它是一个数组数组并且所有数组都具有正确的大小(即参数的数量)。

但是为什么算法期望用户给它至少 4 个可能的起始值呢?

4

1 回答 1

2

之所以M必须大于 4,是因为Rand2进化策略需要至少 5 个种群成员。您可以在此处阅读更多相关信息。

于 2019-09-04T10:26:33.583 回答