Author Topic: Best thing ever  (Read 20279 times)

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #30 on: July 02, 2012, 02:41:11 PM »
Have the shooting and following gene make sure that it's old enough. That would still let them attack each other in the future.

Maybe for not attack children and parents ever, have them pass down a code.

Have them make a code and put it in 971 (Racial memory)
Code: [Select]
cond
*971 0 =
start
32000 rnd 971 store
stop

Broadcast the code
Code: [Select]
cond
*971 *.out1 !=
start
*971 .out1 store
stop

Then have them check to see if others have that code and if they do, don't shoot or follow.
Code: [Select]
cond
*.eye5 40 >
*.in1 *971 !=
start
'Shoot
stop

That should keep them from killing their children and mom's.

You can probably also use memval and memloc, but I don't have experience with those.

Wow! Thank you! Testing it out, it seems that this causes the bots not to attack anyone with shared parentage, not just the last or next generation. This makes one "family" take over and stop cannibalizing. Any thoughts? Is there a way to say "971++?"
« Last Edit: July 02, 2012, 02:43:59 PM by southpointingchariot »

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #31 on: July 02, 2012, 03:29:53 PM »
Ya I figured.

You could have the code randomly change, that will have the families become a random size.

Code: [Select]
cond
32000 rnd 1 =
start
32000 rnd 971 store
stop

For a lower chance you could put this as the cond:
Code: [Select]
cond
32000 rnd 10000 rnd mult 1 =
That^ takes a random number and multiplies it by another random number and it has to equal one.

Another way might be to have 971 increase (or decrease (dec)) every generation, then if 971 is too high its treated as an enemy.
Code: [Select]
cond
*.robage 1 =
start
971 inc
stop
Take the difference then the absolute value to see if it's close to the family number.
Code: [Select]
cond
*.in1 *971 sub abs 2 >
start
'Shoot
stop

See if that works. For the second option, the 2 controls how many generations are friends. I think 2 would be grand, parent, and child.

Also, if you have the number increase every generation there is a small chance it will reach the limit of 32000 so either make the code with a smaller number i.e. 10000 rnd.
Or make it negative i.e. 32000 rnd - 971 store ( "123 -" makes it -123)
« Last Edit: July 02, 2012, 03:51:39 PM by Tilthanseco »
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #32 on: July 02, 2012, 04:09:25 PM »
Ya I figured.

You could have the code randomly change, that will have the families become a random size.

Code: [Select]
cond
32000 rnd 1 =
start
32000 rnd 971 store
stop

For a lower chance you could put this as the cond:
Code: [Select]
cond
32000 rnd 10000 rnd mult 1 =
That^ takes a random number and multiplies it by another random number and it has to equal one.

Another way might be to have 971 increase (or decrease (dec)) every generation, then if 971 is too high its treated as an enemy.
Code: [Select]
cond
*.robage 1 =
start
971 inc
stop
Take the difference then the absolute value to see if it's close to the family number.
Code: [Select]
cond
*.in1 *971 sub abs 2 >
start
'Shoot
stop

See if that works. For the second option, the 2 controls how many generations are friends. I think 2 would be grand, parent, and child.

Also, if you have the number increase every generation there is a small chance it will reach the limit of 32000 so either make the code with a smaller number i.e. 10000 rnd.
Or make it negative i.e. 32000 rnd - 971 store ( "123 -" makes it -123)

Your second option sounds perfect - now I just have to figure out how to attach it my code ;). Here's what I have:
Code: [Select]
'Taxxon
'By: southpointingchariot
'Eat each other, yo.

' Gene 1 Food Finder
cond
 *.eye5 -10 >
 start
 *.refveldx .dx store
 *.refvelup 30 add .up store
 stop

' Gene 2 Eat Food
cond
 *.eye5 50 >
 *.in1 *971 sub abs 2 >
 start
 -1 .shoot store
 *.refvelup .up store
 stop

' Gene 3 Avoiding Family
cond
 *.eye5 50 >
 *.in1 *971 sub abs 2 <
 start
 314 rnd .aimright store
 stop

 'Am I Fertilized
cond
*.fertilized 0 >
start
' Display my fertilize status
*.fertilized .out2 store
stop
 
