scipy.optimize 微分进化中初始参数的形状

Shape of init parameter in scipy.optimize differential evolution

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

help 中,它表示:

init str or array-like, optional

Specify which type of population initialization is performed. Should be one of:

‘latinhypercube’

‘random’

array specifying the initial population. 

The array should have shape (M, len(x)), where len(x) is the number of parameters. init is clipped to bounds before use.

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

ValueError: The population supplied needs to have shape (M, len(x)), where 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 个可能的起始值?

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