Showing posts with label amorphous computing. Show all posts
Showing posts with label amorphous computing. Show all posts

Friday, December 5, 2008

More AC experiments





I'm starting to have fun exploring the possibilities of this AC simulator. Above are spatially stable patterns using a bi-stable latch and small random initial conditions (approximating the noisy conditions of uninitialized amps). In the first picture, there is no diffusion so each parcel of space commits to one of the two states randomly. In the second picture, with diffusion, larger areas that by chance share a state tend to recruit their neighbors into that state. But, all of this recruitment must happen early because the gain on the latches eventually wins at which point there's no changing anyone's state (like an election). Thus, by dialing the ratio of diffusion to latch gain, you can choose the mean size of the features which is a cool phenotype all by itself. For example, imagine that this was a self-organized filter -- that one parameter could allow the construction of different kinds of mechanical particle filters.



In this picture I've stated to combine features. The left and center are two independent ring-oscillators with noisy initial conditions which create these interesting patterns as I've shown previously. (Although I'm still not positive they aren't artifacts, I'm starting to get a theory about how they form, and I'm going to be testing those ideas with controlled experiments tomorrow.) On the right is product of the two in oscillators which results in interesting spatio-temporal patterns. Like the latches above, these patterns are uncontrollable in all but gross properties because the pattern's position is the result of what amounts to "fossilized noise". In other words, the asymmetries at t=0 are amplified/converted into patterns at later time. That said, the form of the patterns is inspirational -- it hints at what is possible in potentially more information-rich initial conditions. For example, I now have an inkling how to partition space into integer sub-divisions (like fingers on a hand) without explicitly putting them there -- I'll be trying that soon.

Wednesday, December 3, 2008

Oscillator + Diffusion + Noise = Pattern


(Ring-oscillator with diffusion; x-axis: space, y-axis: time )

After an incredible multi-day pain-in-the ass getting Matlab installed, I'm able to start to explore some of the amorphous computations possible with this toy model I've been playing with. (Previous results came from running Matlab over X which was painfully slow). The above image is a simple ring-oscillator with diffusion and initialized with small random values. The random initial values seem likely in a molecular implementation whereby the inputs to the molecular amplifiers were un-initialized and therefore small stochastic deviations would dominate.

I know that simple processes can produce complicated structures as Wolfram is wont to repeat, but it's still astonishing when you see it. I mean, this thing has no clock, no memory, no boundaries, no initial conditions (just background noise) and a very simple oscillator; it doesn't get much simpler than that. I think the result is kind of beautiful, sinuous, like a tree made of waves. Maybe I'll do my next door panel like this.

All that said, I'm not positive that the patterns aren't an artifact of the integrator. Since I partition space up uniformly, it might be a result of that. I need to run a test where I reduce the spatial step and proportionately reduce the concentrations but my code isn't set up for that yet.

Thursday, November 27, 2008

Amorphous computing experiments in matlab



I've been playing with what I hope will be an interesting formulation of amorphous computing simulations involving randomly generated logic networks. I first prototyped these in C in my zlab framework but have decided to move them to matlab both to make it easier for others to work on it but also because as I move them from 1D to 2D I'll need a fancier integrator than RK45. Matlab offers a lot more ODE solvers than does my current C framework where I would inevitably have to port in Fortran solvers.

The above figures show the first test results from the matlab code. A three-node ring oscillator (that's 3 "not" gates connected in a cycle) are arrayed across space (x-axis). In both figures, the osciallator at randomly initialized (the same ICs in both images) and thus begin to oscillate though time (y axis). In the first image, there is no communication between each spatial machines so each vectical stripe oscillates in its own arbitrary phase. In the second figure, the exact same machine and ICs are now allowed to exchange information through space by diffusion and you can see that there is a rapid phase alignment between the vertical stripes. Think of it like this: each machine is now trying to recruit its neighbors into its phase. At start, by chance, there will be some neighbors who happen to have similar phase and thus they will be able to dominate their neighbors and bring them over to their phase resulting in a larger dominating force and thus making it easier to dominate even more neighbors, etc, until the whole space phase synchronizes.

This effect has been known for centuries -- it was described by Huygens in 1665 when he noticed pendulum clocks hung on the same wall phase-synchronizing because they could communicate by vibrating the wall. Here's an article about a nanomachine that does the same thing.

Lots more of these results to come now that I have the basic matlab framework built. Early indications are that some interesting things are possible.