# Lenia

Lenia es una familia de autómatas celulares creada por Bert Wang-Chak Chan. Lenia pretende ser una generalización continua del Juego de la vida de Conway, con estados, y espacio continuos. Como consecuencia de su dominio continuo de alta resolución, los patrones autónomos complejos ("formas de vida" o "naves espaciales") generados en Lenia son diferentes de los que aparecen en otros autómatas celulares, siendo "geométricos, metaméricos, difusos, resistentes, adaptativos y de reglas genéricas".
Lenia ganó el Concurso de Criaturas Virtuales de 2018 en la Conferencia de Computación Genética y Evolutiva en Kioto, una mención de honor para el Premio de Arte ALIFE en ALIFE 2018 en Tokio, y la Publicación Destacada de 2019 de la International Society for Artificial Life (ISAL).

## Reglas
### Actualizaciones iterativas

Sea ${\mathcal {L}}$ la red o cuadrícula conteniendo un conjunto de estados $S^{\mathcal {L}}$ . Como muchos autómatas celulares, Lenia es actualizado de forma iterativa; cada estado de salida es una función pura del estado anterior, de modo que$\Phi (A^{0})=A^{\Delta t},\Phi (A^{\Delta t})=A^{2\Delta t},\ldots ,\Phi (A^{t})=A^{t+\Delta t},\ldots$dónde $A^{0}$ es el estado inicial y $\Phi :S^{\mathcal {L}}\rightarrow S^{\mathcal {L}}$ es la regla global, que representa la aplicación de la regla local sobre cada sitio $\mathbf {x} \in {\cal {L}}$ . De este modo $\Phi ^{N}(A^{t})=A^{t+N\Delta t}$ .
Si la simulación es avanzada por $\Delta t$ en cada paso de tiempo, entonces la resolución de tiempo $T={\frac {1}{\Delta t}}$ .

### Conjuntos de estados

Sea $S=\{0,1,\ldots ,P-1,P\}$ con un máximo $P\in \mathbb {Z}$ . Este es el conjunto de estados del autómata y caracteriza los posibles estados que se pueden encontrar en cada sitio. $P$ más grandes corresponden a resoluciones de estado más altas en la simulación. Muchos autómatas celulares utilizan la resolución de estado más baja posible, es decir $P=1$ . Lenia permite resoluciones mucho más altas. Tenga en cuenta que el valor real en cada sitio no está en $[0,P]$ sino más bien un múltiplo entero de $\Delta p={\frac {1}{P}}$ ; por lo tanto tenemos $A^{t}(\mathbf {x} )\in [0,1]$ para todo $\mathbf {x} \in {\mathcal {L}}$ . Por ejemplo, dado $P=4$, $\mathbf {A} ^{t}(\mathbf {x} )\in \{0,0.25,0.5,0.75,1\}$ .

### Vecindarios

Matemáticamente, los vecinos como los del Juego de la vida pueden ser representados utilizando un conjunto de vectores de posición en $\mathbb {R} ^{2}$ . Para el clásico vecindario de Moore utilizado por el Juego de la vida, por ejemplo, ${\mathcal {N}}=\{-1,0,1\}^{2}$ ; es decir, un cuadrado de tamaño 3 centrado en cada sitio.
En el caso de Lenia, el vecindario es en cambio una bola de radio $R$ centrada en un sitio, ${\mathcal {N}}=\{\mathbf {x} \in {\mathcal {L}}:\lVert \mathbf {x} \rVert _{2}\leq R\}$, que puede incluir el propio sitio original.
Tenga en cuenta que los vectores de vecindad no son la posición absoluta de los elementos, sino más bien un conjunto de posiciones relativas (deltas) con respecto a cualquier sitio determinado.

### Regla local

Existen variantes discretas y continuas de Lenia. Sea $\mathbf {x}$ un vector en $\mathbb {R} ^{2}$ dentro ${\mathcal {L}}$ representando la posición de un sitio dado, y ${\mathcal {N}}$ el conjunto de sitios vecinos de $\mathbf {x}$ . Ambas variaciones comprenden dos etapas:
* Usando un kernel (núcleo) de convolución $\mathbf {K} :{\mathcal {N}}\rightarrow S$ para calcular la distribución potencial $\mathbf {U} ^{t}(\mathbf {x} )=\mathbf {K} *\mathbf {A} ^{t}(\mathbf {x} )$ .
* Usando una mapeo (función) de crecimiento $G:[0,1]\rightarrow [-1,1]$ para calcular la distribución de crecimiento final $\mathbf {G} ^{t}(\mathbf {x} )=G(\mathbf {U} ^{t}(\mathbf {x} ))$ .
Una vez $\mathbf {G} ^{t}$ es calculado, se escala según la resolución de tiempo elegida $\Delta t$ y es agregado al valor del estado original:$\mathbf {A} ^{t+\Delta t}(\mathbf {x} )={\text{clip}}(\mathbf {A} ^{t}+\Delta t\;\mathbf {G} ^{t}(\mathbf {x} ),\;0,\;1)$Aquí, la función de corte (clip) está definida por $\operatorname {clip} (u,a,b):=\min(\max(u,a),b)$ .
Para Lenia discreta y continua, las reglas locales se definen de la siguiente manera:${\begin{aligned}\mathbf {U} ^{t}(\mathbf {x} )&={\begin{cases}\sum _{\mathbf {n} \in {\mathcal {N}}}\mathbf {K(n)} \mathbf {A} ^{t}(\mathbf {x} +\mathbf {n} )\Delta x^{2},&{\text{Lenia discreto}}\\\int _{\mathbf {n} \in {\mathcal {N}}}\mathbf {K(n)} \mathbf {A} ^{t}(\mathbf {x} +\mathbf {n} )dx^{2},&{\text{Lenia continuo }}\end{cases}}\\\mathbf {G} ^{t}(\mathbf {x} )&=G(\mathbf {U} ^{t}(\mathbf {x} ))\\\mathbf {A} ^{t+\Delta t}(\mathbf {x} )&={\text{clip}}(\mathbf {A} ^{t}(\mathbf {x} )+\Delta t\;\mathbf {G} ^{t}(\mathbf {x} ),\;0,\;1)\end{aligned}}$

