Evolve 5.0 Blog
VOLVE    5.0

Newer Posts Older Posts

Me

March 17th 2023 @ 1:00am

Me, after finishing Evolve 5.0

Hello, this is a picture of me.

I am working on content for evolve. I am writting simple seed programs. I am assembling simple simulations to provide some content for helping users get started. All this content is on my github Evolve5Sims.

I am thinking about a cool simulation based on Pong, Soccer, or Hockey like universe. Two teams evolved from the same parent bounce a ball or puck around. Each time the ball reaches the a goal, it updates the score. Eventually one of the teams wins. That team breeds a child which it plays against. The other team dies off.

To Evovle5Sims, I just added the: evolving tank which is kinda cool. It needs refinement to actually work. But the essence of the idea is present in this tank.




In Praise of Xcode/Swift/Apple

March 9th 2023 @ 4:00am

I just want to publically compliment Apple that my development experience going from zero to this application was amazing. I knew no swift, Xcode or MacOS GUI programming when I started this application.

I had many frustrations, but the tools damn well worked. My Mac Mini M2 chip thingy was amazing. Everything just worked and I was productive. Swift was a wierd language, but overall the fact that you can interface to C nicely was much appreciated.

The GUI builder was outstanding if you avoided story boards and constraints. I stuck with simple things. The Apple documentation (online and offline) was superb. And all this Xcode is free! Thank you Apple.

Old school C programming support seemed awesome out of the box, I didn't have to mess with anything.

Publishing to the app store scared the shit out of me. I have been through hellish app review processes before. And it sucks. Back and forth between reviewer and yourself... is nerve wracking. My apple review process experience was awesome. They found legit crashes in my application! The website was clear and easy to use. The status updates made sense. The errors made sense and were fixable.




My workflow for running simulations

March 8th 2023 @ 3:00am

Let me explain how I run simulations, and use EvolveBatch as part my workflow. I am always experimenting and running simulations. But I want long term simulations to be cranking away at various simulation ideas that I want to experiment with.

On my mac mini I have a terminal window in which I simply run EvolveBatch with a 10 minute write interval. From this window I just run whatever long term simulation I want at the time. I will get a fresh dump of the simulation file written every 10 minutes. So whenever I wish to sample the universe, I just load the latest file in the GUI program.

You'll want to use the sf command line option, which stands for Simulate Forever.

I have raspberry pi's in which I can ssh into. I can read and write a shared NFS mounted directory on my macintosh. On the raspberry pi I can run evolvebatch in the same way.




Checkers, Chess, Tomb Raider: Part 2

March 7th 2023 @ 2:00am

My observations on getting the bullet object to work.... finally. It took many versions to get it to work. Some simulations simply did not evolve to use it. In some simulations, the rules caused unfair advantage to some creature causing mass die off. And this lead to a "dead" simulation in which nothing is reproducing anymore.

My new insight is not to give up. Tweaking of the rules and behavior is important to getting the next new "bullet" object to work correctly. The cool thing is evolution will explore the rule for you. A good rule or law of physics then should be one in which evolution utilizes the rule and doesn't exploit it unfairly.




Checkers, Chess, Tomb Raider

March 6th 2023 @ 1:00am

Summary: Grid based mechanics is pretty much explored by now, but it is still interesting because we are humans and geometry is a big deal.

The rules are given by two dimensional geometry and our human grasp of locality and symbols. On a grid game you basically move up to a thing and attack the thing. The player that attacks the most things wins.

Then came Chess, Othello, Sokoban. Everything was still two dimensional but the rules were richer. One feature of these complex rules are path finding problems.

Sokoban creates path finding challenges. The rules forces the player (evolving entity) to explore questions like: How can I get from A to B on this grid? How can I move things around?

Tomb Raider, most first person shooters actually, the grid domain jumped from 2d to 3d and a fresh set of geometric puzzles emerged. But they were just path finding puzzles converted from 2D to 3D. But that's pretty fun when you are an evolved chimpanzee used to flying thru the trees.