'Sperm shooter
cond
*.eye5 50 >
*.refeye *.myeye =
*.in1 *971 sub abs 2 >
start
-8 .shoot store
stop

'Sexual Reproduction
cond
*.fertilized 0 >
*.nrg 29999 >
start
50 .sexrepro store
stop

'Reproduction
 cond
 *.nrg 30000 >
 start
 50 .repro store
 stop
 
cond
*.robage 1 =
start
971 inc
stop

'Here's who I am
cond
*971 *.out1 !=
start
*971 .out1 store
stop

But unfortunately, it seems to lead to them not eating anything.
« Last Edit: July 02, 2012, 06:15:37 PM by southpointingchariot »

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #33 on: July 02, 2012, 08:41:43 PM »
First, I found that they start off thinking plants are friends because their 971 is only 1. I would add back in a code generator.
Code: [Select]
cond
*971 0 =
start
10000 rnd 971 store
' 4 971 store
'or ^that^ if you want them not to eat each other in the beginning

stop

Second, they don't kill each other because all they do is sperm each other to death. I would add a limiter on sperm, easyest to me is
Code: [Select]
cond
*.eye5 50 >
*.refeye *.myeye =
*.in1 *971 sub abs 2 >
'Now it only shoots roughly every 25 shots
25 rnd 1 =
start
-8 .shoot store
stop

Third, if you want them to sexrepro, I would space out the conditions, right now it says it needs 29,999 for sex and only 30,000 for repro. I tested it and they will randomly pick either one when it is fertilized. Which leaves a very unlikely chance of sexrepro. I would change it to 20 or 25 thousand.
« Last Edit: July 02, 2012, 08:44:10 PM by Tilthanseco »
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #34 on: July 02, 2012, 09:55:15 PM »
First, I found that they start off thinking plants are friends because their 971 is only 1. I would add back in a code generator.
Code: [Select]
cond
*971 0 =
start
10000 rnd 971 store
' 4 971 store
'or ^that^ if you want them not to eat each other in the beginning

stop

Second, they don't kill each other because all they do is sperm each other to death. I would add a limiter on sperm, easyest to me is
Code: [Select]
cond
*.eye5 50 >
*.refeye *.myeye =
*.in1 *971 sub abs 2 >
'Now it only shoots roughly every 25 shots
25 rnd 1 =
start
-8 .shoot store
stop

Third, if you want them to sexrepro, I would space out the conditions, right now it says it needs 29,999 for sex and only 30,000 for repro. I tested it and they will randomly pick either one when it is fertilized. Which leaves a very unlikely chance of sexrepro. I would change it to 20 or 25 thousand.

I think the problem is that a generational protection is to strong. I turned of the sperm shooter and they still were not attacking eachother enough. The goal was to make it so they only didn't attack their mother or child - it seems they aren't attacking anyone roughly their own age. I've cleaned things up a little - here's what I have:
Code: [Select]
'Taxxon
'By: southpointingchariot
'Eat each other, yo.

'Hunting

'Food Finder
cond
 *.eye5 -10 >
 *.in1 *971 sub abs 1 >
 start
 *.refveldx .dx store
 *.refvelup 30 add .up store
 stop

'Eat Food
cond
 *.eye5 50 >
 *.in1 *971 sub abs 1 >
 start
 -1 .shoot store
 *.refvelup .up store
 stop

'Turn around
cond
 *.eye5 0 =
 *.in1 *971 sub abs 1 <
start
 314 rnd .aimdx store
stop

'Generation

'Who Am I?
cond
*971 0 =
start
10000 rnd 971 store
stop

'Here's who I am
cond
*971 *.out1 !=
start
*971 .out1 store
stop

'Reproduction

'Am I Fertilized?
cond
*.fertilized 0 >
start
*.fertilized .out2 store
stop
 
'Sperm shooter
'cond
'*.eye5 50 >
'*.refeye *.myeye =
'*.in1 *971 sub abs 2 >
'*.in2 0 =
'start
'-8 .shoot store
'stop

'Sexual Reproduction
cond
*.fertilized 0 >
*.nrg 25000 >
start
50 .sexrepro store
stop