### Generación del kernel (núcleo)

Hay muchas formas de generar el kernel de convolución. $\mathbf {K}$ . El kernel final es la composición de un shell (caparazón) del kernel. $K_{C}$ y un esqueleto de kernel$K_{S}$ .
Para el shell del kernel $K_{C}$, Chan da varias funciones que se definen radialmente . Las funciones del shell del kernel son unimodales y están sujetas a la restricción $K_{C}(0)=K_{C}(1)=0$ (y típicamente, también $K_{C}\left({\frac {1}{2}}\right)=1$). Las funciones del kernel de ejemplo incluyen:$K_{C}(r)={\begin{cases}\exp \left(\alpha -{\frac {\alpha }{4r(1-r)}}\right),&{\text{exponencial}},\alpha =4\\(4r(1-r))^{\alpha },&{\text{polinómica}},\alpha =4\\\mathbf {1} _{\left[{\frac {1}{4}},{\frac {3}{4}}\right]}(r),&{\text{rectangular}}\\\ldots ,&{\text{etc.}}\end{cases}}$Aquí, $\mathbf {1} _{A}(r)$ es la función indicadora . Una vez que se ha definido el shell del kernel, el esqueleto del kernel $K_{S}$ se utiliza para expandirlo y calcular los valores reales del kernel transformando el shell en una serie de anillos concéntricos . La altura de cada anillo está controlada por un vector de pico del kernel. $\beta =(\beta _{1},\beta _{2},\ldots ,\beta _{B})\in [0,1]^{B}$, dónde $B$ es el rango del vector de parámetros. Entonces el esqueleto del kernel $K_{S}$ Se define como$K_{S}(r;\beta )=\beta _{\lfloor Br\rfloor }K_{C}(Br{\text{ mod }}1)$El kernel final $\mathbf {K} (\mathbf {n} )$ es, por lo tanto$\mathbf {K} (\mathbf {n} )={\frac {K_{S}(\lVert \mathbf {n} \rVert _{2})}{|K_{S}|}}$tal que $\mathbf {K}$ está normalizado para tener una suma de elementos de $1$ y $\mathbf {K} *\mathbf {A} \in [0,1]$ (para la conservación de masa ), con $|K_{S}|=\textstyle \sum _{\mathcal {N}}\displaystyle K_{S}\,\Delta x^{2}$ para el caso discreto, y $\int _{N}K_{S}\,dx^{2}$ en el caso continuo.

### Mapeos de crecimiento

El mapeo del crecimiento $G:[0,1]\rightarrow [-1,1]$, que es análogo a una función de activación, puede ser cualquier función unimodal, no monótona y que acepte parámetros $\mu ,\sigma \in \mathbb {R}$ . Algunos ejemplos incluyen$G(u;\mu ,\sigma )={\begin{cases}2\exp \left(-{\frac {(u-\mu )^{2}}{2\sigma ^{2}}}\right)-1,&{\text{exponencial }}\\2\cdot \mathbf {1} _{[\mu \pm 3\sigma ]}(u)\left(1-{\frac {(u-\mu )^{2}}{9\sigma ^{2}}}\right)^{\alpha }-1,&{\text{polinómico}},\alpha =4\\2\cdot \mathbf {1} _{[\mu \pm \sigma ]}(u)-1,&{\text{rectangular}}\\\ldots ,&{\text{etc.}}\end{cases}}$dónde $u$ es un valor potencial extraído de $\mathbf {U} ^{t}$ .

### El juego de la vida

El Juego de la vida puede considerarse como un caso especial de Lenia discreta con $R=T=P=1$ . En este caso, el kernel sería rectangular, con la función$K_{C}(r)=\mathbf {1} _{\left[{\frac {1}{4}},{\frac {3}{4}}\right]}(r)+{\frac {1}{2}}\mathbf {1} _{\left[0,{\frac {1}{4}}\right)}(r)$y la regla de crecimiento también rectangular, con $\mu =0.35,\sigma =0.07$ .

## Patrones

Al variar el kernel convolucional, el mapeo de crecimiento y la condición inicial, se han descubierto en Lenia más de 400 "especies" de "vida", que muestran "autoorganización, autorreparación, simetrías bilaterales y radiales, dinámica locomotora y, a veces, una naturaleza caótica". Chan ha creado una taxonomía para estos patrones.

## Trabajo relacionado

Otros trabajos han notado la gran similitud entre las reglas de actualización de los autómatas celulares y las convoluciones. De hecho, estos trabajos se han centrado en la reproducción de autómatas celulares utilizando redes neuronales convolucionales simplificadas. Mordvintsev et al. investigó el surgimiento de la generación de patrones autorreparadores. Gilpin descubrió que cualquier autómata celular podría representarse como una red neuronal convolucional y entrenó redes neuronales para reproducir autómatas celulares existentes
Desde este punto de vista, los autómatas celulares pueden verse como un caso especial de redes neuronales convolucionales recurrentes . La regla de actualización de Lenia también puede verse como una convolución de una sola capa (el "campo potencial" $\mathbf {K}$ ) con una función de activación (el "mapeo de crecimiento" $G$ ). Sin embargo, Lenia utiliza kernels fijos mucho más grandes y no se entrenan mediante el descenso de gradiente.