我在 python 上编码差分进化,我有时(很少)得到太多递归调用的错误。我想改进编码功能,所以认为这是一个很好的地方。
我在另一个函数中初始化一个突变向量,然后通过输入相关参数生成一个试验向量。random_select
基本上只是从我的候选人群体中选择一个随机向量(这里称为vectors
)vector
是群体中的候选人。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)
有什么办法可以改进这个功能吗?我错过的某些功能或库可以让我做得更好?某种编码方式比我目前使用的要好得多?有什么帮助,我只是想要一个意见。