'Reproduction
 cond
 *.nrg 30000 >
 start
 50 .repro store
 stop

Here's one way I would do it it a much more more liberal system - not sure if it's possible here:

Each bot has 4 variables:

A. Personal identifier.
B. The identifier it will give to its next child.
C. The identifier it's parent had.
D. The "no shoot" array.

At Birth:
Add C to D

During Reproduction:
Add B to D
Tell new child to make A it's C
Randomly determine a new B

« Last Edit: July 03, 2012, 12:03:09 AM by southpointingchariot »

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #35 on: July 03, 2012, 12:01:53 AM »
Quote
Code: [Select]
'Turn around
cond
 *.eye5 0 =
 *.in1 *971 sub abs 1 <
start
 314 rnd .aimdx store
stop
I would change the eye5 0 = to 0 >
and the  abs 1 < to  abs 1 =

That way its when it sees a conspec and includes 1 difference. With those changes the bots don't sit and stare.

Also, the sperm shooter works with what you have.

The generation protection strength was fixed with the code generator for me.

It's funny that this bot is getting such sophisticated cannibalism and sex genes when it doesn't even know how to aim. ("*.refxpos *.refypos angle .setaim store" would work)
Although adding aiming would greatly increase the number of deaths by cannibalism...
« Last Edit: July 03, 2012, 12:06:39 AM by Tilthanseco »
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #36 on: July 03, 2012, 12:16:01 AM »
Quote
Code: [Select]
'Turn around
cond
 *.eye5 0 =
 *.in1 *971 sub abs 1 <
start
 314 rnd .aimdx store
stop
I would change the eye5 0 = to 0 >
and the  abs 1 < to  abs 1 =

That way its when it sees a conspec and includes 1 difference. With those changes the bots don't sit and stare.

Also, the sperm shooter works with what you have.

The generation protection strength was fixed with the code generator for me.

It's funny that this bot is getting such sophisticated cannibalism and sex genes when it doesn't even know how to aim. ("*.refxpos *.refypos angle .setaim store" would work)
Although adding aiming would greatly increase the number of deaths by cannibalism...

This is very strange - making the changes I think you're suggesting, the bots just stare at eachother. Here's what I have:
Code: [Select]
'Taxxon
'By: southpointingchariot
'Eat each other, yo.

'Hunting

'Food Finder
cond
 *.eye5 -10 >
 *.in1 *971 sub abs 1 >
 start
 *.refveldx .dx store
 *.refvelup 30 add .up store
 stop

'Eat Food
cond
 *.eye5 50 >
 *.in1 *971 sub abs 1 >
 start
 -1 .shoot store
 *.refvelup .up store
 stop

'Turn around
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
start
 314 rnd .aimdx store
stop

'Generation

'Who Am I?
cond
*971 0 =
start
10000 rnd 971 store
stop

'Here's who I am
cond
*971 *.out1 !=
start
*971 .out1 store
stop

'Reproduction

'Am I Fertilized?
cond
*.fertilized 0 >
start
*.fertilized .out2 store
stop
 
Sperm shooter
cond
*.eye5 50 >
*.refeye *.myeye =
*.in1 *971 sub abs 2 >
*.in2 0 =
start
-8 .shoot store
stop

'Sexual Reproduction
cond
*.fertilized 0 >
*.nrg 25000 >
start
50 .sexrepro store
stop

'Reproduction
 cond
 *.nrg 30000 >
 start
 50 .repro store
 stop

I'm certainly open to suggestions for other things - I don't really understand a lot (obviously), and my goal is to get the basics of reproduction and generation control working and then start evo-simming and making small changes as I understand things. If you want to suggest any coding layout, I certainly wouldn't complain (it might help me stop coming back over and over again if there was a way to have each bit of code explained how it actually works, as I don't really understand what's happening for much of it - but I'm guessing there isn't a "stack to english" translator program out there ;) . I'm still not totally sure what "*" means). 

Is there any way to utilize the type of methodology I outlined in my earlier post? I could write in javascript, but feel quite lost here.

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #37 on: July 03, 2012, 02:34:18 AM »
It's ok, I like helping.

I found the new problem, 971 wasn't increasing with each generation. That should fix it.
Code: [Select]
cond
*.robage 1 =
start
971 inc
stop
I didn't even see this...

