Welcome to my weblog’s new home at WordPress! Make sure to update your bookmark or RSS feed address.
Sorry I’ve been out of touch for awhile; I’ve been pretty busy lately – which isn’t to say I’m not now! – but with the new address and some recent finds I thought it was about time for another edition of CTo’W.
This arbitrary period of time, I’ll be focusing on tech stuff. Given my technical interests, this should hardly be surprising. First of all is an article I found some time ago about genetic programming, titled Creatures From Primordial Silicon. Definitely worth a read, whether or not you’re a genetic programmer. Here’s a taste: “A further five cells appeared to serve no logical purpose at all–there was no route of connections by which they could influence the output. And yet if he disconnected them, the circuit stopped working.“
For those of you unfamiliar with genetic programming, it is, in short, a way of phrasing a complicated problem in a way that the computer can find a good solution for it. That description is extremely general and pretty useless without more detail, though, so here we go: the kind of problem that genetic programming typically solves is one with no one correct answer, but rather a multitude of them – and when you have a “good” solution, it may not have a black-and-white distinction from a not-so-good one. For example: “Design a bicycle” is a very difficult problem. There are many factors to consider: what kind of riding is being done? How much shock absorption do you need? How light should the frame be? How strong should the frame be? (These last two requirements are an example of a tradeoff – more strength means more weight.) The problem pretty obviously has no one right answer, or there would only be one kind of bicycle on the market.
Genetic programming tries to answer the problem by taking a page out of evolution’s book: it starts off with a bunch of random “gene sequences”, analyzes their performance according to a “fitness function”, “mates” some of the better ones, introduces random “mutations”, and ends up with a new pool of genes. This process is repeated many, many times, until one of the gene sequences performs acceptably well according to the fitness function. In genetic programming, a “gene” is one of the parameters of the problem – for example, “length of front shock”, “length of rear shock”, “number of front gears”, “number of rear gears”, “frame composition”, etc. A “gene sequence” is simply the combination of all of the genes required of a solution, with a unique combination of values for all the genes. The “fitness function” is what, in nature, causes “survival of the fittest” – those gene sequences with the highest survival and reproduction rate tend to dominate the gene pool. In genetic programming, you define what the fitness function is, so you get to pick which traits to focus on. In our bicycle example, the fitness function may include such factors as “failure rate of the frame” (i.e. how often the frame bends or breaks), “effort required” (how much work it takes to perform the same task on different bicycles), and some measure of “safety” – how often an equally-talented rider will end up falling off the bike, for example. “Mating” and “mutation” are simply ways of producing new gene sequences; obviously, in mating, some genes are taken from two (or more) parents to create a new sequence, while in mutation, random changes are made to some genes, producing a new sequence. The child of a mating process may also get mutated a bit, too. There you have it! A two-minute introduction to genetic programming. (If I haven’t done a very good job explaining something, please feel free to ask questions in the comments.)
My next Cool Thing is targeted to programmers: Free Programming Books. It’s an excellent collection of programming books on a variety of languages and topics, including such classics as The C Programming Language, Programming Pearls, and How To Design Programs. I’ll be spending some time very soon downloading many of these to my collection of ebooks, even though I already own some of them in hard copy.
And, finally, my last Cool Thing for this arbitrary time unit: Moon, a film by Duncan Jones. Don’t watch too much of the trailer; it’s rather long and gives away a lot of the movie. Don’t be afraid to stop it before it’s finished playing! Having said that, I’m looking forward to seeing it in theatres in June. Think you recognize the astronaut? He played Zaphod Beeblebrox in HHGttG. The voice of the computer? Kevin Spacey. Yep, I can’t wait either.
Aaand that’ll just about do it for me. You stay classy, The Internet.
AC