1

我在 python 上编码差分进化,我有时(很少)得到太多递归调用的错误。我想改进编码功能,所以认为这是一个很好的地方。

我在另一个函数中初始化一个突变向量,然后通过输入相关参数生成一个试验向量。random_select基本上只是从我的候选人群体中选择一个随机向量(这里称为vectorsvector是群体中的候选人。H 和 K 是我决定用于优化问题的超参数。

这是我的代码:(numpy 作为 np 和 numpy.random 作为 npr)

def random_select(arr: np.array, size: int = 1):
    return arr[np.random.choice(len(arr), size=size, replace=False)]

def generate_Mutant(vector, K, F, vectors):
    Xr1 = random_select(vectors)[0]
    Xr2 = random_select(vectors)[0]
    Xr3 = random_select(vectors)[0]
    return vector + K*(Xr1 - vector) + F*(Xr2 - Xr3)


def Crossover(Crossover_probability, mutant, vector, K, F, vectors, boundaries):
    trial = []
    for item in range(len(mutant)):
        if npr.random_sample() > Crossover_probability:
            trial.append(mutant[item])
        else:
            trial.append(vector[item])
    flag = 0
    for index in range(len(trial)):
        if trial[index] > boundaries[index][0] or trial[index] < boundaries[index][1]:
            flag = 1
            mutant = generate_Mutant(vector, K, F, vectors)
            return Crossover(Crossover_probability, mutant, vector, K, F, vectors, boundaries)
    if flag == 0:
        return np.array(trial)

有什么办法可以改进这个功能吗?我错过的某些功能或库可以让我做得更好?某种编码方式比我目前使用的要好得多?有什么帮助,我只是想要一个意见。

4

0 回答 0