Sunday, January 02, 2005

Things I'm thinking about

So I think I've made several big mistakes in my life. One of them was not getting enough computer science so that I can program stuff I think would be cool.

My cousin showed me some really cool stuff he's doing in his Ph.D program, involving making self-generating ambient music from some pretty nifty algorithms. So that set my head running. I think it's a nifty idea, to hook up music output to variables in an ongoing dynamic process. But I was more interested in the algortihm than the application (though making music sure is cool).

I spent a hunk of time today looking into complex systems. Basically, it's a whole field of study devoted to learning what we can from the simple notion that a system of agents with very simple rules can actually exhibit pretty complex behavior. Think ants: many tiny brains, each with a pretty simple program, major major stuff accomplished. They've only been around for hundreds of millions of years, with little tampering by evolution, so it seems mother nature thinks she's got a "keeper" when it comes to ants. And crocodiles and sharks. And beetles.

Anyway, now my head's a-buzz with the idea that massive models could be used bi-derectionally: Program some agents, see what they do. Or see what a system does, then check out the agents' programs. I'm thinking the latter is cool: If one used some kind of dynamic programming of the agents and agent variables (like a neural net or some other goal seeking function) and one had some stats that one wanted the sytem to hit (let's say we're modeling traffic, and we want ave commute times to match ave observed commute times) we could make the system tell us what our agents' programs must be. Granted, there are probably many possible solutions of agent programs that generate the same total system behavior. But it might be nice to see where the solutions lie. Are there lots of selfish drivers? Are we driving too fast? Is it because we all try to get to work between 8 & 9?

Basically, my thought is that when trying to understand a system, we should come at it from 2 directions simultatenously: Program agents as accurately as possible, and optimize agent programs so sytem is as accurate as possible. I think the exercise would be instructive.

I wish there was some cool software to download and play with that lets you play with complex systems. I already have game of life.

In other news, I'm confident I've come up with a way to do the amazon recommendation thing. I've got an approach for creating a single ranking stat for individual products given the many-to-many relationships involved. I'm not sure about whether it could be calc'd in real time, but it could be done in batches. It's some pretty basic vector stuff, so maybe it could be done in RT.

My blog needs more photos.