In this track, you will be focusing on Lenia, a continuous Alife model invented by Bert Chan. You will dive into the details of how Lenia is implemented, and modify it to allow space-varying parameters. At the end of the track, you should be able to generate beautiful visualizations, similar to the one you can explore in PyCA in the ‘MultiLenia’ automaton.
Lenia is a ‘continuous’ cellular Automaton, which is similar in spirit to the Game of Life.
In GoL, each pixel looks at the number live pixels in the immediate neighbors.
In Lenia, each pixel looks at an extended neighborhood (100’s or 1000’s) of pixels, and computes a weighted sum or all their values.
According to the value of this sum, the pixel will either decrease in intensity or increase in intensity.
Let’s denote the values of the ‘Lenia field’ as $c^t(x,y)$. This will take values in $[0.,1.]$. The index $t$ denotes the time, while $x,y$ denote the space location of the ‘pixel’ we are looking at.
The Lenia evolution equation tells us how to go from $c^t(x,y)$ to $c^{t+\Delta t}(x,y)$, namely how to evolve the state by a tiny amount of time $\Delta t$ :
$$ c^{t+\Delta t}(x,y) = \left[c^t(x,y)+\Delta t\,\,g(K*c^t)\right]_0^1 $$
Here $K*c^t$ denotes the convolution operation, and $K=K(x,y)$ is a kernel. $g$ is a non-linear function that will be applied point-wise to the result of the convolution. Finally $[...]_0^1$ denotes that we clip the resulting value between 0 and 1.
In words, the Lenia evolution equations tells us to :
To run Lenia in PyCA we ‘just’ need to implement this step function. Luckily, it has already been done. You can take a look at what it looks like by selecting the MultiLenia
automaton.