Darwinbots Forum

Bots and Simulations => Bot Tavern => Topic started by: Tj3 on March 19, 2010, 10:25:40 PM

Title: Advanced Multibot Project
Post by: Tj3 on March 19, 2010, 10:25:40 PM
I'm starting to work on an advanced multibot, and was wondering if anyone was interested in helping. The idea is to have all different kinds of cells to do different things, like:
And maybe some others.
Anyway, I was thinking we could all write parts of it and then combine it all together. It'd be cool to have a multibot with, like, 50 cells all doing different things. It would be a challenge, but pretty awesome to watch this big thing moving around in a sim.
We'll probably have some things we will all use, like it might have a .type, to determine what cells do. This would be used by all of us to identify cells.
So who's in?
Title: Advanced Multibot Project
Post by: bacillus on March 19, 2010, 10:41:43 PM
Go down about 6 threads and you'll find such a project already underway. There's already a DNA 'skeleton' up, so you can post your code and integrate it into the bot.
I'm finding that cells dedicated to movement are a bad idea, as they snap ties too easily and have no advantage over each cell moving itself.
Title: Advanced Multibot Project
Post by: ikke on March 20, 2010, 03:25:55 AM
Quote from: bacillus
I'm finding that cells dedicated to movement are a bad idea, as they snap ties too easily and have no advantage over each cell moving itself.
Which I would consider a design flaw if the goal of DB is to evolve more complex life
Title: Advanced Multibot Project
Post by: Tj3 on March 20, 2010, 08:05:57 AM
Oh, there's already someone doing the exact same thing.
It looks like nobody's worked on it in a month or so. Are you still working on it, or is it abandoned?

