One of my stepping stones towards becoming an evolutionary biologist was playing with engaging programs that combine evolution and artificial life. Although these “games” are often neither intended for educational or research purposes, I found them instrumental in developing an appreciation for the power and creativity of evolution by natural selection. Here is a collection of my favorites in no particular order: Bitozoa http://www.bpp.com.pl/bitozoa2/bitozoa2.html
I recently discovered the Paper Machines add-on to Zotero, which allows you to perform visualizations and topic modeling analyses on papers in your Zotero collection. I just so happened to have the complete proceedings of both GECCO 2014 and ALife 2014 kicking around in my Zotero database, so I decided to try comparing them. As a quick background, GECCO, which focuses on Genetic and Evolutionary Computation, and ALife, which focuses on Artificial Life, are the two main computer science* conferences that we in the Devolab tend to go to. There is substantial overlap between these conferences (GECCO has an Artificial Life track, after all), but there are also some fundamental differences in approach and focus. GECCO
“What I cannot create, I do not understand” — Richard Feynman In the Devolab, we use artificial life systems to improve our understanding of evolutionary dynamics. Specifically, we perform experiments on populations of self-replicating digital organisms that evolve in a natural and unconstrained manner. But why did we decide to focus on artificial life? What are the advantages and drawbacks of using these relatively complex computational systems?
Back in December PNAS published a paper from Oliveira et al. called “Evolutionary limits to cooperation in microbial communities” . My research interests lie right at the intersection of evolution and cooperation so I was fascinated by the idea that evolution imposes limits on cooperation. In this paper, Oliveira et al. examine the evolutionary dynamics of a community of microbes that can exchange a number of valuable secretions between different strains. This experimental setup enables the evolution of cooperation if one genotype focuses on producing one secretion and shares that secretion with a different strain while also gaining access to that other strain’s secretions. Ultimately, however, they found that cooperation only evolved under specific and limited conditions because of the fitness decrease that occurs when an individual isn’t close enough to receive secretions from another strain. Because I enjoy reading papers […]
I flip-flop between Python, R, and D3 for my data visualizations depending on what exactly I’m doing. My default, though, is definitely Python. One of the most well-established data visualization libraries in Python is Matplotlib. If you dig deep enough in it, you can find a wide variety of features beyond standard graphs. One of the less well-documented of these features is the animation library. The FuncAnimation class in particular is quite powerful, allowing you to programmatically generate the frames for your animation and compile them together. Jake VanderPlas has a great tutorial on using FuncAnimation which I’m not going to try to duplicate. Here, I’m just going to focus on a small but critical aspect of using FuncAnimation that is glossed over elsewhere: blitting. Here’s how critical blitting is: My first attempted Matplotlib animation took […]