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!
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.
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 thegetPopulation
to get all individuals across all bins, and select one random individual from that collection.Note: I notice that
getPopulation
is actually defined inMOME
and thatgetRandomIndividual
is defined inMOMEArchive
. Move the majority of the code forgetPopulation
into a method with the same name withinMOMEArchive
, and then the version of this method inMOME
can simply call the one inMOMEArchive
.