first iteration
This commit is contained in:
commit
91b72359cc
68
README.md
Normal file
68
README.md
Normal file
@ -0,0 +1,68 @@
|
||||
# AIrium 2
|
||||
|
||||
Each creature is represented as a matrix of blocks in a 2D grid world
|
||||
|
||||
There are three kinds of blocks:
|
||||
- neuron blocks
|
||||
- action blocks
|
||||
- sensor blocks
|
||||
|
||||
all signals exchanged by blocks are floating point numbers
|
||||
|
||||
TODO: energy system
|
||||
|
||||
### Neuron Blocks
|
||||
|
||||
They act as connectors, they have a __data direction__ attribute which tells in which direction their output flows
|
||||
|
||||
They can be represented as arrows
|
||||
|
||||
### Action blocks
|
||||
|
||||
They take an input signal and act by doing something, for example:
|
||||
|
||||
- they move the body in space
|
||||
- they eject something
|
||||
- they change color
|
||||
- they read the next block
|
||||
- they write the next block
|
||||
- they "eat" a block
|
||||
|
||||
### Sensor blocks
|
||||
|
||||
They give adiacent blocks a signal, for example:
|
||||
|
||||
- they communicate how far is the first block in a straight line
|
||||
- they communicate the amount of blocks in relation to blank spaces in an area
|
||||
- they communicate the color/type/activity of the first block in a straight line
|
||||
- they communicate information about the presence of a particular kind of block in a direction
|
||||
- they communicate information about the creature itself, like integrity of adiacent blocks
|
||||
|
||||
### Traversing the brain graph
|
||||
|
||||
In this system, the body is the brain. It can be represented either as a __graph__ of arrows (neuron blocks) and nodes (action/sensor blocks) or as a __matrix__ of block instances.
|
||||
|
||||
Graph traversing pseudocode:
|
||||
|
||||
stack = []
|
||||
|
||||
getOutput = function (avoidLoops) :
|
||||
if avoidLoops: return lastIterationCache
|
||||
if currentIterationCache: return currentIterationCache
|
||||
stack.add(thisBlock)
|
||||
outputs = []
|
||||
for each input block in this block:
|
||||
thatBlock = the current input block we're checking
|
||||
output.add(thatBlock.getOutput(amIInTheStack)) // passes avoidLoops as true to avoid cyclic structures
|
||||
res = // use the outputs to figure out what to return
|
||||
lastIterationCache = currentIterationCache
|
||||
currentIterationCache = res
|
||||
return res
|
||||
|
||||
clearStacks()
|
||||
// Clean up iteration
|
||||
fixIterationCacheOfAllBlocks()
|
||||
|
||||
for each output block in the body:
|
||||
actionBlock.apply(actionBlock.getOutput())
|
||||
|
Loading…
Reference in New Issue
Block a user