Here's one way I would do it it a much more more liberal system - not sure if it's possible here:

Each bot has 4 variables:

A. Personal identifier.
B. The identifier it will give to its next child.
C. The identifier it's parent had.
D. The "no shoot" array.

At Birth:
Add C to D

During Reproduction:
Add B to D
Tell new child to make A it's C
Randomly determine a new B
A. Could just have it store a random number in a memory location, 50-150 are the safest "free" memory locations. So just 9999 rnd 50 store
B. Give the child the number so put a number in 971 - 990, 9999 rnd 973 store.
C. Have the parent post its A in another hand-me-down like 974. Or in out3
D. I have no clue how to implement arrays in dna.  :blink: Could just have the offspring code be in a fixed range. Like +- 100 from parent ID.
I think what you have going on now would be far less complicated, we already have it coded anyways...

On a whole different topic... (Tutorial Mode) you can ask me what ever questions you have. Sorry if I confuse you.
Code: [Select]
'You can define custom names for memory locations and you can make constants.
' Just put def followed by a name then memory number to name a location
def count 51
' That names the memory location 51, count
def age 100
' Here I set the constant "age" to 100
' Use custom names like any other sysvar, *.variable .variable
' Only refer to constants by .constant (else you'll get errors with *.constant)
' Example
cond
' When bot age is greater than the constant age(100) (use .age to refer to the 100)
' (*.robage 100 >)
*.robage .age >
start
' Look at the variable count(51) add 3, then store that back into count(51)
' (*51 3 add 51 store)
*.count 3 add .count store
stop

To help with debugging, you can click on a bot and open up it's console, here you can see what genes activate, set the energy, and look at the eyes.
You can also look at the bot's memory by opening the info panel and pressing memory, and looking over the dna in the dna panel will show you if you make a typo by usually saying "0" instead of ".aimdx" ect. You can also move bots around in the sim window.

For coding, I have found that looking at other non-complex and preferably commented bot code helps. Also, commenting someone else's bot dna is a good way to see how things work.
Try figuring out how "SexBot" by d-EVO works. http://forum.darwinbots.com/index.php/topic,3037.0.html

In bot dna, the bot's controls and senses are operated by referring to 1000 memory addresses. Storing a number in one makes the bot do something.
The * tells the dna what is currently in that memory address. The words on the sysvar page are just for us humans. Saying .up means use memory location 7.
Saying *.up says look at what is in memory location 7. That's why we use *.eye5, it says "what does eye 5 see" Which is technically "what's in memory location 505"

The stack is really crazy to me also. For some reason, numbers in dna get put in a pile that is worked on and stays there till the cycle ends.
"5 5 5 add store" would put three 5's on the stack, then add the last two numbers on the stack (the second and third 5), then store the first number on the stack (the first 5) in the result of 10. It's the same as:
5 10 store

The stack is not confined to just one gene or action either.
Code: [Select]
cond
*.eye1 *.eye9 >
start
mult -145
stop

cond
*.eye9 *.eye1 >
start
mult 145
stop

cond
start
.aimdx store
stop
This code will get rid of previous stuff on the stack with "mult" (I don't know how...) and then place a number. The last gene will use the last number placed and store it in .aimdx.

I would not worry about figuring out how condition-less or single store bots work until you get a feel for the simple stuff.

Condition-less (Less Boo!!) (I made This  :))
Code: [Select]
cond
start
' Ident
123 .out1 store

'Move
2 .up
*.eye5 0 sub sgn abs 1 sub -
*.out1 *.in1 sub sgn abs 1 sub -
add sgn abs mult
store

'See
-140 .aimdx
*.eye1 *.eye9 sub sgn 0 floor mult
store

140 .aimdx
*.eye9 *.eye1 sub sgn 0 floor mult
store

-15 .aimdx
*.eye4 *.eye6 sub sgn 0 floor mult
store

15 .aimdx
*.eye6 *.eye4 sub sgn 0 floor mult
store

' Follow
*.refvelup 20 add .up
*.eye5 0 sub sgn 0 floor mult
*.out1 *.in1 sub sgn abs mult
store
*.refveldx .dx
*.eye5 0 sub sgn 0 floor mult
*.out1 *.in1 sub sgn abs mult
store