I added a new simulation 'first' to the git hub repo 'Evolve5Sims'. This is a simulation that has a bullet object which has actually evolved! Prior to this all my bullet attempts never got selected for. The creatures could shoot a bullet, but for some reason they never evolved to do so. Well, now they have with this example.

The examples in 'first' show a cool new sim I never saw before. It really uplifted me because it shows how the grid physics can be changed in a major way and see a whole new simulation behaviors.

The reason I started with Checkers and Chess is ultimately we are limited in how much coolness that can be packed onto a 2D grid. This space has been done to death before.

I think Evolve 5.0 adds the flexibility to roll your own rules in a limited way... then see evolution learn to exploit those rules. But, if the thing you wish to see is much more sophisticated than chess or tetris then it probbaly isn't something Evolve 5.0 can demonstrate.




EAT Mode 6,400

March 3rd 2023 @ 1:00am

Here is the DNA of a creature that has evolved for many generations. It is from a simulation I have been running for about a week. The comment includes all the strain setup values you need to replicate the environment.

; Strain 0: killer
; Protected Code Blocks: 0
; Protected Instructions: MAKE-BARRIER SPAWN 
; Instruction Modes: LM=1 EAM=6400 MSE=100 GE=100 GS=50 
;    ROM=1 SEM=768 
; MaxApply=10 MaxCB=40 StrandLen=4 
main:
{
      EAT  -65  MOUSE-POS  -39  EAT  GROW  EAT
      10  call  -100  -25  EAT  -57 
}

row1:
{
      ENERGY  4  /  R0!  -95  0  R0  MAKE-SPORE
      1  -1  0  100  MAKE-SPORE  HOTTEST  91  invert
      -76  >>  ?loop  NEIGHBORS  -18  1-  TRAP7
      SEND  *  -69  -62  -36  21  3  SMALLEST
      -79  ?exit  HOTTEST  -42  <>  dup  call
      TRAP4  -92 
}

row2:
{
     
}

row3:
{
      ?exit  2over  HAS-NEIGHBOR 
}

row4:
{
      ?NUMBER!  TRAP2  ROTATE  OPCODE!  -34  <<
      39  -80  72  -62  63  10  CSLEN  ?dup  R6++ 
}

row5:
{
      OPCODE!  34  POKE  --R2  GROW.CB  47  -52
      -66  -10  unpack2 
}

row6:
{
      34  SAY  POKE  abs 
}

row7:
{
      /mod  CBLEN  -36  -94  41  EAT  =  ifelse
      90  SMALLEST 
}

row8:
{
      1-  31  61  -47  -95  TEMPERATURE  ENERGY
      RND  min  ROTATE  OPCODE!  -34  --R2  MOUSE-POS
      -94  SEND-ENERGY  CSLEN  36  <<  OMOVE  R2
      HALT 
}

row9:
{
      -62  -85  -60 
}

row10:
{
      MIN_INT  15  19  call  19  call  13  call
      19  call  call  KEY-PRESS  call  CBLEN  RECV
      MAKE-SPORE  96  NUMBER  DIST  PEEK  /mod
      71  13  call  19  call  PEEK  OPCODE  -17
      -2  EAT  R0!  -17  -92  POKE  SEND  -36
      <>  2/  and  GROW  EAT  =  ifelse  R3!  -9
      >=  TRAP9  -23  CSLEN  80  GROW.CB  -101 
}

row11:
{
     
}

row12:
{
      not  HALT  <  POKE  -55  HALT  39  GPS  -34
      -27  R5!  EAT  1+  40  14  pop  R1++  call
      98  OPCODE  R0!  GPS 
}

row13:
{
      26  61  POPULATION  FARTHEST  OMOVE  EAT
      100  -21  -1  EAT  R5!  EAT  1+  -47 
}

row14:
{
      -63  R2++  /  2/  87  R6++  call  EAT  not
      MAX_INT  9  -10  R5  -41  -30  20  R7!  CB
      -23  -19  -9  OMOVE  2over  -80  -86  45
      35  18  R8  25  swap  R5  max  36  10 
}

