Helix Color Fade Algorithm

(yes, I am aware that it is sideways.)

First, some background. Helix is an art installation that uses an evolutionary algorithm to produce smooth color gradients on a series of helical rods populated by sets of RGB pixels. The organisms in the algorithm are a series of RGB color values, and the fitness function for individuals is how similar each color value is to its neighbors. The smoother the gradient along the organism, the higher the fitness. The higher the fitness, the more those organisms get to reproduce, but with a chance of mutation. Rinse and repeat, and you get smoother and smoother color gradients as time goes on.

Helix Rendering

Helix Rendering

Now, the challenge in this is figuring out how to best display the organisms, both so that their gradients may be appreciated, but also so that we can pack as many organisms in the installation as possible. Ideally, the installation would be able to display many separate populations simultaneously, and thus allow us to do fun things like demonstrate population migrations, founder effects, etc.

So, that leaves us with using the time dimension to display the gradient, by cycling through the lights of each organism’s phenotype once per generation. So, we tried that. Suffice to say, the result is less than pleasing, and not exactly intelligible. The problem is that people have a hard time getting a feel for how smooth a gradient is if they can’t see it all at once. The only light they see is the one that is shining right then, and they have to try hard to remember what colors came before, and they have to imagine the whole sequence, and oh, they’re walking away. So, what can we do? How can we both display the gradient, while having all the organisms represented?

So far, the answer seems to be to offset the cycle, such that each organism is displaying the next locus at any given time, as we go down the line of organisms. So, at timepoint 1, organism 1 is displaying locus 1, organism 2 is displaying locus 2, etc. T2, o1 displays l2, o2 displays l3, etc. This is a little bit of a perceptual hack, because you seem to see the whole gradient moving down the rod, but the truth is that you are seeing one locus from one organism at a time. It may *look* like the evolved gradient because your fitness (and location) neighbors are pretty likely to have a similar genome to you, and thus the locus they are displaying is pretty likely to be the same value that is in that locus for you.

So, this seems to solve the problem, and give approximately the right evolutionary intuition, while allowing us to display as many populations as possible.

Ultimately, I’m not sure that we’ll go with this approach all the time, since it isn’t, in fact, exact, but at the very least, it gives a flavor of a population for when we want to do multi-population evolutionary demonstrations.

Right, so that was all background for the video above. It turns out that if you are displaying colors in sequence without any fading, they are SERIOUSLY uncomfortable to look at, especially in the early stages of evolution. It’s all blinky, jagged, eye-searing, seizure inducing horribleness. So, I added some fades between the colors as they went down the line to make it more pleasant to look at, while still accurately conveying the gradients in the population.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s