Hi,
I'm not sure if this is a bug or a design choice, but in the compute_novelty method of the ProximityArchive class, the novelty of the new batch of measures is only calculated against the measures already stored in the archive. However, in the original NS paper, Lehman and Stanley defined that the novelty must be computed considering the archive and the current batch: /
The nearest neighbors calculation must take into consideration individuals from the current population and from the permanent archive
of novel individuals.
https://www.cs.swarthmore.edu/~meeden/DevelopmentalRobotics/lehman_ecj11.pdf
Here is the piece of code I'm referring to:
|
# Compute nearest neighbors. |
|
k_neighbors = min(len(self), self.k_neighbors) |
|
dists, indices = self._cur_kd_tree.query(measures, k=k_neighbors) |
|
|
|
# Expand since query() automatically squeezes the last dim when k=1. |
|
dists = dists[:, None] if k_neighbors == 1 else dists |
|
|
|
novelty = np.mean(dists, axis=1) |
Hi,
I'm not sure if this is a bug or a design choice, but in the
compute_noveltymethod of theProximityArchiveclass, the novelty of the new batch ofmeasuresis only calculated against the measures already stored in the archive. However, in the original NS paper, Lehman and Stanley defined that the novelty must be computed considering the archive and the current batch: /Here is the piece of code I'm referring to:
pyribs/ribs/archives/_proximity_archive.py
Lines 437 to 444 in 91479af