While watching the Athletics lose another game (sigh), I dusted off this paper and coded up a quick implementation. It seems to work, although I’m having some problem with the tone mapping bits, and haven’t bothered getting any color into it yet. It’s not really very useful, except perhaps for making backgrounds for your desktop.
Realtime implementations of this are available, especially as screensavers. My favorite is the electric sheep, which provides a never-ending variety of cool looking flame fractals.
Another cool link from the Geometry Junkbox: George Hart’s instructions on building Soda Straw Tensegrity Structures. I can see myself wandering off to the store to buy soda straws, paper clips and rubberbands tonight.
I like arts and crafts, particularly those with a mathematical bent. Wholemovement – The Work of Bradford Hansen-Smith shows what cool stuff you can do with paper plates. Be sure to read the commentary about the “wholeness of circles” and the like. I’d like some of whatever he’s smoking. Found this while perusing the terrific Geometry Junkyard, which I noticed now has an RSS feed. I’ll be adding it to my list shortly.
The recent Wired article on the use of evolutionary computation to optimize Formula-1 cars has been getting a bit of press lately, and finally made it to Slashdot. Buried in the comments I found a link to some work of which I was previously unaware: Differential Evolution. You can also read a matching tech report. The nifty thing is that DE works on real valued functions rather than discrete ones, which may make it more easily adaptable to optimizing functions which are more naturally represented in floating point. I haven’t skimmed the paper, but I suspect this evening I’ll be coding up my own version in Python to try to sort out the details.
Addendum: I had the chance to read the paper at lunch. The idea is really very simple and straightforward to implement. You begin by generating a pool of individuals, each of which contains a vector of floating point values, You can use these values to generate a fitness value for the individual by passing it through a fitness function. Initially, the individuals are assigned random floating point values uniformly generated over sensible domains. In each time step, two individuals are chosen from the population, and a difference vector is generated as the difference between these two individuals. A third individual is chosen, and a subset of its parameters are modified by adding a scaled version of the delta vector to the original values. This new individual is then evaluated, and if its fitness is greater than the previous one, it replaces it in the gene pool.
It seems almost too simple to be useful, but it’s dead simple to code. I’ll have to write up some demo code to give it a try in the not too distant future.
Well, I bailed on the six hour drive down to Mojave to see the launch of SpaceShipOne, but somehow they’ve managed to muddle along without me, and I’m currently watching footage on the major networks. Best wishes to all involved in the project, and I’ll post updates here as the day goes on.
SpaceShipOne is shown here landing during a previous test flight. The craft is actually dropped from a mothership christened “White Knight” at an altitude of 50,000 feet, fires its rockets and climbs to maximum altitude, then glides back to a landing. Previous test flights have reached 40 miles in altidude, today’s attempt will be 68 miles if successful. The pilot, Mike Melvill, is 62 years old and is not carrying a parachute.
Addendum [Mon Jun 21 07:59:48 PDT 2004]: SpaceShipOne has apparently fired its rocket engine and is on its way to apogee. Wahoo!
Addendum [Mon Jun 21 08:14:42 PDT 2004]: Touchdown! Just viewed the landing on MSNBC, he is coasting to a stop after reaching an altitude of 62 miles. Congratulations to all those at Scaled Composites in becoming the first non-governmental power to put a man in space.