Author Topic: Advanced Multibot Project  (Read 10563 times)

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #15 on: March 22, 2010, 09:54:18 PM »
Quote from: Tj3
Let's come up with cell types we know we'll need, so we know what to work on.
I think some important ones are

Body cells: Store nrg, transfer information
Brain cells: Process information, send instructions
Eye cells: "See." Send brain information on what's happening
Tentacle cells: Branches out. Kill enemies, tie to veggies.
Movement cells: Move the robot, by either swimming or just moving.(We could use tentacle cells for this too.)

If we need more, we can add them, but we should work on these main ones to start.

Sorry... I made some concept art to try and understand this better and it took a bit longer than it anticipated as you appear to have started coding but I've attached the art I made, my idea of the bot is, the central grey blob is a brain, surrounded by blue protectors which also are for storage, then a certain ammount of tentacles stretch out to get away from the body, the green blobs you see clinging to the tentacle base are plants (don't ask how they got there) anyways at the end of the base are a few yellow movement cells which can work dependently to move the entire organism or independently too mauneveur tentacles so the face an anemy. Then finally on the end there is a mish-mash of branching tentacles which can pick up veggies, shoot, send signals to other bots and see plus anything else they need to.

To reproduce (this wouldn't seem true looking at the picture but oh well, can't be perfect) a tentacle breaks of at the base near the brain, the end of the tentacle where the movment cells are attached becomes the brain and the movement cells multiply to make a body. Then somehow the tentacles order themselves so that they are like the parents.

By the way the art is kind of what I hope darwinbots 3 will look like (hope your listening Nums)  .

Quote from: Tj3
And the gene for processing it when it gets to its destination might look something like this.
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
*.multi 0 =
*.tin 0 !=
*.tin1 *.botid =
*.type [bottype] =
start
'action
stop

Also for this I belive doing something like this would be better:

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
start
*.multi 0 =
*.tin 0 !=
*.tin1 *.botid =
*.type [bottype] = and
'action
not
'send code to next bot
stop

I think you might need that to get signals past the first tentacle node...
« Last Edit: March 24, 2010, 03:36:00 PM by ashton15 »

Offline Houshalter

  • Bot Destroyer
  • ***
  • Posts: 312
    • View Profile
Advanced Multibot Project
« Reply #16 on: March 22, 2010, 10:24:10 PM »
Awesome, we already have concept art.   This brings up a whole new question: What will the bots structure be?

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #17 on: March 22, 2010, 10:26:49 PM »
Quote from: Houshalter
Awesome, we already have concept art.   This brings up a whole new question: What will the bots structure be?

That's partially why I made it... I'm very confudled about what it is supposed to look like, do you like my design though? I think it might possibly be practical but probably needs many changes and I have the feeling other people have diffrent ideas...
« Last Edit: March 22, 2010, 10:27:52 PM by ashton15 »

Offline Houshalter

  • Bot Destroyer
  • ***
  • Posts: 312
    • View Profile
Advanced Multibot Project
« Reply #18 on: March 22, 2010, 11:08:36 PM »
Quote
That's partially why I made it... I'm very confudled about what it is supposed to look like, do you like my design though? I think it might possibly be practical but probably needs many changes and I have the feeling other people have diffrent ideas...

No one knows what "its supposed to look like" because theres no real goal except to make a kick ass multibot. Your idea is good though.

Offline bacillus

  • Bot Overlord
  • ****
  • Posts: 907
    • View Profile