'Shoot
-1 .shoot
*.eye5 40 sub sgn 0 floor mult
*.out1 *.in1 sub sgn abs mult
store
*.refvelup .up
*.eye5 40 sub sgn 0 floor mult
*.out1 *.in1 sub sgn abs mult
store
0 .aimdx
*.eye5 40 sub sgn 0 floor mult
*.out1 *.in1 sub sgn abs mult
store

'Conspec
*.refaim .setaim
*.out1 *.in1 sub sgn abs 1 sub - mult
store

'Repro
30 .repro
*.nrg 10000 sub sgn 0 floor mult
store
stop
end

Single Store (Boo!!) Viewer's Discretion is Advised!
Quote from: happyhamsterchan
Code: [Select]
start
 *.tiepres *.numties sgn mult 100 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor -- abs mult add 628 rnd *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor *.eye5 30 sub sgn 0 floor mult *.eye5 sgn *.myeye *.refeye sub sgn abs -- abs mult add sgn mult add 40 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor mult *.eye5 30 sub sgn 0 floor -- abs mult add -6 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub abs 0 floor -- abs mult *.myeye *.refeye sub sgn abs mult *.eye5 40 sub sgn 0 floor mult add -60 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.eye5 sgn -- abs mult *.eye9 sgn mult add 40 *.vel sub *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.eye5 sgn -- abs mult *.eye9 sgn -- abs mult add 50 *.eye5 sub 0 floor over *.vel sub *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.myeye *.refeye sub sgn abs mult *.eye5 sgn abs mult *.eye5 40 sub sgn 0 floor -- abs mult add 467 *.numties sgn mult 313 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor -- abs mult add 5 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor *.eye5 30 sub sgn 0 floor mult *.eye5 sgn *.myeye *.refeye sub sgn abs -- abs mult add sgn mult add 300 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor mult *.eye5 30 sub sgn 0 floor -- abs mult add 7 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.myeye *.refeye sub sgn abs mult *.eye5 40 sub sgn 0 floor mult add 6 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.eye5 sgn -- abs mult *.eye9 sgn mult add 1 *.numties sgn -- abs mult *.body 50 sub sgn 0 floor mult *.nrg 2000 sub sgn 0 floor -- abs mult *.eye5 sgn -- abs *.eye9 sgn -- abs mult *.myeye *.refeye sub sgn abs *.eye5 sgn abs mult *.eye5 40 sub sgn 0 floor -- abs mult add sgn mult add store
 stop
:puke:
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #38 on: July 03, 2012, 09:44:43 AM »
I found the new problem, 971 wasn't increasing with each generation. That should fix it.
Code: [Select]
cond
*.robage 1 =
start
971 inc
stop
That seems to be working somewhat better - bots still sometimes stare at each other until something runs by them. Exactly who will the bots not  attack in this system? Is it everyone of the same age?

