Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Tilthanseco

Pages: 1 2 [3] 4
31
Bot Tavern / Random Bot
« on: August 05, 2012, 12:42:09 AM »
I took the random bot idea and used an internal random number generator instead of "rnd".

This way mutations can still affect the bot very well. I'm running this bot as a alga with a simple bot.

Regular Random Bot 0 to 1000
Code: [Select]
cond
start
1000 rnd 1000 rnd store
stop

Very Simple Internal Generator 0 to 999
Code: [Select]
'Environmental Seed
cond
*.robage 1 =
start
*.xpos *.ypos add 2 div 51 store
stop

'Location Generator
cond
start
*51 125 mult 31991 mod 51 store
*51 1000 mod 52 store
stop

'Value Generator to keep from Looping
cond
*52 51 !=
start
*51 125 mult 31991 mod 51 store *51 1000 mod *52 store
stop
P.S. Making a random number generator is hard... It took me most of the day to make a random enough one that was simple while limited to a state of 32000.
Many tries led to loops of often only 10 numbers.

32
Off Topic / Re: help on smily selection
« on: August 05, 2012, 12:30:27 AM »
???

Yep,  8)


33
Off Topic / Re: Closed loop analogy yet again...
« on: July 18, 2012, 12:13:14 AM »
Not to be a hypocrite but why did you reply to your super old thread?


Very off topic:
Got distracted, sorry (did you know you can get to lvl 60 from lvl 35 in WoW over a weekend?).
Runescape... circa 2007
Muhahahaha

34
Evolution and Internet Sharing Sims / Re: Evobot Stops when Birthing
« on: July 08, 2012, 07:28:27 PM »
Yep, that population slowly died out as the veggies were pushed away.

The stop when giving birth mutation is still going very strong; because of it, the population swings from 100 to 600. (average 200)

I just went on vacation and forgot to stop it, so we'll see if it survives and what happens in a week. (dynamic costs are off)

35
Evolution and Internet Sharing Sims / Re: Evobot Stops when Birthing
« on: July 07, 2012, 01:30:14 AM »
Cool, Thanks

Now half the poor population mutated to not move at all. They're taking advantage of the stagnant veggies and being bumped by movers.
It does let them use half as much nrg/cycle, -3 instead of -6. The population has even doubled. (260 vs 140s)

"77 < store"

36
Evolution and Internet Sharing Sims / Evobot Stops when Birthing
« on: July 06, 2012, 08:08:32 PM »
This bot will stop moving when it wants to repro, this curiously leads to many big berthas in the sim who sit in front of veggies they were eating but can't reach now. (other bots keep pushing veggies in front of them)

The problem I have is that I don't know how the bot is stopping. It has a .up and .shoot command that are always active, but when it wants to .repro, the .up command gets canceled somehow?
Here is the Original:
Code: [Select]
cond
start
100 .up store
-1 .shoot store
stop

cond
*.nrg 20000 >
start
30 .repro store
15 .aimdx store
stop
end
Evolved: 535 Generations, 42 Mutations
Code: [Select]
' Gene:  1
 cond
 start
 77 .up store
 -1 .shoot dec
 stop

'  Gene:  2
 start
 *.nrg 19819 >

' Gene:  3
 start
 42 .repro store
 store
 5 15

' Gene:  4
 cond
 *498 overbool

Is this behavior attributed to storing 0 in -1? "... -1 .shoot dec ... 42 .repro store store"

37
Newbie / Re: Best thing ever
« on: July 05, 2012, 01:35:35 AM »
Happy 4th in U.S

Quote
*.eye5 -10 >
I didn't try it, but I believe you need to set the -10 to 0 or above for the gene to work properly. When it doesn't see something, the gene still turns on atm, with nothing in view, the refxpos/ypos values are zero so the bot will always aim at (0,0) I believe.
*.refxpos *.refypos angle .setaim store just has the bots aim at the coordinates of another bot. {aim at (210,1234)}
Also, I spelled *.refypos wrong, fix that.

Ya, you could have the veggies broadcast a veggie code, but with mutations on, that will most likely break in the future.

For sex, you could have the mom ID the Father before birthing. Have it turn toward the father and evaluate based on criteria. Ex:
Code: [Select]
' Sexrepro Gene with Father Condition
cond
*.refeye *.myeye =
'Father Species Condition^
*.fertilized 7 >
'Only use sperm for 2 cycles, 1 to turn, 1 to ID Father and Birth
*.nrg 10000 >
'Birth condition^
start
30 .sexrepro store
stop

'A shoot sperm gene

'Turn towards Father to ID Gene
cond
*.shang 0 >
*.shflav -8 =
start
0 .shflav store
*.shang .aimdx store
stop

On a different note, the order of genes matters. Ex:
Code: [Select]
cond
*.eye5 50 >
start
50 .up store
stop

cond
*.eye5 0 >
start
30 .up store
stop
In that example, the bot will never use 50 .up store if it sees something in eye5.

Yep, run the fixed exe if you plan on using *.shflav or *.shang

I know that mutations will change bot colors but I don't know how. I do know that bot color is only for human enjoyment and has no affect on bot performance.

38
Newbie / Re: Best thing ever
« 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.

39
Newbie / Re: Best thing ever
« 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.

40
Newbie / Re: Best thing ever
« 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.

41
Newbie / Re: Best thing ever
« 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:

42
Newbie / Re: Best thing ever
« 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...

43
Newbie / Re: Best thing ever
« 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.

44
Newbie / Re: Best thing ever
« 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)

45
Newbie / Re: Best thing ever
« on: July 02, 2012, 01:32:04 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.

Pages: 1 2 [3] 4