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

TWEAN Genotype that evolves its own block list #783

Closed schrum2 closed 2 years ago

schrum2 commented 2 years ago

We did this in Python (https://github.com/schrum2/EvoCraft-SCOPE/issues/6), but never did it in Java.

Currently, when a list of possible blocks is defined, the CPPN has to have a separate output for each one. This is a bit extreme. What we did in Python was allow the CPPN to have a fixed number of block outputs, but evolve which blocks were represented by each of those possibilities.

I think we can implement something like this by using the ShapeInnovationGenotype as inspiration. It is a combination of a CPPN and a BoundedRealValuedGenotype. However, what we need here is a combination of a CPPN and a BoundedIntegerValuedGenotype where each int represents the index of a block in the available block set.

The new genotype can be called MinecraftCustomBlocksGenotype, but I worry that lots of changes have to be made to the existing code to handle it. Each time a regular TWEANNGenotype is expected, we may need a special case to handle this new possibility instead.

richeyme commented 2 years ago

Looks like the lists of blocks evolves now. Here's what two separate generations looked like: First: 2022-06-10_15 52 04

Second: 2022-06-10_15 52 06