Darwinbots Forum
Bots and Simulations => DNA - General => Topic started by: Welwordion on September 18, 2005, 01:25:43 PM
-
ok I tried to design a search gene but for some reason it does not work were is the mistake?
cond
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 > or
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
*.eye9 -3 mult *.eye8 -4 mult add *.eye7 -5 mult add *.eye6 -6 mult add 10 div
add .aimsx store
stop
end
so what it should do, if any target is nearer then the target in front it should
rotate based on the attractivity of the side. I weighted the values to calculate attractivity.
Well in any case the rotation is to weak , but the real problem is it only rotates correctly clockwise never anticlockwise.
-
I'm not certain but won't the first weighting calculation result get overwritten by the second?
I have split this one gene into two seperate genes and it works fine. There might be another way to keep it as one gene though; let some of the professionals have a look!
-
Turning genes always give me a headache. Ugh. There's a reason my bots all turn like a station wagon...
Anyway, just thought I'd post and say I looked it over. I have nothing more to add than what Ulc has already said.
-
how you seperated that? its one calculation I put in 3 lines
weight left
weight right(negative)
sum both together and store value
????? :huh:
bye the way if you write .aimsx 30 inc will the value in .aimsx be increased by thirty
(remember seeing something like that in purples tutorial but I am not sure.)
-
cond
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
.aimsx store
stop
cond
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye9 3 mult *.eye8 4 mult add *.eye7 5 mult add *.eye6 6 mult add 10 div
.aimdx store
stop
Worked alright-ish for me anyway!
-
if you use .aimsx and then .aimdx does that not waste quite some energy?
turning 30 right only to turn 50 left?
note:I added an question about inc above
-
Nope, inc increases a location by 1.
inc - Increments the value stored in a given memory cell by one. The memory location is defined by the top number on the stack which is then deleted.
Syntax - (330 inc) will increment the value stored in memory location 330 (.tie)
-
I beleive there may be a command to do what you're asking. I'd have to double check to see if I removed it or not.
-
I think that's addstore.
2 30 addstore equivalent to *30 2 add 30 store
-
ok I posted this already in multibots, but without finding the problem I can not make any progress :/.
So its about the last gene why does it not make the veggie move?
cond
*.numties 0 =
*.multi 0 =
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
.aimsx store
stop
cond
*.numties 0 =
*.multi 0 =
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye9 3 mult *.eye8 4 mult add *.eye7 5 mult add *.eye6 6 mult add 10 div
.aimdx store
stop
cond
*.vel 30 <
*.multi 0 =
*.numties 0 =
start
30 *.vel sub 2 div .up store
stop
cond
*.eye5 50 >
*.refeye 0 =
*.numties 0 =
*.multi 0 =
start
20 .tie store
stop
cond
*.multi 1 =
*.numties 0 =
start
.dn .tieloc store
20 .tieval store
20 .tienum store
stop
end
-
*.multi 1 =
*.numties 0 =
These two conditions are mutually exclusive. You can't be a Multi-bot and simultaneously have zero ties.
-
I know I already corrected that in my test version I use but the result is the same
(otherwise the gene would not have activated when I looked at it)
-
I have asked this before but are your veggies "blocked" from the options panel.
If they are then they can't move.
Your code should work. I have used this loads of times.
-
oh that you meaned by blocked ^^ and I always asked myself whats blocked meant in the options.
GREAT SORRY SORRY SORRY iam such a DUMB IDIOT!
:( :unsure: :wacko:
-
Easy mistake to make. ;)
-
To be honest I don't even know why you'd use blocked veggies. They tend to make things somewhat boring.
-
Keeps coming up as a default setting.
-
ok my current status in my test phase. gen8 does not work for some reason
when I make printmem 44 after the energy is over 20000 it still gives out
44-->0
(gen 9 is only a testgene its still not worked out for forming a ring)
'gen1
cond
*.numties 0 =
*.multi 0 =
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
.aimsx store
stop
'gen2
cond
*.numties 0 =
*.multi 0 =
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye9 3 mult *.eye8 4 mult add *.eye7 5 mult add *.eye6 6 mult add 10 div
.aimdx store
stop
'gen3
cond
*.vel 30 <
*.multi 0 =
*.numties 0 =
start
30 *.vel sub 2 div .up store
stop
'gen4
cond
*.eye5 50 >
*.refeye 0 =
*.numties 0 =
*.multi 0 =
start
20 .tie store
stop
'gen5
cond
*.multi 1 =
*.numties 1 =
start
2 .tieloc store
1 .tieval store
20 .tienum store
stop
'gen6
cond
*.readtie 0 =
start
20 .readtie store
stop
'gen7
cond
*.numties 0 >
*.trefnrg 3000 >
start
-1 .tieloc store
-1000 .tieval store
20 .tienum store
stop
'gen8
cond
*.refnrg 20000 >
*.multi 1 =
*.numties 1 =
start
44 inc
314 .fixang store
stop
'gen9
cond
*44 0 >
*.multi 1 =
*.numties 1 =
*.nrg 2000 >
start
70 .repro store
10 .tie store
15 .aimdx store
stop
end
-
note:
about:blocked
Its the artifisial way to make rooted trees right now. Hopefully with the e-grid this kind of options will be replaced with stuff like real soil...
(duh, seems off topic)
-
So what is Gene 8 supposed to do? If the bot is a multibot with one tie, and the bot closest in eye5 has an energy value greater than 20,000 then it will increment memloc 44 by 1 and set the tie angle to 314?
-
^^ oops there should be written *.nrg instead I wrote *.refnrg thats answers me
why it did not work :/
-
So what is Gene 8 supposed to do? If the bot is a multibot with one tie, and the bot closest in eye5 has an energy value greater than 20,000 then it will increment memloc 44 by 1 and set the tie angle to 314?
All you guys are beating me to the punch these days. :(
There was a time when it was up to me to sort out pretty much every issue like this.
So sad. :( Almost like when the kids grow up and don't need daddy anymore. :sad2:
Then again. Now I have other DB users who are worthy of a challenge. No more kid gloves. :firedevil:
When I actually get the time to design a good bot again, Watch out DB land.
-
*Numsgil notes that PY can bring it, but Numsgil will be the one to serve it.* :evil:
-
We'll see.
Only time will tell. Just don't forget that you are talking to the first guy who figured out that tie feeders were even possible back in V2.11.
Devincio Venator KICKED ASS. One hit kills every time. The top bot back then was I Flamma. Go figure.
I also piloted the deletion of birth ties with Hunter 2.3, Active slime reduction in enemy bots (Devincio Dominator). The list goes on.
I am damn good at finding ways to optimize stuff. hehehe
I am just letting you get the next version well and truly going then I will jump in and start exploiting it.
You can bet that I will "Bring it" :evil:
But can you handle it?
-
*Numsgil notes that he will deliver a big heeping bowl of woop ass to PY once 2.4 is ready.*
-
Only till PY gets the hang of the new system :P
-
Then Bots sayes: ... Am I right though , we are going to get rid of blocked vegs all together and replace it with some kind of stuff from the e-grid??
-
^-^ For now I would like to get the hang of this version.
(tried to prevent the killing of algae once the children formed the tie to his parent,
probably trefnrg looks at the children while energy is sucked from the algae.
But somehow could not create the right gene to fix that)
I really wish someday to be the creator of one of this revolutionary steps PY talks about :D dream dream
-
tried to prevent the killing of algae once the children formed the tie to his parent,
probably trefnrg looks at the children while energy is sucked from the algae.
Use memory locations.
Make the memory change once the tie is formed. Put a condition in your feeding gene that sayes for it not to activate when the memory location is changed.
P.S.
I am not sure what exsactly you want to do , did I get it right?
-
I have no doubt there are plenty of revolutionary ideas left to explore in DB. We just keep adding elements, and finding new ways to interact those elements is as constant adventure.
Most of my "discoveries" happen to be something along the lines of:
1. Wouldn't it be cool if the program did X?
2. Program X.
3. Is indeed cool. Rise to top of respective ladders.
4. Other people think its too cool, and build bots to stop it.
-
I think of it as a sort of constant arms race. Everyone is trying to out do everyone else :)
-
I would love to build a bot based on emergent behaviour from a set of rules rather than rules for every possible situation, but it's quite difficult to get right.
-
Yeah that would be cool, also a bot that could learn specific behaviour for evey race of cobots would be great.
P.S Botsareus:That would not be of any use as I want it to continue feeding and at the same time I want it to share energy.Its more of a syntax problem I seem to have as I wanted it to introduce an cond linked to which tie number is read.
.. hmm probably I tried to set 2 different tie values in the same cycle, I better should try activation in alternating cycles.
...A pity there is no modulo.(dividable bye)Just will do it with memlocs XD
P.S.S:there seems to be commaands not mentioned in the Dna help like signum and floor.(was signum not what I am looking for?)
-
Am I right though , we are going to get rid of blocked vegs all together and replace it with some kind of stuff from the e-grid??
I don't favor getting rid of it. Blocking has its place in the scheme of things.
Fixpos and fixed are going to be combined to save sysvar space but blocked (as an option and as a possibility) must stay.
-
There is a modular command. "mod". I'll be writing up all the commands on the wiki after 2.4 is up, since 2.4 has some new ones.
-
Jeez just shot me I can not understand the world anmyore.
Gene 6 the feeding genes gets activated but it does not feed and ithe bot ties to bots of the same species although that is forbidden (cond in gene 9 ssay there has to be already one tie and it must be a multibot already)
'gen1
cond
*.numties 0 =
*.multi 0 =
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
.aimsx store
stop
'gen2
cond
*.numties 0 =
*.multi 0 =
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye9 3 mult *.eye8 4 mult add *.eye7 5 mult add *.eye6 6 mult add 10 div
.aimdx store
stop
'gen3
cond
*.vel 30 <
*.multi 0 =
*.numties 0 =
start
30 *.vel sub 2 div .up store
stop
'gen4
cond
*.eye5 50 >
*.numties 0 =
*.multi 0 =
*refeye 0 =
start
20 .tie store
stop
cond
'gen5
cond
start
885 inc
stop
'gen6
cond
*.numties 0 >
*.trefnrg 4000 >
*885 2 mod 0 =
start
-1 .tieloc store
-1000 .tieval store
20 .tienum store
cond
'gen7
cond
*.nrg 9000 >
*.multi 1 =
*.numties 1 =
start
314 .fixang store
40 .stifftie store
stop
'gen8
cond
*.multi 1 =
*.numties 1 =
*.nrg 10000 >
start
70 .repro store
stop
'gen9
cond
*.eye5 30 >
*.numties 1 =
*.multi 1 =
*refeye *.myeye =
start
10 .tie store
stop
end
-
You have a few errors here.
gene4 is the cause of the bot tying to his own species.
'gen4
cond
*.eye5 50 >
*.numties 0 =
*.multi 0 =
*refeye 0 =
start
20 .tie store
stop
cond
You are missing a dot between the * and the refeye.
In other words this line says 0 0 = which is always true. It is going to fire a tie at anything it sees as long as it doesn't have one already.
You also have an extra "cond" at the end. This may cause problems.
Gene6
'gen6
cond
*.numties 0 >
*.trefnrg 4000 >
*885 2 mod 0 =
start
-1 .tieloc store
-1000 .tieval store
20 .tienum store
cond
First the trefnrg won't work. It will require a command line "20 readtie store" in a prior gene in order to function. It doesn't know which tie to read otherwise.
You are ending the gene with a "cond" instead of a "stop"
Make these changes and try again
-
Seems to work better(thx) although the mod command seems still to be faulty used by me as it only works if I take this condition out.
(hope I am not annoying you with this kind of mistakes)
-
You can't have actions in the cond of a gene pre 2.4.
cond
5 6 add 11 =
start
...
will not work. I don't know what it will do.
In 2.4, you can totally do this.
-
Can robots(not the user) monitor the activation of gens? So the might learn to associate certain genes with certain chnages in their condition?
-
Not directly, no. Natural selection will do this overtly given enough cycles. You could also program a bot where each gene stored values in certain locations if it activated.
-
To a very limited extent yes. The last gene to activate of another robot can be seen by storing *.thisgene in .memloc. It will readback the number in *.memval.
Possibly use *.thisgene 50 store in the last gene and check *50 to see what the second to last gene to activate was. If you keep track of what each gene does you could "tell" the bots what occured, would still be extremly difficult.
Would probably be a vast nrg waste also, so I wouldn't recommend it unless you could find a major advantage.
I'll take a look at this for you, I think there may be a relativly cheap way using inc/dec.
-
^^ ok I will take a pause from the ring project I wanted to make them reproduce in line that afterwards wraps around an algae but could not even create the line. This tie angles are confusing.
Heres my last tryout I will just continue trying out some stuff not talking about any projects and when I am in the mood try to fix the ring thing.
P.S.:AAAAAAAAARRGGGGGGHHHHHH
'gen1
cond
*.numties 0 =
*.multi 0 =
*.eye4 *.eye5 > or
*.eye3 *.eye5 > or
*.eye2 *.eye5 > or
*.eye1 *.eye5 >
start
*.eye1 3 mult *.eye2 4 mult add *.eye3 5 mult add *.eye4 6 mult add 10 div
.aimsx store
stop
'gen2
cond
*.numties 0 =
*.multi 0 =
*.eye6 *.eye5 > or
*.eye7 *.eye5 > or
*.eye8 *.eye5 > or
*.eye9 *.eye5 >
start
*.eye9 3 mult *.eye8 4 mult add *.eye7 5 mult add *.eye6 6 mult add 10 div
.aimdx store
stop
'gen3
cond
*.vel 30 <
*.multi 0 =
*.numties 0 =
start
30 *.vel sub 2 div .up store
stop
'gen4
cond
*885 5 >
*.eye5 50 >
*.numties 0 =
*.multi 0 =
*.refeye 0 =
start
20 .tie store
20 .readtie store
628 .fixang store
stop
'gen5
cond
start
885 inc
stop
'gen6
cond
*.nrg 9000 >
*.eye5 10 >
*.multi 1 =
*.numties 1 =
start
*66 .aimsx store
*66 50 add 66 store
stop
'gen7
cond
start
60 .sharenrg store
stop
'gen8
cond
*.multi 1 =
*.numties 1 =
*.nrg 9000 >
start
70 .repro store
stop
'gen9
cond
*.eye5 30 >
*885 5 <
*.refeye *.myeye =
start
10 .tie store
stop
-
This tie angles are confusing.
My thoughts exactly. I'll probably go through some day and "simplify" them. :devil:
-
Once again I must add to simplify them without simplifying their possibilities...
-
This tie angles are confusing.
My thoughts exactly. I'll probably go through some day and "simplify" them. :devil:
I kind of like them the way they are.
And as bots said. simplify without losing functionality.
I was also wondering if the tie angle system still works with the new stuff that I added a few versions back.
tieang1, tiang2, tielen1, tielen2 etc.
Remember?
The ones that directly refer to the bots internal tie array. Highly useful for fine structure control.
Just remember that tie angle start at zero (straight ahead) and increase in radians (with a multiple) to make 628 (straight behind) and 1256 (almost a full circle straight ahead again). You can also use negatives. It is pretty easy when you get the hang of it.
-
To be honest, at the moment most of the older tie controls are, well, not controlling in 2.4. I need to go back through sometime and get them working (and probably get the functions readable).
-
And you want to get this thing released by the first?
Good luck with that.
-
No, I was going to release a version that didn't have good tie controls for the 1st, then reconfigure tie controls at some point and release the reconfigured stuff.
To be honest, alot of the tie physics involve some tough stuff, and it may end up being a project in and of itself.
-
jeez my I will get an extreme headache
cond
*100 0 =
*.nrg 5000 >
start
*66 .aimsx store
*66 50 add 66 store
stop
'gen6
cond
*.eye9 30 >
*.eye8 20 <
start
100 inc
stop
Sometimes 100 gets incresed, sometimes not, I really do not understand it
you also can use eye 7 instead of 8 but its still confusing
note originally the full condition includes *.eye5 10 <
it function is to rotate till it finds a space adjacent to an veggie but still free.
-
One problem I see with a gene like
'gen6
cond
*.eye9 30 >
*.eye8 20 <
start
100 inc
stop
is that you have two eyes that are right next to each other in the eyes array and they are both looking for opposite inequalities.
The actual view seen by the robot is spread across several eyes so when eye9 reports a value greater than 30, it is almost inevitable that eye 8 sees something too. The hances are that it will be greater than 20 in most cases so your gene will not activate.
Substituting eye7 for eye8 increases the inter-eye distance so it is much more likely to work.
-
Well, thats also what I thought, however in some cases really strange things happen.
Oh you have any idea why
*66 .fixang store
does not work if I include it in gene 6?
-
Because God hates you.
:rolleyes: :lol:
-
Because God hates you.
Nums makes a good point here. it is more than possible that your chosen Diety(s) have a major issue with you right now.
However I think it is more likely that your DNA code is screwed up without the need to invoke divine intervention.
Point 1.
.fixang only works AFTER ties have hardened in a Multi-Bot. I don't know whether your bot is forming a true MB or not. If not then this won't work.
Point 2.
Anything in gene 6 requires eye9 to be greater than 30 while eye8 is less than 20. This is an unlikely scenario as outlined in my previous mesage.
An increment of 50 to your angle may be enough that it catches the value in both eyes simultaineously. This is especially true if your bot is very close to the veggies.
Try stepping through the sim cycle by cylce and look at what the eyes see as it moves. That is the way I solve this kind of stuff.
-
Hmm when a conncetion between a bot and a veggie is no true multibot that would explain my problems with tie angles ^^.
Bye the way I already changed eye 8 ,to eye 7 before you told me I am only
complaining that the success rate for right behaviour still is only seems circa 70%
Well somehow I will have to make him reproduce before turning back if I can not use fixang.
-
I tried to count generations bye using the racial memory but it somehow not works
cond
start
885 inc
stop
cond
*.nrg 1000 >
*53 0 =
*973 4 <
*.numties 2 <
start
70 .repro store
973 inc
53 inc
stop
cond
*885 15 =
*53 0 >
start
53 dec
stop
cond
*885 10 >
*885 15 <
*.refeye *.myeye =
start
10 .tie store
10 .tienum store
54 inc
stop
-
I never was able to get racial memory to work, to be honest.
-
Bye the way I already changed eye 8 ,to eye 7 before you told me I am only
complaining that the success rate for right behaviour still is only seems circa 70%
It all depends on how close you are.
If you are reading eye values greater than abou 70 then the target bot is most likely in more than 3 eyes simultaneously. A slight rotation could activate eyes 9,8,7 and 6 at the same time.
have you stepped it through from the data panel and looked at the eye readings?
-
I never was able to get racial memory to work, to be honest.
It worked fine in some test bots when I initially added it.
I never really found a real use for it though. :(
-
I bystepped the problem with a gene that after 4 full rotations reproduces as soon
a certain minimum angle is surpassed.(the rotation stops as soon as the bot reproduced)
Well racial memory would be quite useful for multibots and I need it for my tentacle
concept and my fishernet bot, cause trough a generation counter I could control the reproduction behavior.
-
It may be broken. It's one of those things no ones ever really used, so there isn't really a way to test it...
PY, maybe you should hunt down to see if you can find the bit of code for Racial Memory. It may be misplaced/broken/gone all together.
-
here's the code.
If Abs(rob(t).Ties(j).last) > 1 Then
rob(t).Ties(j).last = rob(t).Ties(j).last - Sgn(rob(t).Ties(j).last)
If rob(t).Ties(j).last > 47 And rob(t).Ties(j).last < 68 Then 'should copy the memory locations 971 to 990 from parent to child. One per cycle.
If rob(t).mem(1038 - rob(t).Ties(j).last) = 0 And rob(rob(t).Ties(j).pnt).mem(1038 - rob(t).Ties(j).last) <> 0 Then
rob(t).mem(1038 - rob(t).Ties(j).last) = rob(rob(t).Ties(j).pnt).mem(1038 - rob(t).Ties(j).last)
End If
End If
End If
It's in "Linklen"
-
That could explain part of my problem... I think I commented linklen out and rewrote it.
*Cracks knuckles* Let's see about that racial memory working again then.