After a whirlwind of traveling over Christmas break, that saw me traveling straight from a Computer Science final in Oberlin to the Albuquerque airport to Los Angeles to see my brother to spend New Year's Eve in San Francisco with Oberlin people to LA again and back to Missouri for a few days before flying back to Ohio, I am all settled in.
Winter Term is coming to a close, and if you're looking for me, I am easily found waking up around 1 in the afternoon, working on my cool Computer Science Winter Term project until track practice at 3:30, working a little more until dinner, then watching movies with friends until bedtime (which can be anywhere from midnight to 4 in the morning). I'm pretty excited about my Winter Term project this year. I thought it up myself and worked out the details with my Comp. Sci. professor, and it is much more academically rigorous (in my opinion) than my Winter Terms as a freshman (here, here, or here if you want to hear about that bamboo blow-out) or a sophomore. I enjoyed both projects and learned from them, especially about what kinds of things I like to do and might want to do as a job. But I always felt like I was sort of piecing these projects together at the last minute and that I was taking a month-long break from scholarly work to do these personal projects of mine.
This time around, I am taking on "Evolution-Inspired Computer Science" by researching and writing programs that either model evolution or work in the same way Natural Selection works. The main elements of Natural Selection, as laid out by my homeboy Darwin, are:
- There exists in every population a certain amount of variability.
- Some of these variable traits will confer an advantage (in survival, reproduction, etc.) to certain members of the population based on the environment.
- These advantaged members of the population will have a higher percentage of offspring in the next generation, and if the advantageous traits are heritable, then their more numerous offspring may also be endowed with them.
All of the programs I am writing this January operate with these concepts in mind. My first program, which I completed work on last week, is a simple drawing program that works like this:
The computer generates a drawing, starting by drawing a line about a quarter of an inch long, straight up from the center of the page, like so:
the 'pen' then rotates some random number of degrees and draws another line:
and keeps going, making a random picture about 50 line segments long:
after 9 lines:
after 31 lines:
and finally, we have:
which is mirrored to make it look prettier:
The computer then redraws the image, making small changes to a few of the angles in the picture. The second image tends to look a lot like the first.
Now that we have a small population of drawings with some variability within the population, we can choose between the images. The winner has some advantage over the loser, and gets to survive to produce another generation of drawings, each slightly different from the parent. You can choose the child that is most fit, and so on. When Richard Dawkins performed a similar experiment in the 1980s, he spent hours in front of his computer, picking between drawings and choosing the one that looked most 'biological' to him. Eventually he started seeing structures that looked like ones that actually appear in nature, flower-like and viney structures that eventually started to look like beetles and arachnids. I decided to use more objective measures to choose between my drawings, partly out of laziness. I had the computer choose between the two drawings, based on things like how many times the lines crossed over each other, the surface area of the drawing, or how high the image reached on the page. This way, I could sit back and watch how the designs evolved over time and test many more generations of drawings over a short period of time. In the movie below, I selected the 'winning' drawings based on two parameters: how high the highest point in the drawing was in the image, and how many times the drawing recrossed a line it had already drawn.
As you can see, the drawing spreads out and reaches the top of the image pretty quickly. Instead of straightening out like train tracks (like this one), it balances height and loopiness pretty well. My second project is a evolution simulation that places 'creatures' randomly across a grid and lets them interact. They can evolve, mate, and eat each other depending on what kind of teeth, mobility, plumage, and eyesight each creature has. This one has been giving me lots of problems, and tends to end up with one predator eating all of the other creatures and dying alone (The Hamlet Conclusion) or one species of plant taking over the whole board (The Kudzu Conclusion). Not ideal.
Overall, I love the idea of Winter Term. I have really enjoyed my three projects I have done over my first three years, and I really have learned a lot about working with my hands, organizing and presenting my creative work, and putting my own ideas into action. The issue with this very free-form inter-term we have adopted at Oberlin is that you will hear people talking about their Winter Term projects in these kind of terms: "Oh, it's no big deal. I just have to read a comic book." While others opt for something a bit more rigorous, like Winter Term Russian, a perennial offering where students cram a semester-long, 5-credit-hour Russian language class into 4 bitterly cold weeks in December, presumably to experience what it felt like to be Siberian schoolchildren at the turn of the 20th century. Like so many things in college, you get out of Winter Term what you put into it.