Advanced Multibot Project
« Reply #19 on: March 22, 2010, 11:45:50 PM »
Looks like Hydra  
I think tie IDs should be calculated on-site. What I did for the spine is alternate between 1 and 2 so bots only have to remember which one's in front or behind (this should be the first tie formed anyway), then 3 and 4 for tentacles, depending on if they were formed to the left or right of the spine. In this way, you can describe every cell, its function and its position in relation to the spine it's attached to. Tentacle bases would have an extra variable, or a different tie ID, that would signal new cells to act as tentacles rather than spines. I know this sounds a bit overwhelming, but the bottom line is that we need a non-static tie ID at some point, else something like 102 .readtie will become ambiguous and erratic at some point.
"They laughed at Columbus, they laughed at Fulton, they laughed at the Wright brothers. But they also laughed at Bozo the Clown."
- Carl Sagan

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #20 on: March 23, 2010, 12:32:52 PM »
Quote from: bacillus
Looks like Hydra  
I think tie IDs should be calculated on-site. What I did for the spine is alternate between 1 and 2 so bots only have to remember which one's in front or behind (this should be the first tie formed anyway), then 3 and 4 for tentacles, depending on if they were formed to the left or right of the spine. In this way, you can describe every cell, its function and its position in relation to the spine it's attached to. Tentacle bases would have an extra variable, or a different tie ID, that would signal new cells to act as tentacles rather than spines. I know this sounds a bit overwhelming, but the bottom line is that we need a non-static tie ID at some point, else something like 102 .readtie will become ambiguous and erratic at some point.

Ok I've implemented a way to reconfigure tie numbers and store/change them correctly (I've not tested it however), each .tiex variable stores the number to be used in .tienum, also should handle enemies tieing well. It turned out to be quite simple in the end after I spent a while thinking about it... though it's long and probably needs compression. So TJ3 hows it going with your bit of coding, anything intresting yet?

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']def tie1 101
def tie2 102
def tie3 103
def tie4 104
def numtiescheck 105
def timer2

'The timer is here for when multiple ties are deleted at once and also the delay
'in moving evrything down is one memory change per cycle
cond
start
.timer2 inc
stop

cond
*.numtiescheck *.numties !=
start
0 .timer2 store
stop

cond
'If the ammount of ties change
*.numtiescheck *.numties !=
*.timer2 5 < or
start
'update memory of many ties exist
*.numties .numtiescheck store

'Basically sees if there are any values
*.tie1 4  =
*.tie2 3 !=
*.tie3 3 != or
*.tie4 3 != or
and
*.tie1 dec

*.tie2 4  =
*.tie1 3 !=
*.tie3 3 != or
*.tie4 3 != or
and
*.tie2 dec

*.tie3 4  =
*.tie1 3 !=
*.tie2 3 != or
*.tie4 3 != or
and
*.tie3 dec

*.tie4 4  =
*.tie1 3 !=
*.tie2 3 != or
*.tie3 3 != or
and
*.tie4 dec


''''----''''

*.tie1 3  =
*.tie2 2 !=
*.tie3 2 != or
*.tie4 2 != or
and
*.tie1 dec

*.tie2 3  =
*.tie1 2 !=
*.tie3 2 != or
*.tie4 2 != or
and
*.tie2 dec

*.tie3 3  =
*.tie1 2 !=
*.tie2 2 != or
*.tie4 2 != or
and
*.tie3 dec

*.tie4 3  =
*.tie1 2 !=
*.tie2 2 != or
*.tie3 2 != or
and
*.tie4 dec


''''----''''

*.tie1 2  =
*.tie2 1 !=
*.tie3 1 != or
*.tie4 1 != or
and
*.tie1 dec

*.tie2 2  =
*.tie1 1 !=
*.tie3 1 != or
*.tie4 1 != or
and
*.tie2 dec

*.tie3 2  =
*.tie1 1 !=
*.tie2 1 != or
*.tie4 1 != or
and
*.tie3 dec

*.tie4 2  =
*.tie1 1 !=
*.tie2 1 != or
*.tie3 1 != or
and
*.tie4 dec


''''----''''

*.numties 3 <=
*.tie1 1 =
*.tie2 4 =
*.tie3 4 = or
*.tie4 4 = or
and
*.tie1 dec

*.numties 3 <=
*.tie2 1 =
*.tie1 4 =
*.tie3 4 = or
*.tie4 4 = or
and
*.tie2 dec

*.numties 3 <=
*.tie3 1 =
*.tie1 4 =
*.tie2 4 = or
*.tie4 4 = or
and
*.tie3 dec

*.numties 3 <=
*.tie4 1 =
*.tie1 4 =
*.tie2 4 = or
*.tie3 4 = or
and
*.tie4 dec


''''----''''

