schrum2 / MM-NEAT

Modular Multiobjective (Hyper) Neuro-Evolution of Augmenting Topologies + MAP-Elites: Java code for evolving intelligent agents in Ms. Pac-Man, Tetris, and more, as well as code for Procedural Content Generation in Mario, Zelda, Minecraft, and more!
http://people.southwestern.edu/~schrum2/re/mm-neat.php
Other
50 stars 20 forks source link

MAP Elites bins for large archives #924

Open schrum2 opened 1 year ago

schrum2 commented 1 year ago

Some ideas I've wanted to try have involved archive structures that are simply too big to hold in memory, even though the proposed approach would likely do a good job of differentiating individuals. I have an idea around this based on hashing.

A hashtable has a limited size. One approach to a hash table is to associate a list with each index so that items that hash to the same index get appended to the list rather than move on to the next available index. This means that multiple distinct items that end up with the same hash end up stored in the same list.

I could do this with MAP Elites. Define a large binning scheme, but limit the actual size of the archive to a reasonable size. Whenever an item needs to be added, it might need to "hash" to another bin. This means that several different niches, with different characteristics, will be stacked on top of each other. Although it could be a bit weird to have distinct niches in competition, it seems like an acceptable trade-off. Also, if the hashing function were periodically changed, then it could shuffle up the archive a bit to encourage a bit of variety.