Skip to content

theoden8/emu-automaton

Repository files navigation

Author

Created by Kirill Rodriguez on 07/2018.

About

The purpose of this project is to animate automata in order to provide intuition for understanding complexity, and is to evolve into a more efficient framework for investigating algorithms and topologies in the languages of various automata.

Demonstration

This is a random Day and night simulation:

day_and_night

Tools

  • c++20, clang++
  • opengl 3/4, libepoxy, glfw
  • Nuklear

Special features

  • GPU-powered updates
  • Ising model
  • Multi-state automata

Implementation

  • Renderer
    • GLSL compute shaders (only B/S/C automata, when compute shaders are supported)
    • OpenMP-powered updates on CPU otherwise
  • Storage mode
    • Textures (B/S/C automata)
    • CPU memory
      • Single buffer on CPU for automata where individual cells are updated (e.g. Ising model)
      • Double-buffer on CPU for update-all cellular automata
      • Extra buffer for case when buffer is larger than screen (for averaging)
  • Access mode
    • Bounded
    • Toroid (looped)
  • Topology
    • Grid

Compiling

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++
cd ..
make -C build
# running
./build/automaton

Potential roadmap

  • Loading specific patterns
  • More kinds of initializations
  • Triangular/Hexagonal topologies
  • More kinds of rules
  • More stochastic automata
  • Continuous automata
  • Training a model to learn evolution of a stable CA

References