added a lot of stuff and formatting
This commit is contained in:
parent
8dc7b16b75
commit
ef5e7b6650
112
README.md
112
README.md
@ -1,48 +1,71 @@
|
||||
# AIrium 2
|
||||
# newAIrium description paper
|
||||
|
||||
AIrium is an artificial life simulation environment. The second iteration of the project
|
||||
focuses on solving the problems of the first:
|
||||
AIrium is an effort to create a working, complex artificial life simulation environment.
|
||||
|
||||
### Description
|
||||
|
||||
This new iteration of the project focuses on solving the problems of the first:
|
||||
|
||||
- variety in creature body and mind structure
|
||||
- removing evolution limits (such as brain size)
|
||||
- allowing different species to mate and produce possibly stable children
|
||||
- speed: trying to get the simulation to be as fast as possible on consumer grade hardware
|
||||
- documentation: having an actual model to follow
|
||||
- concurrency: try to enable the maximum concurrency when simulating the world, to the point that multiple
|
||||
networked computers may collaborate and work together to simulate a world faster or help each other into
|
||||
achieving meaningful results faster.
|
||||
- java being used to write the implementation
|
||||
|
||||
#### Possible Applications
|
||||
|
||||
- studying evolution dynamics
|
||||
- discovering new approaches at common problems by looking at how the simulated machines solved them
|
||||
- learning how to create the environment necessary for a specific kind of evolution to take place
|
||||
- having fun designing such a world and implementing a simulator for it
|
||||
- having fun manually designing and creating structures
|
||||
- having fun looking at machines interacting with the world and each other
|
||||
- bragging about having designed and implemented such a simulation
|
||||
- figuring out wether it would actually work
|
||||
- distributing a creative alternative to a fish tank
|
||||
|
||||
### World
|
||||
|
||||
The world is a matrix where each cell is either empty or occupied by a structure.
|
||||
Every structure occupies only one cell.
|
||||
|
||||
### Creatures and other structures
|
||||
### Structures and Creatures
|
||||
|
||||
A structure is a matrix where each cell is either empty or occupied by a Block.
|
||||
Each adiacent Block can be connected.
|
||||
The blocks make up both the body and, if the blocks are connected, the mind.
|
||||
- a structure is a matrix where each cell is either empty or occupied by a Block.
|
||||
- each adiacent Block can be connected.
|
||||
- the blocks make up both the body and, if the blocks are connected, the mind.
|
||||
- structures can move in the world, but can't occupy the same space of another structure.
|
||||
|
||||
A structure with an operational mind governing the body is called a creature or machine.
|
||||
|
||||
There are four kinds of blocks:
|
||||
- neuron blocks
|
||||
- action blocks
|
||||
- sensor blocks
|
||||
- resource blocks
|
||||
|
||||
### Connection
|
||||
|
||||
- Each block can be connected to every other adiacent block (diagonals too), so each block has 8 connection weights.
|
||||
- A connection _is_ a weight, which is a floating point number.
|
||||
- A neuron block's output is its adiacent blocks's current stored signals multiplied by the appropriate weight.
|
||||
- If the connection is `0`, then there's no connection
|
||||
- if the connection is `not 0` then there is a connection
|
||||
- the highest `abs(val) where val is the connection/weight` is, the stronger the connection
|
||||
- the weight (or connection) is a floating point number between -1 and 1 included.
|
||||
- __neuron blocks__ make the calculations
|
||||
- __action blocks__ let a structure do something
|
||||
- __sensor blocks__ let a structure know something about itself or anything else
|
||||
- __resource blocks__ can be interacted with, causing some effects
|
||||
|
||||
### Signals
|
||||
|
||||
A signal is a floating point value. Each block stores a signal.
|
||||
- a signal is a floating point value. Each block stores a signal.
|
||||
- a signal is always between -1 and 1 included.
|
||||
|
||||
- new blocks contain the `0` signal (null signal).
|
||||
- blocks store a signal forever or until it is changed.
|
||||
### Connection
|
||||
|
||||
- Each block can be connected to every other adiacent block (diagonals too),
|
||||
so each block has 9 input connection weights: one for each neighbor and one for itself.
|
||||
- A connection _is_ a weight, which is a floating point number. All connections are _inputs_.
|
||||
- A neuron block's output is its adiacent blocks's current stored signals multiplied by the appropriate weight.
|
||||
- the weight (or connection) is a floating point number between -1 and 1 included.
|
||||
- If the connection is `0`, then there's no connection
|
||||
- if the connection is `not 0` then there is a connection
|
||||
- if the connection is `1` then there is a full positive connection, meaning the source value passes
|
||||
intact to the destination
|
||||
- if the connection is `-1` then the exact opposite of the input value passes to the destination
|
||||
- the highest `abs(val) where val is the connection/weight` is, the stronger the connection
|
||||
|
||||
A signal can be any floating point value between -1 and 1.
|
||||
|
||||
@ -51,7 +74,11 @@ A signal can be any floating point value between -1 and 1.
|
||||
|
||||
### Neuron (Processing) Blocks
|
||||
|
||||
Their signal is the sum of all the values provided by their input connections.
|
||||
- new neuron blocks contain the `0` signal (null signal).
|
||||
- neuron blocks store a signal until it is changed. The signal is calculated again at every iteration of the
|
||||
simulation
|
||||
- a neuron block's signal is the sum of all the incoming values, divided then by the sum of all the weights.
|
||||
- an incoming value is the signal coming from a connection multiplied by the connection weight.
|
||||
|
||||
### Action (Output) blocks
|
||||
|
||||
@ -85,10 +112,7 @@ They act as Sensor blocks and Action blocks at the same time.
|
||||
Examples:
|
||||
|
||||
- a "mouth" block that can communicate wether food is available to eat and can receive eat
|
||||
commands at the same time
|
||||
- a memory block, which has a connection that when activated enables writing the value from
|
||||
another connection in the block, then it just outputs its stored value.
|
||||
|
||||
commands at the same time
|
||||
|
||||
### Evaluating a machine's mind's iteration
|
||||
|
||||
@ -122,7 +146,7 @@ When the egg hatches, a structure is born. The structure is built using a combin
|
||||
|
||||
This requires some new blocks:
|
||||
|
||||
- the battery block
|
||||
- the battery block (first mentioned resource block)
|
||||
- the energy drain block
|
||||
- the generator block
|
||||
- the stomach block
|
||||
@ -131,13 +155,28 @@ This requires some new blocks:
|
||||
- the battery block stores energy and emits the current level to its connections
|
||||
- the generator block uses up a lot of energy, then gives back slightly more
|
||||
- the stomach block can be used to eat blocks from another structure. It then uses some energy to digest
|
||||
the blocks, providing it back with an extra amount after it's done.
|
||||
the blocks, providing it back with an extra amount after it's done.
|
||||
|
||||
#### Consumption
|
||||
|
||||
- each action block uses up a moderate amount of energy when activated
|
||||
- each sensor block uses up a small amount of energy when activated
|
||||
|
||||
## Fitness of a structure
|
||||
|
||||
The fitness is calculated by dividing the creature's total harvested energy by the creature's total consumed energy.
|
||||
|
||||
A creature with a fitness lower than or equal to 0 has all its batteries depleted. Then, it is
|
||||
either revived by being charged somehow, or it can't do anything and no mind activity can take place.
|
||||
|
||||
This method to calculate fitness has many problems:
|
||||
|
||||
- What if a creature donates energy to others of the same species? It gets counted as energy consumption,
|
||||
thus decreasing fitness
|
||||
- What is a creature couldn't harvest energy because the circumstances weren't favorable?
|
||||
|
||||
The conclusion is that this system is far too complex to consider fitness evaluation.
|
||||
|
||||
## Primordial world
|
||||
|
||||
The world should be composed of a variety of huge, small and anything in between energy farming or storage
|
||||
@ -163,11 +202,18 @@ even early in an implementation. We __don't__ want to lose good machines!
|
||||
## Interface
|
||||
|
||||
- navigate world
|
||||
- has a small _selected structure_ sidebar with additional information
|
||||
- lets the user create an empty structure (needs at least 1 block)
|
||||
- navigate structure
|
||||
- ability to save the structure to file
|
||||
- has a small _selected block_ sidebar with block informaton
|
||||
- lets the user clear cells or set a block to them
|
||||
- view block
|
||||
- provides all info about the block and maybe signal activity monitoring
|
||||
- lets the user view all connections and edit them
|
||||
- lets the user edit the block type, preserving the connections
|
||||
|
||||
controls to handle simulation speed and pausing.
|
||||
A sidebar has controls to handle simulation speed and pausing and other information such as:
|
||||
|
||||
- current CPU load.
|
||||
- available energy in the world and amount being generated
|
||||
- population information
|
||||
|
Loading…
Reference in New Issue
Block a user