微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的交叉功能有问题吗?

如何解决我的交叉功能有问题吗?

我在 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,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,vectors)
            return Crossover(Crossover_probability,boundaries)
    if flag == 0:
        return np.array(trial)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。