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

How MOME Selects a Random Individual #921

Closed schrum2 closed 1 year ago

schrum2 commented 1 year ago

I have a MOME run where one of the sub-pops has up to 1000 individuals, whereas others have single digits. It's a bit surprising. It makes me wonder whether the search should concentrate more or less on different bins. Currently, the getRandomIndividual method selects a random bin, and then a random individual. This actually makes individuals in smaller bins more likely to be picked than individuals in larger bins. For the most part, I think this is the correct approach, but I wonder if we should explore alternatives.

Make a boolean command line parameter whose default value is false. Call it "momeSelectsUniformlyAcrossWholeArchive" and use it to have an alternative behavior in the getRandomIndividual method. When this parameter is true, then instead of getting a random member from a random bin, call the getPopulation to get all individuals across all bins, and select one random individual from that collection.

Note: I notice that getPopulation is actually defined in MOME and that getRandomIndividual is defined in MOMEArchive. Move the majority of the code for getPopulation into a method with the same name within MOMEArchive, and then the version of this method in MOME can simply call the one in MOMEArchive.