(Project is not abandoned. I am focused on graduating.)
Libant makes it easier to prototype, discover, and experiment with different kinds of cellular automata that would otherwise be difficult or tedious to express in the classical way.
The typical way to express any CA is to:
- Allocate space for your world
- Scan over every discrete location in that world
- Based on the state of the world at one or more locations, update the some other location in the world
There are a number of issues with this approach:
- Depending on the available technology, one may be limited to a bounded world without considerable effort
- This method is conducive to a high spatial complexity
- A lot of boilerplate is involved
- Conceptually simple alterations to an existing automaton may be very difficult to express
- And much more!
Libant is built around the core concept of specialized actions which we call Ants.
- Create one or many
Ant
instances and assing them theirdirective
. TheAnt
has it's own state, separate from the world, which can be used in union with the world state to cleanly express how theAnt
should modify the world. - Create a
Grid
. This is your world. Add any number ofAnt
actors to the grid. Tick
theGrid
. This will iterate over eachAnt
tracked byGrid
and perform it's directive. ATick
is by default a syncronous atomic operation, allowing the dependent application to update and analyze the world state at it's own pace.- After the
Tick
is finished, common information about the immediate and cumulative state of the world is readily available for analysis or presentation.
Wonderful because:
- Generalized built-in data structures optimized for discrete spatial information make it easy to track state in an unbounded world
- The actor focus encourages processing only on the important state information
- A minimal amount of boilerplate is involved
- Tracking the state of the
Ant
separately from the world makes simple rule modifications very simple - The library is cheaper than a Mathematica license (free as in beer)
I'll use this money to buy expensive coffee and gifts for my wife. This may indirectly improve code quality.