*.numties 2 <=
*.tie1 1 =
*.tie2 3 =
*.tie3 3 = or
*.tie4 3 = or
and
*.tie1 dec

*.numties 2 <=
*.tie2 1 =
*.tie1 3 =
*.tie3 3 = or
*.tie4 3 = or
and
*.tie2 dec

*.numties 2 <=
*.tie3 1 =
*.tie1 3 =
*.tie2 3 = or
*.tie4 3 = or
and
*.tie3 dec

*.numties 2 <=
*.tie4 1 =
*.tie1 3 =
*.tie2 3 = or
*.tie3 3 = or
and
*.tie4 dec


''''----''''

*.numties 1 <=
*.tie1 1 =
*.tie2 2 =
*.tie3 2 = or
*.tie4 2 = or
and
*.tie1 dec

*.numties 1 <=
*.tie2 1 =
*.tie1 2 =
*.tie3 2 = or
*.tie4 2 = or
and
*.tie2 dec

*.numties 1 <=
*.tie3 1 =
*.tie1 2 =
*.tie2 2 = or
*.tie4 2 = or
and
*.tie3 dec

*.numties 1 <=
*.tie4 1 =
*.tie1 2 =
*.tie2 2 = or
*.tie3 2 = or
and
*.tie4 dec


''''----''''

*.numties 0 =
*.tie1 1 =
and
*.tie1 dec

*.numties 0 =
*.tie2 1 =
and
*.tie2 dec

*.numties 0 =
*.tie3 1 =
and
*.tie3 dec

*.numties 0 =
*.tie4 1 =
and
*.tie4 dec

stop

EDIT:

Just realized I made a fairly major error with the code, if you scroll down to just under half way down the diffrence is fairly obvious and you should be able to work out the error easily enough by comparing the two, basically when the ammount of ties increases it puts the number of the tie into the relevant port, identifying which port is which is for another department and if the number of ties decreases it compacts the tie numbers. Also I suggest that the ball of the tentacles have one port in front, one behind, the third port for if they fork which can also be used for a veggie as can the the fourth port also be used for a veggie.

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']def tie1 101
def tie2 102
def tie3 103
def tie4 104
def numtiescheck 105
def timer2

cond
start
.timer2 inc
stop

cond
*.numtiescheck *.numties <
start
*.numties .numtiescheck store

'in tie port 1 and
*.tiepres .tie1 store

'in tie port 2 and
*.tiepres .tie2 store

'in tie port 3 and
*.tiepres .tie3 store

'in tie port 4 and
*.tiepres .tie4 store

'not tie1
'not tie2 and
'not tie3 and
'not tie4 and
'deal with enemy tie
stop

cond
*.numtiescheck *.numties >
*.timer2 5 < or
start
*.numties .numtiescheck store

*.tie1 4  =
*.tie2 3 !=
*.tie3 3 != or
*.tie4 3 != or
and
*.tie1 dec

*.tie2 4  =
*.tie1 3 !=
*.tie3 3 != or
*.tie4 3 != or
and
*.tie2 dec

*.tie3 4  =
*.tie1 3 !=
*.tie2 3 != or
*.tie4 3 != or
and
*.tie3 dec

*.tie4 4  =
*.tie1 3 !=
*.tie2 3 != or
*.tie3 3 != or
and
*.tie4 dec


''''----''''

*.tie1 3  =
*.tie2 2 !=
*.tie3 2 != or
*.tie4 2 != or
and
*.tie1 dec

*.tie2 3  =
*.tie1 2 !=
*.tie3 2 != or
*.tie4 2 != or
and
*.tie2 dec

*.tie3 3  =
*.tie1 2 !=
*.tie2 2 != or
*.tie4 2 != or
and
*.tie3 dec

*.tie4 3  =
*.tie1 2 !=
*.tie2 2 != or
*.tie3 2 != or
and
*.tie4 dec


''''----''''

*.tie1 2  =
*.tie2 1 !=
*.tie3 1 != or
*.tie4 1 != or
and
*.tie1 dec

*.tie2 2  =
*.tie1 1 !=
*.tie3 1 != or
*.tie4 1 != or
and
*.tie2 dec

