Lenia の定義

はじめに

前回はセルオートマトンの数学的な定義について述べました.
今回はセルオートマトンを利用したライフゲームGame of Life; GoL)を一般化した Lenia-0 の数学的な定義について述べていきます.

Lenia-0 の定義

セルオートマトン  \mathcal{A} は次のような5つ組で定義されました:


\mathcal{A} \triangleq (\mathcal{L}, \mathcal{T}, \mathcal{S}, \mathcal{N}, \phi)

Lenia-0  \mathcal{A}_\text{L0} は次のような5つ組で定義されます:


\mathcal{A}_\text{L0} \triangleq (\Delta \boldsymbol{x}\mathbb{Z}^2, \ \Delta t \mathbb{Z}, \ \Delta p \{0, \dots, P\}, \ \mathbb{B}_1[0], \ \mathbf{A}^{t + \Delta t} \longmapsto [\mathbf{A}^t + \Delta t \ \mathbf{G}^t(\mathbf{K}_\boldsymbol{\beta} * \mathbf{A}^t)]^1_0)

ここで, \mathcal{L} = \Delta \boldsymbol{x} \mathbb{Z}^2 は格子点間の距離を  \Delta \boldsymbol{x} = \dfrac{1}{R} R \in \mathbb{N} 空間分解能)とした2次元格子, \mathcal{T} = \Delta t \mathbb{Z} は時間ステップの間隔を  \Delta t = \dfrac{1}{T} T \in \mathbb{N} 時間分解能)とした時間集合, \mathcal{S} = \Delta p \{0, \dots, P\} は状態精度  \Delta p = \dfrac{1}{P} P \in \mathbb{N} 状態分解能)の状態集合, \mathcal{N} = \mathbb{B}_1[0] = \{\boldsymbol{x} \in \mathcal{L} \mid \|\boldsymbol{x}\|_2 \leq 1\} は Euclid  L^2-ノルム上の半径1の単位円近傍, \mathbf{A}^{t + \Delta t} \longmapsto [\mathbf{A}^t + \Delta t \ G^t(\mathbf{K}_\boldsymbol{\beta} * \mathbf{A}^t)]^1_0 は局所規則で,


\begin{array}{lcll}
\phi: & \mathcal{S}^\mathcal{N} & \longrightarrow & \mathcal{S}\\
 & \mathbf{A}^t(\mathcal{N}_\boldsymbol{x}) & \longmapsto & \phi(\mathbf{A}^t(\mathcal{N}_\boldsymbol{x})) \triangleq [\mathbf{A}^t(\boldsymbol{x}) + \Delta t \ \mathbf{G}^t(\boldsymbol{x})]^1_0
\end{array}

を表します.

局所規則の詳細

ここでは局所規則についてもう少し詳しく説明します.


\begin{array}{lcll}
\phi: & \mathcal{S}^\mathcal{N} & \longrightarrow & \mathcal{S}\\
 & \mathbf{A}^t(\mathcal{N}_\boldsymbol{x}) & \longmapsto & \phi(\mathbf{A}^t(\mathcal{N}_\boldsymbol{x})) \triangleq [\mathbf{A}^t(\boldsymbol{x}) + \Delta t \ \mathbf{G}^t(\boldsymbol{x})]^1_0
\end{array}

前回説明した内容ではありますが, \mathbf{A}^t(\boldsymbol{x}) は時刻  t \in \mathcal{T} における点  \boldsymbol{x} \in \mathcal{L} の状態を表していて,点  \boldsymbol{x} における近傍を  \mathcal{N}_\boldsymbol{x} \triangleq \{\boldsymbol{x} + \boldsymbol{n} \mid \boldsymbol{n} \in \mathcal{N}\} とすれば,


\mathbf{A}^t(\mathcal{N}_\boldsymbol{x}) \triangleq \{\mathbf{A}^t(\boldsymbol{n}) \mid \boldsymbol{n} \in \mathcal{N}_\boldsymbol{x}\}

は近傍  \mathcal{N}_\boldsymbol{x} 上の状態集合を表します.
また, \mathbf{G}^t(\boldsymbol{x}) は成長分布というものです.
成長分布について説明するために,いくつか準備します.

カーネル

カーネル  \mathbf{K}_\boldsymbol{\beta}: \ \mathcal{N} \longrightarrow \mathcal{S} は,その詳細な「質感」を決定するカーネルコア関数  K_\text{c} \: [0,1] \longrightarrow [0,1] と,全体の「骨格」を決定するカーネルシェル関数  K_\text{s} \: [0,1] \longrightarrow [0,1] によって構成されています.
カーネルコア関数  K_\text{c} K_\text{c}(0) = K_\text{c}(1) = 0 を満たす単峰性関数(山が1つであるような関数)となっていて,通常は  K_\text{c}\left(\dfrac{1}{2}\right) = 1 を満たすように構成されます.
カーネルコア関数の引数に中心からの距離  r \in [0, 1] を取ることによって,点の周囲に均一な輪を作ることができます:


K_\text{c}(r) = \left\{
\begin{array}{ll}
e^{\alpha - \frac{\alpha}{4r(1-r)}} & \text{指数関数,} \alpha = 4\\
(4r(1-r))^\alpha & \text{多項式関数,} \alpha = 4\\
\mathbb{I}_{\left[\frac{1}{4}, \frac{3}{4}\right]}(r) & \text{矩形}\\
\cdots & \text{or others}
\end{array}
\right.

ここで, \mathbb{I} はステップ関数です:


\mathbb{I}_A(r) = \left\{
\begin{array}{ll}
1 & r \in A\\
0 & \text{otherwise}
\end{array}
\right.

次に,カーネルシェル関数  K_\text{s} はサイズ  B \in \mathbb{N} のベクトル  \boldsymbol{\beta} = (\beta_1, \dots, \beta_B) \in [0, 1]^B を引数に取って,カーネルコア関数  K_\text{c} をピークの高さ  \beta_i の等距離同心円にコピーするものになっています:


K_\text{s}(r; \boldsymbol{\beta}) = \beta_{\lfloor Br \rfloor} K_\text{c}(Br \mod 1)

最後に,カーネル  \mathbf{K}_\boldsymbol{\beta} として次のように正規化します:


\mathbf{K}_\boldsymbol{\beta}(\boldsymbol{n}) \triangleq \dfrac{K_\text{s}(\|\boldsymbol{n}\|_2; \boldsymbol{\beta})}{|K_\text{s}|}, \quad \boldsymbol{n} \in \mathcal{N}

ここで, |K_\text{s}| |K_\text{s}| = \displaystyle\sum_{\boldsymbol{n} \in \mathcal{N}} K_\text{s}(\|\boldsymbol{n}\|_2; \boldsymbol{\beta}) \Delta \boldsymbol{x}^2 を表しています.

まとめると,カーネル  \mathbf{K}_\boldsymbol{\beta} は次のように定義されます:


\begin{array}{llll}
\mathbf{K}_\boldsymbol{\beta}: & \mathcal{N} & \longrightarrow & \mathcal{S}\\
 & \boldsymbol{n} & \longmapsto & \mathbf{K}_\boldsymbol{\beta}(\boldsymbol{n}) \triangleq \dfrac{K_\text{s}(\|\boldsymbol{n}\|_2; \boldsymbol{\beta})}{|K_\text{s}|}
\end{array}

ポテンシャル分布

カーネル  \mathbf{K}_\boldsymbol{\beta}:\ \mathcal{N} \longrightarrow \mathcal{S} と,時刻  t \in \mathcal{T} における点  \boldsymbol{x} \in \mathcal{L} の状態  \mathbf{A}^t(\boldsymbol{x}) とで畳み込み  \mathbf{K}_\boldsymbol{\beta} * \mathbf{A}^t(\boldsymbol{x}) を行うことで,ポテンシャル分布   \mathbf{U}^t が得られます:


\begin{align}
\mathbf{U}^t(\boldsymbol{x}) &= \mathbf{K}_\boldsymbol{\beta} * \mathbf{A}^t(\boldsymbol{x})\\
 &\triangleq \sum_{\boldsymbol{n} \in \mathcal{N}} \mathbf{K}_\boldsymbol{\beta}(\boldsymbol{n}) \mathbf{A}^t (\boldsymbol{x} + \boldsymbol{n}) \Delta \boldsymbol{x}^2
\end{align}

成長分布

成長分布を考える前に,成長関数  G: \ [0,1] \longrightarrow [-1, 1] について考えます.
成長関数  G G(\mu)=1 を満たす,パラメータ  \mu,\ \sigma \in \mathbb{R}(成長中心,成長幅)を持つ単峰性非単調関数がよく用いられています:


G(u; \mu, \sigma) = \left\{
\begin{array}{ll}
2e^{-\frac{(u-\mu)}{2\sigma^2}}-1 & \text{指数関数}\\
2 \mathbb{I}_{[\mu \pm 3\sigma]}(u) \left(1 - \dfrac{(u-\mu)^2}{9\sigma^2}\right)^\alpha - 1 & \text{多項式関数,} \alpha=4\\
2 \mathbb{I}_{[\mu \pm \sigma]}(u) - 1 & \text{矩形}\\
\dots & \text{or others}
\end{array}
\right.

先程定義したポテンシャル分布  \mathbf{U}^t を成長関数  G:\ [0,1] \longrightarrow [-1,1] に与えることで,成長分布  \mathbf{G}^t が得られます:


\mathbf{G}^t(\boldsymbol{x}) = G(\mathbf{U}^t(\boldsymbol{x}))

状態更新

定義した局所規則から状態更新の式を考えると,


\begin{align}
\mathbf{A}^{t + \Delta t}(\boldsymbol{x}) &= \Phi(\mathbf{A}^t)(\boldsymbol{x})\\
 &= \phi(\mathbf{A}^t(\mathcal{N}_\boldsymbol{x}))\\
 &= [\mathbf{A}^t(\boldsymbol{x}) + \Delta t \ \mathbf{G}^t(\boldsymbol{x})]^1_0
\end{align}

となるため,


\mathbf{A}^{t + \Delta t}(\boldsymbol{x}) = [\mathbf{A}^t(\boldsymbol{x}) + \Delta t \ \mathbf{G}^t(\boldsymbol{x})]^1_0

と表すことができます.
ここで, [\cdot]^b_a は clip 関数で,


[\cdot]^b_a \triangleq \min\{\max\{\cdot, a\}, b\}

と定義されます.

おわりに

Lenia-0 の数学的な定義を述べました.
次の記事の内容は未定です.