row15:
{
      2pop 
}

row16:
{
      R0!  -8  38  15  44 
}

row17:
{
      MIN_INT  13  76  -22  -  R4!  over  -64
      14  -66  MOUSE-POS  -37  CBLEN  R6++  call
      EAT  EAT  36  -34  SAY  CBLEN  NUMBER  OPCODE
      R0!  11  -38  -87  DSLEN  99  55  EAT  GROW
      34  POPULATION.S  READ  94 
}

row18:
{
      -82  -17  -76  SIZE  -34  R3!  -59  66  -57
      R0!  5  3  R1  R2  nip  FARTHEST  24  -48
      8 
}

row19:
{
      EAT  GROW.CB  0=  EAT  52  BIGGEST  EAT
      -81  xor  -38  -90  FARTHEST  OMOVE  SHOUT
      EAT  EAT  20  POPULATION.S  2dup  EAT  1-
      EAT  -65  EAT 
}

row20:
{
      MIN_INT  R9++  42  -54  15  77  22  WRITE
      over  -67  PEEK  13  -36  80  OPCODE  -65
      MOUSE-POS  -39  --R8  CBLEN  BROADCAST  EAT
      32  34  SAY  CBLEN  NUMBER  96  -80  <>
      MOOD  -37  -90  51  EAT  GROW  33  POPULATION.S
      -55  -49  -85  R0!  READ  -94 
}

row21:
{
      62  TRAP6  -82  -37  ROTATE  OPCODE!  -13
      not  18  TRAP9  NEAREST  R1++ 
}

row22:
{
      -57  45  unpack2  97  >  MIN_INT  90  not
      R0!  -8  38 
}

row23:
{
      66  67  2swap 
}

row24:
{
     
}

row25:
{
      71  HALT  BROADCAST  nip  FARTHEST 
}

row26:
{
      -74  >>  ?loop  2over  nip  MAKE-SPORE  TEMPERATURE
      23  -76  MOUSE-POS  18  BROADCAST  KEY-PRESS 
}

row27:
{
      CBLEN 
}

row28:
{
     
}

row29:
{
      MIN_INT  15  77  22  WRITE  R4!  over  -67
      13  -65  MOUSE-POS  -39  CBLEN  R6++  ?exit
      -90  64  2swap  51  min  2+  34  SAY  CBLEN
      NUMBER  67  2swap  -11  15  R1  69  MOOD
      -37  -90  64  2swap  51  EAT  POPULATION.S
      -55  R0!  READ  -94 
}

row30:
{
      -42 
}

row31:
{
      67  59  33  -45 
}

row32:
{
      R6  -59  nip  FARTHEST  24  -74  54  -36 
}

row33:
{
      G0  29  59  MAKE-ORGANIC  -32  --R9  TRAP7
      invert  BROADCAST  22 
}

row34:
{
      27  pop  <> 
}

row35:
{
      27  -40  S0 
}

row36:
{
      *  S0!  -10  ifelse  -99  101  10  MOOD
      64  60  77  SMELL  -15  OPCODE  LOOK  unpack2
      9  R6  pack2  EAT  2*  33  EAT  63  or  -80
      HALT  NUMBER  22  SEND 
}

row37:
{
     
}

row38:
{
      max  36  pop  <> 
}


The comment is part of the SAVE feature. Only modes that are non-zero will be shown. This allows the strain to be re-create-able if you send this code to someone. The main mode I want to highlight is EAT MODE = 6,400. This means: terminate cell, take 1/3 of the cells energy and interrupt cell with trap 6.

This is a good example of hunting/evading behavior. The patterns NEAREST OMOVE and FARTHEST OMOVE are being used. Also HOTTEST and SIZE instructions are being used. I have seen this creature hunt down cells that are only 1 cell in size, because they know they can win. Bigger organisms they avoid.




Newer Posts Older Posts