Quote
I think what you have going on now would be far less complicated, we already have it coded anyways...
Gotya, that makes sense. I'm just trying to make sure there's sufficient cannibalism, without bots just circling around their immediate children. The goal is cross-pollinated violence ;). This is key to my system (I don't insert veggies when their population is low, they and the taxxons have to find a sustainable level). The real goal is an evo-sim that's as full featured and realistic as possible, while keeping population totals low enough to minimize slow down.

One interesting thing I've noticed is that perhaps the most effective mutation is bots lying about whether they've been fertilized. This makes other bots think they're not fertile, and sperm them over and over while they're being eaten. I've also had a case where a taxxon mutated to the point where it would fertilize a rolling moss, and the moss mutated where it woudl sexrepro, thus creating a carnivorous mobile veggy! Or maybe they just spermed them by accident?

Quote
On a whole different topic... (Tutorial Mode) you can ask me what ever questions you have.
Yay tutorial mode

Quote
Code: [Select]
'You can define custom names for memory locations and you can make constants.
' Just put def followed by a name then memory number to name a location
def count 51
' That names the memory location 51, count
def age 100
' Here I set the constant "age" to 100
[/quote]
Are constants stored in memory somewhere or are they just nice and free?

[quote]
' Example
cond
' When bot age is greater than the constant age(100) (use .age to refer to the 100)
' (*.robage 100 >)
*.robage .age >
start
' Look at the variable count(51) add 3, then store that back into count(51)
' (*51 3 add 51 store)
*.count 3 add .count store
stop
So this means after 100 cycles from the bot's birth, every cycle, add 3 to count?
Quote
To help with debugging, you can click on a bot and open up it's console, here you can see what genes activate, set the energy, and look at the eyes.
You can also look at the bot's memory by opening the info panel and pressing memory, and looking over the dna in the dna panel will show you if you make a typo by usually saying "0" instead of ".aimdx" ect. You can also move bots around in the sim window.
I hadn't looked at the console - this means its good to spread out your dna across genes so you can see what happens when right?

Quote
For coding, I have found that looking at other non-complex and preferably commented bot code helps. Also, commenting someone else's bot dna is a good way to see how things work.
Try figuring out how "SexBot" by d-EVO works. http://forum.darwinbots.com/index.php/topic,3037.0.html
Thanks for the tip - I'm trying to find understandable bots. I'll look over that in detail at some point, looks actually comprehensible, and gives me a good reason to look up sysvars :). Right now I'm confused with
Code: [Select]
cond
 *.x 1 =
 *.eye5 0 >
 *.in1 1 =
start
 *.refveldx .dx store
 *.eye5 50 =>
 *.refvelup .up store
 -6 .shoot store
 dropbool
 *.eye5 50 <
 *.refvelup 30 add .up store
 dropbool
stop
Is this like gifting some body to another female?

Quote
In bot dna, the bot's controls and senses are operated by referring to 1000 memory addresses. Storing a number in one makes the bot do something.
The * tells the dna what is currently in that memory address. The words on the sysvar page are just for us humans. Saying .up means use memory location 7.
Saying *.up says look at what is in memory location 7. That's why we use *.eye5, it says "what does eye 5 see" Which is technically "what's in memory location 505"
Ahhhh, thank you so much.

Quote
The stack is really crazy to me also. For some reason, numbers in dna get put in a pile that is worked on and stays there till the cycle ends.
"5 5 5 add store" would put three 5's on the stack, then add the last two numbers on the stack (the second and third 5), then store the first number on the stack (the first 5) in the result of 10. It's the same as:
5 10 store

The stack is not confined to just one gene or action either.
Code: [Select]
cond
*.eye1 *.eye9 >
start
mult -145
stop

cond
*.eye9 *.eye1 >
start
mult 145
stop

