Fungera: A two-dimensional evolution simulator
Main memory block
Child memory block (optional)
Instruction pointer
Delta (direction)
4 general purpose registers
A stack of 8 values
Symbol
Max ops
Description
Type
.
0
Template constructor
Template
:
0
Template constructor
Template
a
0
Register modifier
Register
b
0
Register modifier
Register
c
0
Register modifier
Register
d
0
Register modifier
Register
^
0
Direction modifier (up)
Direction
v
0
Direction modifier (down)
Direction
>
0
Direction modifier (right)
Direction
<
0
Direction modifier (left)
Direction
x
0
Operation modifier
Operation
y
0
Operation modifier
Operation
&
2+
Find template, put its address in register
Matching
?
4
If not zero
Conditional
0
1
Put [0, 0] vector into the register
Arithmetic
1
1
Put [1, 1] vector into the register
Arithmetic
-
2
Decrement value in register
Arithmetic
+
2
Increment value in register
Arithmetic
~
3
Subtract registers and store result in register
Arithmetic
W
2
Write instruction from register to address
Replication
L
2
Load instruction from address to register
Replication
@
2
Allocate child memory of size
Replication
$
0
Split child organism
Replication
S
1
Push value from register into the stack
Stack
P
1
Pop value of register into the stack
Stack
Python 3.7 is required to run Fungera. Once it is installed, running Fungera is simple.
python -m pip install -r requirements.txt
python fungera.py --name "Simulation 1"
Key
Action
space
Start/pause simulation
c
Advance 1 cycle (only if paused)
↑
Move memory view up
↓
Move memory view down
←
Move memory view left
→
Move memory view right
d
Select next organism
a
Select previous organism
p
Save simulation
l
Load last saved simulation
m
Toogle minimal mode