Welcome To Darwinbots > Newbie

Eyes

<< < (2/2)

Welwordion:
I have something that might help, I tried to complete it to a full one store gene but for some unknown reasons its always gets messed up


--- Code: ---*.eye1 *.eye2 add 2 div dup *.eye2 sub abs add
*.eye3 add 2 div dup *.eye2 sub abs add
*.eye4 add 2 div dup *.eye4 sub abs add
*.eye5 add 2 div dup *.eye5 sub abs add
*.eye6 add 2 div dup *.eye6 sub abs add
*.eye7 add 2 div dup *.eye7 sub abs add
*.eye8 add 2 div dup *.eye8 sub abs add
*.eye9 add 2 div dup *.eye9 sub abs add
--- End code ---

It calculates the highest eyevalue its alittle math trick
I tried to complete it with


--- Code: ---dup *.eye9 sub sgn abs swapint
dup *.eye8 sub sgn abs swapint
dup *.eye7 sub sgn abs swapint
dup *.eye6 sub sgn abs swapint
dup *.eye5 sub sgn abs swapint
dup *.eye4 sub sgn abs swapint
dup *.eye3 sub sgn abs swapint
dup *.eye2 sub sgn abs swapint
*.eye1 sub sgn abs

1 add
mult 1 add mult 1 add mult 1 add mult 1 add
mult 1 add mult 1 add mult 1 add mult 1 add
5 sub - .focuseye store
--- End code ---

or

[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']dup
*.eye1 =
-4 swapint
dropbool

dup
*.eye2 =
-3 swapint
dropbool

dup
*.eye3 =
-2 swapint
dropbool

dup
*.eye4 =
-1 swapint
dropbool

dup
*.eye5 =
0 swapint
dropbool

dup
*.eye6 =
1 swapint
dropbool

dup
*.eye7 =
2 swapint
dropbool

dup
*.eye8 =
3 swapint
dropbool


dup
*.eye9 =
4 swapint
dropbool

swapint

.focuseye store

and some stuff more and like I said the code always seemed to be bugged in a way

Moonfisher:
The only problem with taking the eye with the greatest value is that if you turn and see a friend, then turn to see another friend... then you'll turn back to see the first friend again asf asf....
Basicaly you need memmory for that to work, making the whole process more complex...

Best solution I found so far is just to offset all eyes to one side, then turn to the eye closest to the focus eye that sees something... so the bot always turns in the same direction.

Here's the fixed and more cost effective eyes I was planning on using for the new version of spinner... if I ever get around to making it (Something always comes up, starting to think I'll never get time to build it)...
Just cut out the parts one would need to use the eyes effectively... ofcourse the conditions for turning and all that should just be your own, this is just a basic example of using them.

To adjust this to your needs the only thing you need to do is change the constants to the values you like, the current setup just spreads out the eyes evenly with eye9 as the focus eye in the center (where eye5 used to be). Then it turns to the closest eye with something in it... so you don't need to remember anything, and in just 9 cycles you'll have checked out everything around you...
And ofcourse change the conditions for when you want to set up what eyes and when you want to turn (conspec and all that).
You can also have different setups, just add some constants and a gene that triggers changes in the eyes. It shouldn't matter how you change the constants, the eyes should keep working.