*.tie3 2  =
*.tie1 1 !=
*.tie2 1 != or
*.tie4 1 != or
and
*.tie3 dec

*.tie4 2  =
*.tie1 1 !=
*.tie2 1 != or
*.tie3 1 != or
and
*.tie4 dec


''''----''''

*.numties 3 <=
*.tie1 3 =
*.tie2 4 =
*.tie3 4 = or
*.tie4 4 = or dupbool
*.tie2 2 = and overbool and
dropbool
.tie2 dec
*.tie3 2 = dupbool
*.tie4 2 = and overbool and
dropbool
.tie4 dec
dropbool
.tie3 dec
dropbool
.tie1 dec

*.numties 3 <=
*.tie2 3 =
*.tie1 4 =
*.tie3 4 = or
*.tie4 4 = or dupbool
*.tie1 2 = and overbool and
dropbool
.tie1 dec
*.tie3 2 = dupbool
*.tie4 2 = and overbool and
dropbool
.tie4 dec
dropbool
.tie3 dec
dropbool
.tie2 dec

*.numties 3 <=
*.tie3 3 =
*.tie1 4 =
*.tie2 4 = or
*.tie4 4 = or dupbool
*.tie1 2 = and overbool and
dropbool
.tie1 dec
*.tie2 2 = dupbool
*.tie4 2 = and overbool and
dropbool
.tie4 dec
dropbool
.tie2 dec
dropbool
.tie3 dec

*.numties 3 <=
*.tie4 3 =
*.tie1 4 =
*.tie2 4 = or
*.tie3 4 = or dupbool
*.tie1 2 = and overbool and
dropbool
.tie1 dec
*.tie2 2 = dupbool
*.tie3 2 = and overbool and
dropbool
.tie3 dec
dropbool
.tie2 dec
dropbool
.tie4 dec


''''----''''

*.numties 2 <=
*.tie1 2 =
*.tie2 3 =
*.tie3 3 = or
*.tie4 3 = or dupbool
*.tie2 1 = and overbool and
dropbool
.tie2 dec
*.tie3 1 = dupbool
*.tie4 1 = and overbool and
dropbool
.tie4 dec
dropbool
.tie3 dec
dropbool
.tie1 dec

*.numties 2 <=
*.tie2 2 =
*.tie1 3 =
*.tie3 3 = or
*.tie4 3 = or dupbool
*.tie1 1 = and overbool and
dropbool
.tie1 dec
*.tie3 1 = dupbool
*.tie4 1 = and overbool and
dropbool
.tie4 dec
dropbool
.tie3 dec
dropbool
.tie2 dec

*.numties 2 <=
*.tie3 2 =
*.tie1 3 =
*.tie2 3 = or
*.tie4 3 = or dupbool
*.tie1 1 = and overbool and
dropbool
.tie1 dec
*.tie2 1 = dupbool
*.tie4 1 = and overbool and
dropbool
.tie4 dec
dropbool
.tie2 dec
dropbool
.tie3 dec

*.numties 2 <=
*.tie4 2 =
*.tie1 3 =
*.tie2 3 = or
*.tie3 3 = or dupbool
*.tie1 1 = and overbool and
dropbool
.tie1 dec
*.tie2 1 = dupbool
*.tie3 1 = and overbool and
dropbool
.tie3 dec
dropbool
.tie2 dec
dropbool
.tie4 dec


''''----''''

*.numties 1 <=
*.tie1 1 =
*.tie2 2 =
*.tie3 2 = or
*.tie4 2 = or
.tie1 dec

*.numties 1 <=
*.tie2 1 =
*.tie1 2 =
*.tie3 2 = or
*.tie4 2 = or
.tie2 dec

*.numties 1 <=
*.tie3 1 =
*.tie1 2 =
*.tie2 2 = or
*.tie4 2 = or
.tie3 dec

*.numties 2 <=
*.tie4 2 =
*.tie1 3 =
*.tie2 3 = or
*.tie3 3 = or
.tie4 dec


''''----''''

*.numties 0 =
*.tie1 1 =
and
*.tie1 dec

