Author Topic: Multibot Manifesto  (Read 3024 times)

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Multibot Manifesto
« on: November 22, 2006, 02:27:41 AM »
The evolution prize got me thinking about my personal goal for Darwinbots, emergence of proper multibots in Darwinbots.  This is what I want to start working on in Darwinbots to mark the end of my programming sabatical.

There are 13 areas I think Darwinbots needs to be expanded in order to allow for naturally arising multibots that are more than algae carpets.  Before I get the these, though, I'd like to list the multibot "archetypes".  Each of these forms needs to be well supported in the system IMO.  More importantly, these forms need to be fairly evolutionarily stable for some given environment.  That means my ant bot shouldn't "devolve" into a bunch of solitary cannibots.
  • Ant colony - A single reproductive "parent" that is cared for by sterile children.  Only the parent reproduces.
  • Squid Bot - A simple multibot that moves by using fluid dynamics and "jet" propulsion.  This is primarily a test of the physics engine.
  • Slime Mold - A sort of long distance multibot.  A colony of organisms that can coordinate large scale actions across large distances.  Like how a slime mold coallesces into a "slug" from millions of free living individuals.
  • Worm bot - Any multicellular creature that has a clear morphology.  A large colony of plants that tie to everything doesn't count.  The simplest way to imagine this is a 2 bot multibot that produces babies that grow into 2 bot multibots.
Below are the 13 features.  None of these are really new, the idea is that I'm listing specific features that I'd like to implement before all others, and simplifying a number of them into "first iterations" that can be expanded later as desired.

1.  Codules - Codules are excellent at allowing for iterative development (in theory anyway).

2.  3D - Although probably not strictly required, if the bots lived in true 3D, it would increase the number of dimensions the bots need to worry about.  Ideally this would mean that sneak attacks and evasion are more practical.

Most sysvars can be easily expanded with a 3rd dimension.  Eyes are the only real conceptual issue.  I was imagining projecting the existing eyes into 9 squished pyramids, and adding another set that runs perpindicular.

The only difficulty as I see it is visualization.  But I've played around with OpenGL and I don't think it should be that hard.

3.  Membranes - Tied into the implementation of 3D.  Membranes would provide the surface area that fluid dynamics would act against, relieving ties of this conceptual burden (allowing them to strictly be joint connectors), and allowing the concept to work equally well in 3D and 2D.  The membrane follows the countours of the bots that make it up.  I'm still working on the details.

4.  Pheremones - Signals that bots leave on the environment.  Bots can "ping" their environment for a certain signal, and receive both a magnitude (how strong the signal is) and a gradient (in which direction is the signal increases the strongest).  Pheremones can be either "sticky" (they don't diffuse very quickly) or diffuse (spreads quickly).  Would allow for modelling of chemical communication, or "smell".  For instance, if every bot pumps out a constant pheremone strength every cycle, "grouping" behavior like that seen in locusts and slime molds is easy enough to implement.  Another example, ant bots could leave pheremone trails for navigation ("sticky" of course), allowing us to get rid of the xpos/ypos pair.

5.  Specialization - In the past I've probably overdesigned this, which has led to "programmer's block".  The idea here is to build something simple that will obviously encourage specialization.  Basically there are "roles" that bots can have.  These would be:
  • plant - can spin light into gold (or nrg anyway), allows the building of chloroplasts
  • animal - can build muscle
  • vision - can see
  • movement - can us .up, .dn. and any turning commands
  • shooter - can fire shots
     
  • tie feeder - can use non hard ties to feed
     
  • tie communicator - can use hardened ties to communicate
  • constructor - can build substances (shell, slime, body, etc.)
  • digestor - can digest substances (see metabolism)
  • some other roles I haven't thought about yet.
Turnging on roles costs nrg, but turning roles off does not.  The more roles a bot has, the more nrg it has to pay every time it uses the associated skills or as an upkeep every cycle.  I'm still working on the specifics.  There's a quadratically better efficiency as you have fewer and fewer roles.  That is, 10 specialized bots are going to use less nrg than 1 generalized bot.  Very simple.  Should allow people to expand in the future if necessary, while providing for a concrete implementation in the here and now.
 
6.  Sexual reproduction - Pretty obvious that this is necessary.  I'll implement the method I've been pushing (crossing over across "zipped" up regions).  I'll also try to implement some form of diploidity, by crossing over the DNA when the two DNAs come into the same bot, and setting one of the resulting DNA strands as "dominant", meaning it runs all the time.

7.  Desctructable shapes - Shapes that are destructable.  A shape is hit by a -6 shot gets a small chuck taken out, and returns a shot made up of a substance I'll arbitrarily name "Hard".  When a "Hard" shot hits a bot, the bot "ingests" some Hard, and increases in mass and volume.  Bots can defecate Hard like they can waste.  When a Hard shot runs out of nrg, it turns back into a small chunk of a shape.

Hard could also be tied into substances.  Probably you could use hard to make shell.  When your shell starts breaking down during a fight, you'd leave little drifting pieces of Hard (drifting miniscule shapes).

Realistically, Hard should stick to other Hard to prevent the complete breakdown of all shapes.  If two chunks of a shape drift into each other, they'd fuse.  There are a few other details to work out, but I think the idea is solid.  Could be computationally expensive unless some collision complexity reduction algorithms are used.

Primarily the reason for this is to create 1) Ant nests and 2) ant lions.  If a bot can hide in a small hole it's made, it can attack a bot that can't see it until it's too late.  A heavily shelled bot might also be hard to distinguish from a floating shape.