[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']'------------------ vars
def seteyes 50
def seteyewidth 51
def seteyespace 52
def setoffset 53

'-------------------- constants
def spineyewidth 0 'if you want wider eyes just set the value here, I prefer the default.
def spineyespace 105
def spinoffset 140
def eyedist 35

cond
*.robage 0 =
start
.seteyes inc
.spineyespace .seteyespace store
.spinoffset .setoffset store
.spineyewidth .seteyewidth store
stop

cond
*.seteyes 1 =
start
*.setoffset .eye9dir store
*.setoffset *.seteyespace add .eye8dir store
*.setoffset *.seteyespace 2 mult add .eye7dir store
*.setoffset *.seteyespace 3 mult add .eye6dir store
*.setoffset *.seteyespace 4 mult add .eye5dir store
*.setoffset *.seteyespace 5 mult add .eye4dir store
*.setoffset *.seteyespace 6 mult add .eye3dir store
*.setoffset *.seteyespace 7 mult add .eye2dir store
*.setoffset *.seteyespace 8 mult add .eye1dir store
4 .focuseye store
0 .seteyes store

*.seteyewidth 0 !=
*.seteyewidth .eye9width store
*.seteyewidth .eye7width store
*.seteyewidth .eye5width store
*.seteyewidth .eye3width store
*.seteyewidth .eye1width store
*.seteyewidth .eye8width store
*.seteyewidth .eye6width store
*.seteyewidth .eye4width store
*.seteyewidth .eye2width store
0 .seteyewidth store
stop

cond
*.eyef 0 =
*.refeye *.myeye =
*.refshoot *.myshoot = and or
*.eye1 *.eye2 add *.eye3 add *.eye4 add *.eye5 add *.eye6 add *.eye7 add *.eye8 add *.eye9 add abs 0 > and
start
*.aim *.eye1dir add .eyedist 4 mult add
1 500 2 add * abs sgn sub mult
*.aim *.eye2dir add .eyedist 3 mult add
1 500 3 add * abs sgn sub mult
*.aim *.eye3dir add .eyedist 2 mult add
1 500 4 add * abs sgn sub mult
*.aim *.eye4dir add .eyedist 1 mult add
1 500 5 add * abs sgn sub mult
*.aim *.eye5dir add .eyedist 0 mult sub
1 500 6 add * abs sgn sub mult
*.aim *.eye6dir add .eyedist 1 mult sub
1 500 7 add * abs sgn sub mult
*.aim *.eye7dir add .eyedist 2 mult sub
1 500 8 add * abs sgn sub mult
*.aim *.eye8dir add .eyedist 3 mult sub
.setaim store
stop

bacillus:

--- Code: ----4 *.eye1 sgn mult *.eye2 sgn -- abs mult *.eye3 sgn -- abs mult *.eye4 sgn -- abs mult *.eye5 sgn -- abs mult
*.eye6 sgn -- abs mult *.eye7 sgn -- abs mult *.eye8 sgn -- abs mult *.eye9 sgn -- abs mult 4 *.eye9 sgn mult *.eye2 sgn
-- abs mult *.eye3 sgn -- abs mult *.eye4 sgn -- abs mult *.eye5 sgn -- abs mult *.eye6 sgn -- abs mult *.eye7 sgn --
abs mult *.eye8 sgn -- abs mult add -3 *.eye2 sgn mult *.eye3 sgn -- abs mult *.eye4 sgn -- abs mult *.eye5 sgn -- abs
mult *.eye6 sgn -- abs mult *.eye7 sgn -- abs mult *.eye8 sgn -- abs mult add 3 *.eye8 sgn mult *.eye3 sgn -- abs mult
*.eye4 sgn -- abs mult *.eye5 sgn -- abs mult *.eye6 sgn -- abs mult *.eye7 sgn -- abs mult add -2 *.eye3 sgn mult
*.eye4 sgn -- abs mult *.eye5 sgn -- abs mult *.eye6 sgn -- abs mult *.eye7 sgn -- abs mult add 2 *.eye7 sgn mult
*.eye4 sgn -- abs mult *.eye5 sgn -- abs mult *.eye6 sgn -- abs mult add -1 *.eye4 sgn mult *.eye5 sgn -- abs mult
*.eye6 sgn -- abs mult add 1 *.eye6 sgn mult *.eye5 sgn -- abs mult add 0 *.eye5 sgn mult add .focuseye
store
--- End code ---
This is a slightly "simplified" version, which sorts eyes in a priority, depending on which eye closest to eye5 returns data.
Yes, we are just showing off now  

Moonfisher:
Ok sorry didn't test the new eyes... they don't work... fixed it now.
I know I know... I should know better than just posting untested code... thought it worked


--- Code: ---'------------------ vars
def seteyes 50
def seteyewidth 51
def seteyespace 52
def setoffset 53

'-------------------- constants
def spineyewidth 0 'if you want wider eyes just set the value here, I prefer the default.
def spineyespace 105
def spinoffset 140
def eyedist 35

cond
*.robage 0 =
start
.seteyes inc
.spineyespace .seteyespace store
.spinoffset .setoffset store
.spineyewidth .seteyewidth store
stop

cond
*.seteyes 1 =
start
*.setoffset .eye9dir store
*.setoffset *.seteyespace add .eye8dir store
*.setoffset *.seteyespace 2 mult add .eye7dir store
*.setoffset *.seteyespace 3 mult add .eye6dir store
*.setoffset *.seteyespace 4 mult add .eye5dir store
*.setoffset *.seteyespace 5 mult add .eye4dir store
*.setoffset *.seteyespace 6 mult add .eye3dir store
*.setoffset *.seteyespace 7 mult add .eye2dir store
*.setoffset *.seteyespace 8 mult add .eye1dir store
4 .focuseye store
0 .seteyes store

*.seteyewidth 0 !=
*.seteyewidth .eye9width store
*.seteyewidth .eye7width store
*.seteyewidth .eye5width store
*.seteyewidth .eye3width store
*.seteyewidth .eye1width store
*.seteyewidth .eye8width store
*.seteyewidth .eye6width store
*.seteyewidth .eye4width store
*.seteyewidth .eye2width store
0 .seteyewidth store
stop

cond
*.eyef 0 =
*.refeye *.myeye =
*.refshoot *.myshoot = and or
*.eye1 *.eye2 add *.eye3 add *.eye4 add *.eye5 add *.eye6 add *.eye7 add *.eye8 add *.eye9 add abs 0 > and
start
*.aim *.eye1dir add .eyedist 4 mult add
1 500 2 add * abs sgn sub mult
*.aim *.eye2dir add .eyedist 3 mult add
500 2 add * abs sgn mult add
1 500 3 add * abs sgn sub mult
*.aim *.eye3dir add .eyedist 2 mult add
500 3 add * abs sgn mult add
1 500 4 add * abs sgn sub mult
*.aim *.eye4dir add .eyedist 1 mult add
500 4 add * abs sgn mult add
1 500 5 add * abs sgn sub mult
*.aim *.eye5dir add .eyedist 0 mult sub
500 5 add * abs sgn mult add
1 500 6 add * abs sgn sub mult
*.aim *.eye6dir add .eyedist 1 mult sub
500 6 add * abs sgn mult add
1 500 7 add * abs sgn sub mult
*.aim *.eye7dir add .eyedist 2 mult sub
500 7 add * abs sgn mult add
1 500 8 add * abs sgn sub mult
*.aim *.eye8dir add .eyedist 3 mult sub
500 8 add * abs sgn mult add
.setaim store
stop

--- End code ---

Navigation

[0] Message Index

[*] Previous page

Go to full version