
Newer Posts | Older Posts |
Me
March 17th 2023 @ 1:00am
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:00amI 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:00amLet 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:00amMy 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:00amSummary: 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:00amHere 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 |