(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
Antinstances and assing them theirdirective. TheAnthas it's own state, separate from the world, which can be used in union with the world state to cleanly express how theAntshould modify the world. - Create a
Grid. This is your world. Add any number ofAntactors to the grid. TicktheGrid. This will iterate over eachAnttracked byGridand perform it's directive. ATickis by default a syncronous atomic operation, allowing the dependent application to update and analyze the world state at it's own pace.- After the
Tickis 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
Antseparately 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.
