Sun, 3 Feb 2008
Two Bars + Four Cables = Tetra, the new "Atom"
« Darwin at Architecture | Main | Reducing Degrees of Freedom » Posted by at 7:24 PM in Code
It's great to be back in business with Darwin at Home! Thanks to the people who sent me feedback after the most recent episode, because it's really encouraging.
Last night I spent more than an hour chatting with a few other people on a live call-in internet radio show about artificial life hosted by the ever-gracious Tom Barbalet and available in podcast form if you feel inclined to listen to that kind of discussion. I thought it was a fascinating talk!
This friday I spent my first full day working on Darwin at Home at the architect's office where Hans Moor works, and it was inspiring to write code with such an incredible view of the city of Rotterdam. The most fascinating part of the day was when we had lunch, and I was surrounded by four architects asking questions about evolution and listening to my anecdotes about getting surprised by what survival of the fittest discovered inside my computer. They were very interested in what I had to say and wanted to see more of it in the form of a presentation, with lots of question-answer time.
The most difficult thing to explain was that I need to have the main thinking of the algorithm happen at the very low level, creating a bottom-up emergent organization instead of some kind of top-down design approach.
Code-wise it was also a very interesting day of challenges, because it was one of those days when you learn a great deal by discovering that you were on a dead-end street. In my case on friday it involved making the next step after the BarJoint that I have talked about in previous shows. When you connect two tensegrities together to make a new one, you inevitably bring bar ends in contact with cables, so I built some code to handle this splitting of a cable into two cables of half the span and connecting the ends properly. But then I imagined splitting one of the halves up again and realized that I needed the idea of a "cable chain" which would be able to split up into any number of cables, punctuated by joints where bars impinge.
As it turns out this is a useless concept and I've removed it from the code already. On top of that, I'm now having my doubts about the relevance of the BarJoint, but I'll hold on to that a bit longer.
But the real insight came after hitting the brick wall and then wondering what could actually be the right way to approach the problem. The brick wall was that the tension in a tensegrity just forms a network, so any idea of a "chain" of cables is never enough. Only with endless overlapping chains would the whole network be captured, and they really don't have any use then.
The insight is a little hard to describe, but it's really about what element can be the focus of behavior. There are bars and cables, and so far I've been considering bars to be the location of behavior. But the more you think about what a bar experiences and how it might interpret its experiences, the more you realize that it's not the right "atom" of structure for behavior. The "atom" must contain both bars and cables!
The answer is: the Tetra. That is, the tetrahedron consisting of two bars and the four cables connecting their ends into a kind of "kite" shape. The bars cross and the cables stretch around them. But the shape is not square and the bars should not actually cross. In this episode I try to explain this.
- Tetra.java - the new "atom" of behavior
- Volume.java - visit tetras, calculate volume
Technorati Tags: tensegrity evolution darwin architecture