in jsuarez/ES.py [0:0]
def stepES(self):
if self.tick % self.tstep != 0:
return
meanOff, n = 0, 0
noise = self.noise
#Mean over rollouts
elite = [(np.min(v), k) for k, v in self.elite.items() if len(v) >= self.minRollouts]
if len(elite) == 0:
return
elite = sorted(elite, reverse=True)
self.elite = defaultdict(list)
Fs, mutations = list(zip(*elite))
topP = int(self.topP * len(Fs))
Fs, mutations = Fs[:topP], mutations[:topP]
Fs = rankdata(Fs, method='dense')
Fs = np.asarray(Fs)[:, np.newaxis]
mutations = noise[mutations, :]
if len(Fs) == 0:
return
#Weighted mean vec update
meanOff = np.mean(Fs*mutations, 0)
meanVec = self.meanVec
self.meanVec = meanVec + self.alpha * meanOff
self.data = self.meanVec, self.noise