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!
When hypervolume is naively calculated in a domain that can have negative fitness scores, it creates problems. The resulting score does not mean what it should. For example, if you have a 2-objective problem with a score of 5 on a scale of 0 to 10 and a score of -7 on a scale of -10 to 0, then the amount of volume that this score dominates is 5*3 (because 5-0 = 5 and -7 - (-10) = 3). All that is happening here is that the minimum score is being subtracted from all objective scores before hypervolume is calculated.
Modify the methods in MultiobjectiveUtil so that each has a parameter indicating the minimum score in each objective. This can be a double[]. You should be able to retrieve this information with MMNEAT.task.minScores()
When hypervolume is naively calculated in a domain that can have negative fitness scores, it creates problems. The resulting score does not mean what it should. For example, if you have a 2-objective problem with a score of 5 on a scale of 0 to 10 and a score of -7 on a scale of -10 to 0, then the amount of volume that this score dominates is 5*3 (because 5-0 = 5 and -7 - (-10) = 3). All that is happening here is that the minimum score is being subtracted from all objective scores before hypervolume is calculated.
Modify the methods in
MultiobjectiveUtil
so that each has a parameter indicating the minimum score in each objective. This can be adouble[]
. You should be able to retrieve this information withMMNEAT.task.minScores()