Arti?cial evolution for self-replicating computer codes has been introduced for the ?rst time in 1990, when Steen Rasmussen created CoreWorld. CoreWorld is a virtual machine which can be controlled by a language called RedCode. This assembler-like language has a pool of ten di?erent instructions that take two addresses as arguments. Rasmussen’s idea was to introduce a random ?aw of the MOV command, resulting of random mutations of the self-replicating codes within the environment. The big disadvantage of RedCode was, that nearly all ?aws led to a lethal mutation, hence evolution did not occure as wished.
In 1992, Tom Ray found out that the problem with RedCode was due to argumented instruction set: Independent mutations in the instruction and its arguments are unlikely to lead to a meaningful combination. Instead of direct connection between the instruction and its argument, Ray developed a pattern-based addressing mechanism: He introduced two NOP-instructions (NOP0 and NOP1). These instructions do not operate themselve, but can be used as marker within the code. A pattern-matching algorithmus would ?nd the ?rst appearence of a complementary marker string given (after the search-command), and returns its addresse.PUSH AX ; push ax JMP NOP0 NOP1 NOP0 ; jmp marker101 INC A ; inc ax NOP1 NOP0 NOP1 ; marker101: POP CX ; pop cx
There are 32 instructions available in the virtual Tierra world, roughly based on assembler (JMP, PUSH AX, INC B and so on). With these inventions, Ray was able to gain great results for arti?cial evolution (like parasitism, multi-cellularity, …).
In 1994, Christoph Adami has developed another arti?cial evolution simulation, called Avida. Beside of some di?erent structures of the simulation, an important change has been made in the arti?cial chemistry: Instead of hardcoded arguments within the instructions (as in Tierra for example PUSH AX), instructions and arguments are completely separated. The arguments are de?ned by NOPs (in avida there are three NOPs: nop-A, nop-B, nop-C) following the operation (for example, a nop-A following a PUSH pushes the AX-register to the stack). There are 24 instructions available in avida, again roughtly based on assembler (call, return, add, sub, allocate and so on).push nop-A ; push ax jump-f nop-A nop-B nop-B ; jmp markerBCC inc nop-A ; inc ax nop-B nop-C nop-C ; markerBCC: pop nop-B ; pop bx
With that improvements of the virtual simulation, the researchers using avida found out amazing results, among other things about the origin of complex features in organism .
Very interesting paper on creating a evolutionary system for native x86 systems. This is an area that has fascinated me since I first studied genetic algorithms. However I didn’t realize that this was being done for native x86 instruction sets as well, I always assumed that the environment was a virtual one.