organicomplex 0.7.0

Interactive complex-valued cellular automaton on 2D and 3D grids in search of that stuff - emergence, open-endedness, organicity etc.
# OrganiComplex

Interactive complex-valued cellular automaton on 2D and 3D grids in search of that stuff — emergence, open-endedness, organicity etc. Uses [SDL2](https://www.libsdl.org/).

Accompanies the "paper" (rather draft) with videos called [“OrganiComplex: probes into complex-valued cellular automata with topologically universal update rules using certain reflections”](https://sunkware.org/organicomplex/index.html), where there is more thorough consideration of structures that appear in one such automaton and their dependence on its parameters.

## Look

![demo poster](https://sunkware.org/organicomplex/img/organicomplex_look.png)

## Deployment

Get source, build, and copy the binary into the unpacked root dir taken from the paper above (link below Abstract). Run the binary.

`ESC` brings main menu, where `Help` lists controls.

## Recipe

Basically, you take cellular automaton (CA) from [J.H. Conway's "Game of Life"](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) and

**1)** change set of states of each cell from $\{0, 1\}$ to complex plane ℂ,

**2)** modify update rule to take complexification into account, using non-linear mappings, conjugation etc., and some normalisation so that states remain bounded in some zero-centered, e.g. unit, disk and do not diverge to $\infty$,

**3)** and slightly adjust neighbourhood to include not only adjacent neighbours, but their neighbours as well, then maybe theirs and so on. 

Voilà, — *complex-valued* CA (ℂCA). And if the combination of 1-2-3 choices is "right", you will observe some "interesting" behaviour... otherwise, you will not observe it... well, hasn't this statement been a tautology all along, since we *define* "right" as "leading to interesting behaviour", right?

## FilamentiComplex

In OrganiComplex, the default 1-2-3 combination — and the automaton it specifies — develops certain filamentiferous (hypha-, worm-, snake-like) structures, somewhat organic in their behaviour, so we call this automaton as the title of this section reads (also, FℂCA):

$$s_j' = M \bigl( 1 - \min \{ 1, |S_j'| \} \bigr) S_j'$$

$$S_j' = s_j + \overline{\sum\limits_{k \in \mathcal{N}(j)} s_k^2 } + \zeta$$

where

• $s_j$ and $s_j'$ are current and next state of $j$-th cell, respectively,

• $\overline{z}$, as usual, denotes complex conjugation of $z$, $\overline{a + bi} = a - bi$,

• $\mathcal{N}(j)$ is the $5 \times 5$ neighbourhood of $j$-th cell with this cell at its centre,

• $\zeta$ is a random isotropic "noise" with modulus bounded by $R$ (or absent, $R = 0$),

• $M > 0$ is the scaling multiplier with $M = 0.53 \pm 0.02$ being "optimal".

Indeed, there should be other combinations ensuring "organicity", even better at it than FℂCA... for you to find.

## Non-QM/ANN-ness

The majority of researches in this area deals with ℂCA based either on Quantum Mechanics (QM) or on Artificial Neural Networks (ANN); there is an entire field called ["Quantum Cellular Automata"](https://en.wikipedia.org/wiki/Quantum_cellular_automaton) (QCA), rich in authors, papers, and books.

The default update rule in OrganiComplex (that is, FilamentiComplex) is *not* QM- or ANN-based, at least to our knowledge, explicitly... in fact, there is no nature-grounded motivation for this particular kind of rules, beside their computational speed and "organic-like" behaviour they provide... for some reason.

You are welcome to switch back to QM and/or ANN. See also References in the "paper".

## Customisation

See `Field::update()` in `src/play/automaton/field.rs`. There are some commented alternatives to FℂCA already.

For instance, change `nextamph += neigh_cell.amphunc` to `nextamph -= neigh_cell.amphunc`.

## Optimisation warning

Build with **release** profile, because with debug one it works much (20+ times) slower.

## Cf.

[github.com/Chakazul/Lenia](https://github.com/Chakazul/Lenia)

[github.com/GollyGang/ready](https://github.com/GollyGang/ready)

[github.com/MicahBrun/Continuous-Complex-Valued-Cellular-Automata](https://github.com/MicahBrun/Continuous-Complex-Valued-Cellular-Automata)

[github.com/mochiFnana/cellular-automata-with-julia](https://github.com/mochiFnana/cellular-automata-with-julia)