Skip to content

Project overview

flatline edited this page May 19, 2022 · 86 revisions

High-level overview

irma4 is a 2D simulator of virtual particles, which was created to produce Artificial Life forms. Due to the fact, that our universe is very complex and requires an enormous amount of computational resources, the creation of a more or less realistic virtual world (and later, virtual life) is an almost impossible task today. So we as scientists and developers are trying to find the most similar and also simple model, which is computable for modern PCs. irma4 is a mix of Artificial Chemistry, two-dimensional programming language and simple particle physics. It's an experiment with unpredictable results. Also, there is an idea of Open-Ended Evolution, which refers to the unbounded increase in complexity that seems to characterize evolution on multiple scales. The system starts from very simple elements and their interactions and increases its complexity almost infinitely. This is actually how life variety appears. We hope, that such a process will partially appear in our system as well. This is actually fourth (first, second, third) attempt to create such simulator, so we have some experience in the area. The general idea is very similar to real-world, but with many restrictions: there is a 2D world of atoms (colored pixels). They may join together to create molecules and simple organisms. There are few interactions and atoms types, which give all the variety of forms in this virtual world. To run such interactions (we also call them "run atoms") we use special Virtual Machines.

Atoms

They are minimal entities in a 2D world and are represented by colored pixels. There are also black pixels, which mean literally nothing. It's possible to bind them together to obtain molecules. There are five types of them: 1 - move, 2 - fix, 3 - split, 4 - if and 5 - job. You may think about atoms as operators of a very simple language, which have their individual behaviors. In our world we also call them atoms, which have fundamental interactions. They work in real-time without delays for all particles in a universe. So, in some sense, there is an engine, which runs these interactions. In our application, we call it Atomic Virtual Machine or simply VM. It does the same thing - runs atoms (their interactions). Let's describe these five types in detail: 1 - means move current and all linked atoms using specific direction (linked atoms constructs a Molecules), 2 - means join (with energy consumption) or split (3) (producing energy) nearest atoms, 4 - means switch direction of VM running to specified (top, right, down,...) atom according to condition and 5 - means create a new instance of VM to start a new thread. These four types are the basis for all physics and matter in a world. Every molecule, cell or organism may be created using them. As a first approximation, it looks very similar to the image below. The big difference is in a form of organisms. They more like simple cells and consist of many atoms and molecules linked together.

2D world

image 1 - a 2D world full of atoms

Molecules

Two or more atoms may be joined together to construct a molecule. Visually it looks like a small bitmap of pixels on a screen. A typical molecule may look like the image below:

molecule

image 2 - Simple circle molecule

The image above represents a molecule, which is consists of few atoms. White squires represent atoms and digits inside them - are atom types. Arrows are bonds, which keep the shape of the molecule in 2D space. In addition, every bond is a link to the next atom, which may be run next under VM. One atom may have 0 or 2 bonds with its siblings. You may think about a molecule like a small program, where VM runs atoms one by one in a direction created by bonds. Atoms, represented on the image (1, 2, 3, 4, ...) may be translated as small program: move -> fix -> if -> job -> ..., ignoring the fact, that their positions in a space are important. Why do bonds important? Because they affect moving. If one of the atoms has 1 or move type, it means that all other linked atoms will also be moved together.

Atomic Virtual Machines

Virtual Machine is the heart of the system. It "run atoms" under the hood. This term means do the interactions of the atoms with some delay. Let's take image 2 as an example. VM starts from atom 1 in the top and moves right (because there are no other bonds for the current atom) to 2 and after that to right-down to 3 and so on one by one until it back to the first atom again. Note, that represented molecule is a simple infinite loop. VM runs the current atom depending on its type. For type 1 VM moves the entire molecule to one of 8 available directions (direction is embedded into the atom). For type 2, VM tries to split nearest atoms to obtain energy. All other atoms will be run in same specific way.

One such VM serves one thread. We use green and not system threads to achieve parallelism. One molecule, cell or organism may use many VMs (threads) inside to maintain its life. "Run atom" means run a command, associated with it.

Energy

Energy is an important part of any living organism. It is stored inside VM. Every time, when some atom splits its siblings the VM obtained peace of energy. It may be used for running other atoms in the current thread. On the other hand, a "join" atom may glue two nearest atoms together and consume a peace of energy.

System start

When we start the system, it consists of a huge amount of atoms, a rectangular 2D world, and some VMs.

Clone this wiki locally