# 变异
mp, s = 0.8, 0.2 # 变异概率,标准差
npr = np.random
npr.seed(int(time.time()))
g = np.array([meta[k][0] for k in hyp.keys()]) # 增益 0-1
ng = len(meta)
v = np.ones(ng)
while all(v == 1): # 变异直到发生变化(防止重复)
v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0)
for i, k in enumerate(hyp.keys()):
hyp[k] = float(x[i + 7] * v[i]) # 变异
以上代码是变异部分的代码。首先,定义了变异概率mp
和标准差s
。然后,根据超参数的增益值g
和变异概率,使用随机数生成新的变异增益v
。这里使用了高斯分布来生成变异增益,并通过clip
函数将其限制在0.3到3.0之间。接着,根据变异增益对超参数进行变异。