*.numties 0 =
*.tie2 1 =
and
*.tie2 dec

*.numties 0 =
*.tie3 1 =
and
*.tie3 dec

*.numties 0 =
*.tie4 1 =
and
*.tie4 dec

stop



Two queistions:

Going back to what Houshalter said what will the bots structure be?
Also may someone give me something new to make?
« Last Edit: March 24, 2010, 03:47:29 PM by ashton15 »

Offline Tj3

  • Bot Neophyte
  • *
  • Posts: 39
    • View Profile
Advanced Multibot Project
« Reply #21 on: March 25, 2010, 07:51:42 AM »
Here's an idea for telling offspring what to be.
I've been busy lately and haven't had a chance to work on this much.
But anyway, here it is:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
'Repro requirements
start
50 .repro store
.type .shoot store
[type] .shootval store
stop

Offline Houshalter

  • Bot Destroyer
  • ***
  • Posts: 312
    • View Profile
Advanced Multibot Project
« Reply #22 on: March 25, 2010, 04:10:32 PM »
actually it will be something more like this:
Code: [Select]
cond
*InsertReproRequireMentsHere*
.specrepro 0 =
start
*TheTypeOfOffspringYouWantToMake* 971 store
.specrepro inc
stop

cond
*.secrepro 1 =
start
x .repro store
0 .971 store
.specrepro dec
stop

This way your using racial memory to tell your offspring what or who they are.

Offline Tj3

  • Bot Neophyte
  • *
  • Posts: 39
    • View Profile
Advanced Multibot Project
« Reply #23 on: March 25, 2010, 06:12:57 PM »
Yeah, that would be the best. I was thinking about that, but thought an issue might come up with cells behaving as other types for a cycle when they reproduce.
Oh never mind, type could still be 100 or some number, and it just uses this gene:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
*.robage 0 =
start
*971 .type store
stop

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #24 on: March 26, 2010, 02:22:09 PM »
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
*.robage 0 =
start
*971 .type store
stop

why not def type 971?

Offline Houshalter

  • Bot Destroyer
  • ***
  • Posts: 312
    • View Profile
Advanced Multibot Project
« Reply #25 on: March 26, 2010, 04:17:45 PM »
because then when they reproduce they have offspring that are their type or they have to change their type first. Either way we're back to the same problem. Its easier just to use the racial memory.

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #26 on: March 26, 2010, 06:04:07 PM »
Ok then, how about a diffrent perspective?

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']
def neednew

cond
*.robage 0 =
start
0 .type store
.tie inc
*.neednew .memloc store
stop

cond
*.robage 1 =
start
.deltie inc
stop

cond
*.memval 0 !=
start
*.memval .type
.tie inc
stop


Admitedly it's not practical, but it could be if the kinks were ironed out... not so sure about the old deleting the birth tie thing but you get the idea
« Last Edit: March 26, 2010, 06:04:21 PM by ashton15 »

Offline Houshalter

  • Bot Destroyer
  • ***
  • Posts: 312
    • View Profile
Advanced Multibot Project
« Reply #27 on: March 27, 2010, 10:31:36 AM »
Is it possible to just harden the birth tie? That would solve some problems.

Offline ashton15

  • Bot Builder
  • **
  • Posts: 99
    • View Profile
Advanced Multibot Project
« Reply #28 on: March 28, 2010, 06:24:46 AM »
Quote from: Houshalter
Is it possible to just harden the birth tie? That would solve some problems.

I think the only way is to replace the tie...

Offline bacillus

  • Bot Overlord
  • ****
  • Posts: 907
    • View Profile
Advanced Multibot Project
« Reply #29 on: March 28, 2010, 11:43:26 PM »
The normal way to do it is to form the tie on birth, but getting the right tie ID is tricky. You could delay, but that makes physical alignment a factor. Of course, you could always fixpos for a few cycles...
« Last Edit: March 28, 2010, 11:43:47 PM by bacillus »
"They laughed at Columbus, they laughed at Fulton, they laughed at the Wright brothers. But they also laughed at Bozo the Clown."
- Carl Sagan