cond
start
.aimdx store
stop
This code will get rid of previous stuff on the stack with "mult" (I don't know how...) and then place a number. The last gene will use the last number placed and store it in .aimdx.
I wonder if I should find a tutorial for FORTH or some other stack language.

Thank you so much, please keep the advice coming! I need all the instruction I can find, and I'm working on finding the next thing to improve. I think I'd like to get bots to better handle objects - they seem to just look at them and stand still indefinitely, adding unnecessary population and not eating or hunting anything.
« Last Edit: July 03, 2012, 02:40:35 PM by southpointingchariot »

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #39 on: July 03, 2012, 06:00:28 PM »
Quote
I think I'd like to get bots to better handle objects
Ya, in evo sims I like to put an object in hoping they will eventually figure out what to do with it.
In some of my sims, the object would move, grouping veggies in a pile, then the bots would plow through them, eating all they could get.

If you want them aware of objects, .refnrg can be used (objects and corpses have no energy), or .reftype (0 for bots, 1 for objects)

Quote
bots still sometimes stare at each other until something runs by them. Exactly who will the bots not  attack in this system? Is it everyone of the same age?
If you have mutations on, the cannibalism code may be breaking. Like I said in the beginning this is simple and would probably last a long time, though they would eat each other when they were old enough.
Code: [Select]
cond
start
*.robage 100 <
-20 .up store
0 .shoot store
dropbool
'This drops the last condition in the gene, I didn't feel like making two genes, so here is one with two conditions
*.refage 100 < *.eye5 0 > and
0 .shoot store
314 .aimdx store
stop
or
Code: [Select]
cond
*.robage 100 <
start
-20 .up store
0 .shoot store
stop

cond
*.refage 100 <
*.eye5 0 >
start
0 .shoot store
314 .aimdx store
stop

Quote
So this means after 100 cycles from the bot's birth, every cycle, add 3 to count?
Yep. (idk why I called it count...)
Quote
this means its good to spread out your dna across genes so you can see what happens when right?
Yep, when I make any bots, the best way to see if it is working right is to look at how the genes turn on and work together, a even better way to see gene activations is to click "show activations" in the info panel, that keeps a small visual history of the genes.

Quote
Code: [Select]
start
 *.refveldx .dx store
 *.eye5 50 =>
 *.refvelup .up store
 -6 .shoot store
 dropbool
 *.eye5 50 <
 *.refvelup 30 add .up store
 dropbool
stop

Is this like gifting some body to another female?
No, that is a generic attack gene using inline conditions, the -6 .shoot is a different shot type. -1 makes the attacked bot give mainly nrg back from it's nrg pool, -6 makes the attacked bot give mainly nrg back from it's body pool.
The attacking bot gets 95% nrg, 4% body, and 1% waste from either method I remember.
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #40 on: July 03, 2012, 08:42:36 PM »
Quote
I think I'd like to get bots to better handle objects
Ya, in evo sims I like to put an object in hoping they will eventually figure out what to do with it.
In some of my sims, the object would move, grouping veggies in a pile, then the bots would plow through them, eating all they could get.

If you want them aware of objects, .refnrg can be used (objects and corpses have no energy), or .reftype (0 for bots, 1 for objects)
Would adding putting in a condition like
Code: [Select]
'Turn around
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
 *reftype 1 =
start
 314 rnd .aimdx store
stop
work?

Quote
Code: [Select]
cond
start
*.robage 100 <
-20 .up store
0 .shoot store
dropbool
'This drops the last condition in the gene, I didn't feel like making two genes, so here is one with two conditions
*.refage 100 < *.eye5 0 > and
0 .shoot store
314 .aimdx store
stop
or
Code: [Select]
cond
*.robage 100 <
start
-20 .up store
0 .shoot store
stop

cond
*.refage 100 <
*.eye5 0 >
start
0 .shoot store
314 .aimdx store
stop
Er, what would this code do? Who is protected from attack currently?

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #41 on: July 03, 2012, 09:29:10 PM »
Code: [Select]
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
 *reftype 1 =
No, what you have has to meet all three conditions, can see check, is related check, is a block huh?. You should put an "or" after *.reftype 1 =
Code: [Select]
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
 *.reftype 1 = or
That way it is either related or is a block.
Quote
Er, what would this code do? Who is protected from attack currently?
It just makes it so bots can't kill each other when they are A. not old enough or B. the food is too young
Currently you have it setup where a bot doesn't kill its children or parent, but that code is too complex to last 100% in a mutation sim. So expect it to break in a few generations.
I was just offering a solution to:
Quote
That seems to be working somewhat better - bots still sometimes stare at each other until something runs by them.
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #42 on: July 03, 2012, 09:40:00 PM »
Code: [Select]
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
 *reftype 1 =
No, what you have has to meet all three conditions, can see check, is related check, is a block huh?. You should put an "or" after *.reftype 1 =
Code: [Select]
cond
 *.eye5 0 >
 *.in1 *971 sub abs 1 =
 *.reftype 1 = or
That way it is either related or is a block.
Ah, thank you. Is the range (whatever you would call that first condition) a good construction?

Quote
I was just offering a solution to:
Quote
That seems to be working somewhat better - bots still sometimes stare at each other until something runs by them.
I see - this seem to be happening some at the very beginning, not after mutation. I very much like the "mother or daughter" protection :). Fortunately, this seems to work well with mutation :). You mentioned there might be a better aiming structure - any suggestions? Is there a way to make the bots know if they're being injured? I notice sometimes bots are being eaten as they go through open space and just sort of ignorantly amble on until they die.

Is there a way for a bot to check if a target is receiving photosynthesis? I'm still having problems with mutations allowing sex with vegetables, which of course then wipe out all the taxxons.