Quote from: bacillus
I'm finding that cells dedicated to movement are a bad idea, as they snap ties too easily and have no advantage over each cell moving itself.
Really? I was thinking it would be better, plus a lot more realistic to have movement cells, since coordinating motion through the whole bot seemed like it wouldn't work too well. "Swimming," or something like that, seemed a lot more realistic, since it wouldn't just be floating around. Kind of like moving legs.
Title: Advanced Multibot Project
Post by: Houshalter on March 20, 2010, 11:31:39 AM
Heres a link to the original topic. (http://www.darwinbots.com/Forum/index.php?showtopic=3286) Its not abandoned but theres no one working on it at the moment. I still have the tentacle I was going to upload. Maybe we should start with that.
Title: Advanced Multibot Project
Post by: Tj3 on March 20, 2010, 12:25:39 PM
Okay. If you want to work on it, we should first decide on things that apply to the entire MB(variables, etc.). Then we can make the DNA for different cells seperately, and combine them at the end.
By the way, isn't there a limit on ties? Like 3 or 4 per bot?
Title: Advanced Multibot Project
Post by: bacillus on March 20, 2010, 09:01:16 PM
Whoa, so much to address:

Concerning tie motion, it's yet another thing that will be fixed in DB3 - the way I understand it, bots that are tied will be linked surface-to-surface, so they can't really stretch. However, it means turning will affect the entire organism, so would give realistic motion. As a result, turning will require exerting a torque rather than setting an angle (this makes aiming a bit of a pain, but having to develop muscles to flex seems like a good thing.)

I don't really have time to work on projects this year, and I also don't have anywhere to 'playtest' the code, so I'll mostly be dropping handy hints. I tried to make it obvious how the structure works, but if you have doubts, feel free to ask and I'll try my best to explain them.

Oh yeah, and no tie limits, but make sure to give your ties good IDs so the bots can easily find them...
Title: Advanced Multibot Project
Post by: Houshalter on March 20, 2010, 10:41:34 PM
I don't like the idea of abandoning ties. I think you should just drop the things that are supposed to balance them but end up making it a pain like nrg distribution, tie angles, etc. Ties should be easy to do and be completely open to different strategies so its open to evolution. Don't make it more complicated, even if it is more like real life.

Also, for the bot were making, we need to set a few things in reserve. We need to create a way for a bot to control what it does on the first cycle. We need to set one variable aside that will control which specialized genes activate on each type of cell, some genes might go to multiple cells. My idea was to have a snake like bot that would spawn long tentacles on either side of it that would grow over time when there was nrg and grab food when they saw it. When they grew long enough, or collected enough veggies they would become body cells themselves and spawn more tentacles, like a tree growing branches that grow more branches. Eventually it would grow big enough that some of the branches would "break off" from the larger bot and become a seprate bot entirely. I already have the tentacle cell mostly done, but it still needs genes for feeding and for growing/branching-off.
Title: Advanced Multibot Project
Post by: ashton15 on March 21, 2010, 05:08:09 AM
If we want to have movement cells surely an easy way to stop them breaking would be

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']cond
*.multi 0 !=
*.celltype 5 =
*.tielen 80 >
start
75 .tielen store
stop

where 5 is a movement cell. And also could .tmemval be used in conjunction with .tmemloc to syncronise timers for directed movement and also use 0 .setaim store to help with co-ordination, so the robot rather than turning and twisting out of control moves up and down, left and right
Title: Advanced Multibot Project
Post by: bacillus on March 22, 2010, 12:04:36 AM
Quote from: Houshalter
Also, for the bot were making, we need to set a few things in reserve. We need to create a way for a bot to control what it does on the first cycle. We need to set one variable aside that will control which specialized genes activate on each type of cell, some genes might go to multiple cells. My idea was to have a snake like bot that would spawn long tentacles on either side of it that would grow over time when there was nrg and grab food when they saw it. When they grew long enough, or collected enough veggies they would become body cells themselves and spawn more tentacles, like a tree growing branches that grow more branches. Eventually it would grow big enough that some of the branches would "break off" from the larger bot and become a seperate bot entirely. I already have the tentacle cell mostly done, but it still needs genes for feeding and for growing/branching-off.

I think the best way to do it would be this:
 - the tentacles can read from the base 'spine' and use .tmemloc to pass on limited info, but the spine will only read from the brain. In other words, the ten I/O ports are used for head-to-spine and spine-to tentacle information, and .tmemloc has to be used as an eleventh 'reverse port'.
 - the head gives off a signal, which is passed up the spine, increasing every time a cell recieves it, and once it hits the tail, it's bounced back without incrementation. That way, each spinal cell knows roughly its position in the organism and the size of the organism, which can then be transmitted to the tentacles to determine size eg. the larger the organism, the larger the tentacles, and tentacles shouldn't form too far in front so it doesn't interfere with vision etc.
 - The tail cell has to spawn the new tail before becoming a part of the spine - this is marginally more difficult than the standard head reproduction, but solves the problem of functional head-cell issues.


The best way for ties not to break is to use .stifftie and coordinate motion with velocity limits.
Title: Advanced Multibot Project
Post by: Tj3 on March 22, 2010, 07:39:43 AM
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.
Title: Advanced Multibot Project
Post by: Houshalter on March 22, 2010, 04:13:06 PM
Sounds good to me although before we create specialized cells like movement, eye, or brain cells don't you think it would be simpler to see if you can distribute some of these tasks over many other cells. As they say, "You will never get paid to do with 2 men what you've proven you can do with one". I think thats how it goes. Anyways I have thought of another specialized cell. A stomach cell. These cells hold lots of body and are essentially storage places for the organism. They will form between the tentacles and the body and when veggies are pulled in they will group around them and tie to them. They might fire viruses at them or keep statistics about them and distribute them to your "brain" cells. They might have other uses to.
Title: Advanced Multibot Project
Post by: Tj3 on March 22, 2010, 04:39:03 PM
That's a good idea. Okay, time to start posting some code  ! These are some basic variables for important stuff in all cells, like type, the botid(Special ID of multibot I was thinking of using), and IDs for up to 5 ties.
I left room for more ties if we need them.
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']
def type 100

def tie1 101
def tie2 102
def tie3 103
def tie4 104
def tie5 105

def botid 125
Title: Advanced Multibot Project
Post by: Houshalter on March 22, 2010, 05:22:07 PM
This is in no way finished but it gives you an idea on the direction of the tentacle cell. Suggestions are welcome:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']def botnumber 70 'what number i am in the tentacle chain
def lasttienum 71 'last tienumber (nessasary for comunication) I found out you
                  'can use .tiepres. May have to change this
def agewhentied 72 'what age was i when i tied to my first bot (or got tied to)
def whichside 73 'which side of the tentacle will i search for food?
def clock 74 'turn clockwise or counter clockwise?
def foundveg 75  'this stops it from moving when it is in route to a veg
def tiedveg 76 'have i tied to a veg? shows various states of the veg
'               tieing proccess
def howmanyties 77 'tells me how many ties i have minus the vegs im tied to
'========================================================================
'touts and outs and ins tins etc.
'   out1 = numties
'   tout1 = my botnumber
'   out2 = botnumber
'   tout2 = which side of the bot my search pattern is assigned
'   tout3 = refxpos
'   tout4 = refypos
'   tout5 = communication state
'========================================================================

'reproduce to form a new tentacle
'NOTE: this is temporary to test the performance of the tentacle, my idea
'      is that the tentacle will grow longer over time when theres nrg.
cond
*.foundveg 1 !=
*.botnumber 20 !=
*.robage 20 >
*.eye5 0 =
start
*.nrg 20 *.botnumber sub div 100 >
*.nrg 20 *.botnumber sub div *.nrg div 100 mult .repro store
stop

'what to do when i see my new offspring
cond
*.numties 1 =
*.multi 1 =
*.refeye *.myeye =
*.reftie *.myties =
*.refmulti 0 =
*.in1 0 =
start
.howmanyties inc
*.lasttienum 1 =
.tie inc
not
.tie inc .tie inc
stop

'set my out1 (can change if nessacary) to show if im part of the main bot yet
'so when im a new cell i won't be tied to two tentacles instead of just one
cond
*.out1 *.numties !=
start
*.numties .out1 store
stop

'store a value in .lasttienum to find what tie connects to the bot behind me
cond
*.multi 1 =
*.lasttienum 0 =
start
*.tiepres .lasttienum store
stop

'Find out what cell number i am etc, once im a multibot
cond
*.multi 1 =
*.botnumber 0 =
start
*.readtie *.tiepres != 'this makes sure it stores .tieread before it does
                       'anything
*.tiepres .readtie store
not
*.tin1 1 add .botnumber store
stop

'store .botnumber in tout1
cond
*.tout1 *.botnumber !=
start
*.botnumber .tout1 store
stop

'find age when tied
cond
*.multi 1 =
.agewhentied 0 =
start
*.robage .agewhentied store
stop

'store my bot number in my out2
cond
*.botnumber *.out2 !=
start
*.botnumber .out2 store
stop

'search for food
Cond
*.foundveg 1 !=
*.multi 1 =
start
*.clock 0 = and
100 .aimdx store
*.clock 1 = and
-100 .aimdx store
stop

'check the bot behind me if i should be searching on the left or the right
cond
*.whichside 0 =
*.readtie *.lasttienum =
start
*.tin2 1 =
.whichside inc inc
.tout2 inc inc
*.tin2 2 =
.whichside inc
.tout2 inc
stop

'turn untill i see bot next to me
cond
*.eye5 0 >
*.refeye *.myeye =
*.reftie *.myties =
*.numties 2 =
start
*.in2 *.botnumber 1 sub =
*.whichside 1 = and
*.in2 *.botnumber 1 add =
*.whichside 2 = and or
*.clock 0 = and
.clock inc
*.in2 *.botnumber 1 add =
*.whichside 1 = and
*.in2 *.botnumber 1 sub
*whichside 2 = and or
*.clock 1 = and
.clock dec
stop

'if i have one tie then just turn untill i see bot behind me
cond
*.eye5 0 >
*.numties 1 =
*.refeye *.myeye =
*.reftie *.myties =
*.in2 *.botnumber 1 sub
start
*.clock 1 =
.clock dec
*.clock 0 =
.clock inc
stop

'when i see food I?  (should i put a refshell/slime condition here?)
cond
*.eye5 0 >
*.refshoot 0 =
*.reftie 0 =
*.refkills 0 =
*.tiedveg 0 =
*.refmulti 0 =
start
*.refxpos *.refypox angle .setaim store
.tie inc .tie inc .tie inc 'I only want to shoot one tie but this might shoot untill it hits
*.foundveg 0 =
*.foundveg inc
*.tout3 *.refxpos !=
*.refxpos .tout3 store
*.tout4 *.refypos !=
*.refypos .tout4 store
*.tout5 1 !=
.tout5 1 store
stop

'once ive tied to and captured the food?
cond
*.tiepres 3 =          'will this work? Does the tie have to be hardend first?
*.tiedveg 0 =
*.howmanyties 1 sub    'uh-oh, this may activate when it reproduces.
start
.tiedveg inc
*.robage .vegtimer store
stop

'
Title: Advanced Multibot Project
Post by: Tj3 on March 22, 2010, 06:34:54 PM
Nice. That looks fairly easy to incorporate into the MB, which is good.
I just came up with these genes to exchange information between cells. I'm not sure if they work, but it's the general idea.
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']'Genes for information exchange between cells.

'Define statements
def type 100

def tie1 101
def tie2 102
def tie3 103
def tie4 104
def tie5 105

def botid 125

'Info exchange genes
cond
*.tie1 0 =
*.multi 0 !=
start
*.tiepres .tie1 store
stop

cond
*.multi 0 !=
start
*.tie1 .readtie store
stop

cond
*.multi 0 !=
*.tin1 0 !=
*.tin1 *.botid !=
start
*.tin1 *.tout1 store
*.tin2 *.tout2 store
*.tin3 *.tout3 store
*.tin4 *.tout4 store
*.tin5 *.tout5 store
*.robage .lastsend store
stop

cond
*.robage *.lastsend 1 add store
start
0 *.tout1 store
0 *.tout2 store
0 *.tout3 store
0 *.tout4 store
0 *.tout5 store
stop


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
Title: Advanced Multibot Project
Post by: ashton15 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...
Title: Advanced Multibot Project
Post by: Houshalter 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?
Title: Advanced Multibot Project
Post by: ashton15 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...
Title: Advanced Multibot Project
Post by: Houshalter 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.
Title: Advanced Multibot Project
Post by: bacillus 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.
Title: Advanced Multibot Project
Post by: ashton15 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?
Title: Advanced Multibot Project
Post by: Tj3 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
Title: Advanced Multibot Project
Post by: Houshalter 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.
Title: Advanced Multibot Project
Post by: Tj3 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
Title: Advanced Multibot Project
Post by: ashton15 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?
Title: Advanced Multibot Project
Post by: Houshalter 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.
Title: Advanced Multibot Project
Post by: ashton15 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
Title: Advanced Multibot Project
Post by: Houshalter on March 27, 2010, 10:31:36 AM
Is it possible to just harden the birth tie? That would solve some problems.
Title: Advanced Multibot Project
Post by: ashton15 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...
Title: Advanced Multibot Project
Post by: bacillus 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...
Title: Advanced Multibot Project
Post by: Houshalter on March 29, 2010, 07:01:46 AM
2 options:

1: Have the parent shoot the tie.

2: Store the proper tie id in racial memory.