8.  Realistic physics, esp. for ties and membranes.  If done right, a bot should be able to build a large tower made up of other tied bots that's relatively stable.  Like a tree.  This is where integrating a 3rd party physics library is important.

Membranes should allow the creation of squid bots, wings, parachutes, and other structures.

9.  Tie communication - Bots need to be able to manipulate data across multiple ties in a single cycle.  The primary purpose of this is to allow for "brain cells" that can communicate between themselves and other "cells" efficiently.

10.  Phylogenic tree with event finder - If you store all simulation data (total nrg, average nrg, number of individuals, etc.) and compare it with a phylogenic tree, the program should be able to isolate significant evolutionary jumps.

This is important for understanding the primary order of new phenotypes that develop.

11.  Body divided into fat, chloroplasts (or maybe cellulose?), and muscle.  I've mentioned this recently.

12.  Metabolism.  Like Pheremones, I think I overthought this and built up a system that was fundamentally more complex than needed.  This is my attempt at an attainable simplification:
  • Bots primarily battle to attempt to kill each other with -1 shots.  When a bot is killed, it becomes a corpse and is available for consumption.
  • Corpses are composed of either chloroplasts, muscle, fat, or waste (venom and poison become waste).
      Body shots return a homogenic "bite" out of the corpse (they can still be used on living bots.  The effect is the same).
  • Body shots return a shot composed of protochloroplasts, protomuscle, protofat, and waste.  Proto substances need to be digested into their core components (primarily nrg at the moment, but in the future we could have them decompose into more substances).  Anything the bot can't digest, along with waste, needs to be expelled as waste.  Proto substances are worthless otherwise except as ballast (they do have mass and volume)
  • When a bot digests a substance, it has an attrition rate.  The attrition rate is the amount of the digestion that creates waste instead of nrg or whatever else.
  • The more specialized a bot is between Protochloroplasts, Protomuscle, and Protofat digestion, the lower its attrition rate.  This is non linear (meaning the more specialized you are the increasingly more efficient you are).
The idea for this is that we should be able to create stable ecosystems of at least 3 species (one plant, one herbivore, one carnivore), possibly greater.  Evolution won't break it.  Also, multibots will have an advantage in that different "cells" can digest different compounds, allowing them to specialize while still being part of the same organism.

Specialization of digestion might be Lamarckian in nature.  That is, entirely automatic as the bot feeds.  You'll become more efficient as you gain more nrg from a particular source.  Eat more muscle, and you'll automatically become better at digesting muscle.

13.  Tie controls. - Highly dependant on how ties actually end up working, but bots need a way to control the physics of multiple ties (and membranes) in a single cycle.
 ------------------------------------------------------------------------------------------------------------

I'll also probably try to bring some of the changes I made in the C++ source into the VB source.  At the moment, I'm also playing with the idea of moving everything into C#.  The primary thing that caused me problems in C++ was GUI maintenance.

VB into C# should be a fairly straight port.

Please leave thoughts/rants.

Offline Jez

  • Bot Overlord
  • ****
  • Posts: 788
    • View Profile
Multibot Manifesto
« Reply #1 on: November 22, 2006, 08:01:02 AM »
Sounds well thought out, I'm not even going to pick at anything you have put in there, my only worry was about the 'hard' variables but I've thought it over and I think that is probably a sensible way to do it.

DB winning something like the evolution prize would be 'uber' cool and something I'd love to see.

Welcome back from your sabbatical!  
If you try and take a cat apart to see how it works, the first thing you have in your hands is a non-working cat.
Douglas Adams

Offline PurpleYouko

  • Bot God
  • *****
  • Posts: 2556
    • View Profile
Multibot Manifesto
« Reply #2 on: November 22, 2006, 08:43:13 AM »
Well we already have working ant colonies and worm bots that meet the criteria.

Squids and slimes haven't been tried yet to my knowledge.
There are 10 kinds of people in the world
Those who understand binary.
and those who don't

:D PY :D

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Multibot Manifesto
« Reply #3 on: November 22, 2006, 02:25:09 PM »
But worm bots inevitably break in any long term evolution simulation, which is what I really want to fix.  Singleton bots are really at a huge advantage, at the moment.  Multibots exist, but they're very artificial constructs.  They don't tend to last very long at all.

If we could get a worm bot or an ant species to be stable across millions of cycles, that would be huge.  We know ants have been around for practically forever in real life, there must be something special in their organization that represents a very real and stable advantage.  I think it's probably extreme specialization.

If a queen is only phyiscally capable of reproduction, and the workers have to feed it, and the nrg costs of moving back and forth from a "nest" are negated, that would be huge.
------------------------
In case you couldn't tell, I was pretty hyped up on caffeine last night.  I'll be willing to discuss any of the above in greatfer length if people have any suggestions or just want to understand what the heck I'm talking about.  In the end, though, I'll probably implement some things in a way that not everyone appreciates, especially with things like sexual reproduction.  Concensus has been very allusive on some things, so I'm just going to bite the bullet and do things in the way that makes the most sense to me.
« Last Edit: November 22, 2006, 02:30:29 PM by Numsgil »