Do you think any of our improvements or other changes should be made to the rolling moss? I'd like to have it sexually reproduce as well - I guess it needs to pursue a mate? Here's its code:
Code: [Select]
' Rolling Moss
' by: southpointingchariot
' Vegetable
'
' A scared plant

'Mate Finder
cond
 *.eye5 -10 >
 *.in1 0 =
 start
 *.refveldx .dx store
 *.refvelup 10 add .up store
 stop

'Sperm shooter
cond
*.eye5 50 >
*.refeye *.myeye =
*.in1 0 =
start
-8 .shoot store
stop

'Sexual Reproduction
cond
*.fertilized 0 >
*.nrg 20000 >
start
50 .sexrepro store
stop

Mitosis
cond
 *.nrg  30000  >
start
 50  .repro  store
 15  .aimdx  store
stop

'Run away
cond
 *.eye5 0 >
start
 *.refveldx .dx store
 *.refvelup -10 add .up store
stop

end
« Last Edit: July 03, 2012, 11:16:47 PM by southpointingchariot »

Offline Tilthanseco

  • Bot Builder
  • **
  • Posts: 60
    • View Profile
Re: Best thing ever
« Reply #43 on: July 03, 2012, 11:38:56 PM »
*.refxpos *.refyps angle .setaim store
Will have bots point very accurately at another bot.

Plants are hard to ID, if the plant has no eye commands, like alga_minimalis, then you can just *.refeye 0 =; with yours it would be a lot trickier.

You can tell when bots lose or gain nrg  with *.pain and *.pleas. Also, bots can tell if they are shot, and the kind, with *.shflav, and the direction with *.shang. I don't know if *.shflav resets so make sure to 0 .shflav store in you gene.
For the above, you have to use the second version linked here: http://forum.darwinbots.com/index.php/topic,1249.msg1384143.html#msg1384143
Code: [Select]
cond
*.shang 0 >
*.shflav -2 !=
*.shflav -8 !=
start
'Reset shflav might not be needed
0 .shflav store
'Ruuuuuuuuun
'Or turn to shoot back
*.shang .aimdx store
stop

For your plant the possibilities are endless. If you want it to be hard to catch you can add the above code, replacing the 'Ruuuun.
Undisputed creator of bot Sonar!

Offline southpointingchariot

  • Bot Neophyte
  • *
  • Posts: 22
    • View Profile
Re: Best thing ever
« Reply #44 on: July 04, 2012, 03:47:10 PM »
*.refxpos *.refyps angle .setaim store
Will have bots point very accurately at another bot.
So my version doesn't seem to be right - I'm not exactly sure how your code works.
Code: [Select]
'Food Finder
cond
 *.eye5 -10 >
 *.in1 *971 sub abs 1 >
 start
*.refxpos *.refyps angle .setaim store
 *.refvelup 30 add .up store
 stop
Quote
Plants are hard to ID, if the plant has no eye commands, like alga_minimalis, then you can just *.refeye 0 =; with yours it would be a lot trickier.
Hmm, we need to figure something out - both are sexual, and having them cross pollinate ruins everything. Maybe just have them broadcast several unique identifiers as failsafes in case one mutates? Perhaps the protections should be added to the sexrepro command as well.
Quote
You can tell when bots lose or gain nrg  with *.pain and *.pleas. Also, bots can tell if they are shot, and the kind, with *.shflav, and the direction with *.shang. I don't know if *.shflav resets so make sure to 0 .shflav store in you gene.
For the above, you have to use the second version linked here: http://forum.darwinbots.com/index.php/topic,1249.msg1384143.html#msg1384143
Code: [Select]
cond
*.shang 0 >
*.shflav -2 !=
*.shflav -8 !=
start
'Reset shflav might not be needed
0 .shflav store
'Ruuuuuuuuun
'Or turn to shoot back
*.shang .aimdx store
stop

For your plant the possibilities are endless. If you want it to be hard to catch you can add the above code, replacing the 'Ruuuun.

So should I just always run that other .exe if I'm to try and use that type of gene?

Also, I notice that as mutation occurs, bots change color. Is there anywhere that this process is detailed?
« Last Edit: July 04, 2012, 09:05:24 PM by southpointingchariot »