Closed schrum2 closed 2 years ago
So far, this is able to generate novel things, as seen with the picture below. However, we still need a way of saving and loading everything in the archive, which is what #63 is. From here, it may be interesting to also have other characterizations, specifically for block types, or maybe different distance calculations.
Each new characterization should be a new issue. If that it all that is left, then this can actually be closed.
Everything is up and running, and since new characterizations will be new issues, everything here has been added!
The code for
interactive_cppn_evolution.py
is based off of the code inpicture2d/evolve_interactive.py
which was taken from the NEAT-Python repository (https://github.com/CodeReclaimers/neat-python), and it meant to be a simplistic reimplementation of Picbreeder (the one in MM-NEAT is more developed).However, there is another bit of code:
picture2d/evolve_novelty.py
. This is based on Novelty Search: http://eplex.cs.ucf.edu/noveltysearch/userspage/The basic idea is that instead of trying to optimize a specific objective, we try to select individuals that are as different as possible from other things we've seen before. This depends on some kind of characterization of the properties of the thing being evolved. I would like to evolve CPPN-generated shapes with Novelty Search, but we need a way of characterizing the shapes first so we can measure "distance" between shapes in shape-space.
We'll probably want to test a variety of novelty characterizations (typically called behavior characterizations, but that doesn't really make sense in the context of a shape that doesn't do anything), and compare and contrast. So, our first attempt at "distance" can be something simple. Specifically:
A 3D shape is characterized by a flat list (1D) of the blocks which are and are not present. A present block is a 1 and an absent block is a 0. Simple as that! Call this the "presence" characterization.