Darwinbots Forum

Code center => Darwinbots Program Source Code => Topic started by: Numsgil on September 18, 2005, 03:05:49 PM

Title: 2.4 sooo close
Post by: Numsgil on September 18, 2005, 03:05:49 PM
I finally got some time and sat down at my computer, loaded up on emphetamines, and started programming.  Here's basically what's left before I can release 2.4:

1.  Point mutations are done, but all other mutations aren't.  Point mutations were by far the hardest though.

2.  I need to go back through and double check some functions that might not work right anymore, like delgene and mkvirus.

3.  I have an equation for tie drag, I just need to plug it in and see if it works.  I feel pretty confident it will.

I think that's it.  The point mutations are pretty neat.  I set it really high, and found like 2 dozen bugs that were possible in the DNA language.  Speaking of which, it seems to be incredibly common for mutations to end up producing 2000000000 (the max) on the stack.  I'm not sure what that will mean for evolution.  Theoretically, they'll just learn to not produce such large values all the time.

Once 2.4 is finished, I'll see if I can write a bot that showcases all the new features possible.  I have a feeling you'll all be very impressed.  There are some other changes I'd like to make, but I'll save them for 2.41.
Title: 2.4 sooo close
Post by: Endy on September 18, 2005, 09:32:27 PM
What sort of bugs, just out of curiosity?
Title: 2.4 sooo close
Post by: Numsgil on September 18, 2005, 09:48:56 PM
Things like pow and finddist were overflowing.  I don't think older bots could even evolve them, so it wasn't so much of a problem.

I just finished Delta Mutations (the mutation of mutation rates).  Just have to get to the other 5 now.
Title: 2.4 sooo close
Post by: Endy on September 18, 2005, 10:05:18 PM
Weird :wacko:
Title: 2.4 sooo close
Post by: Botsareus on September 20, 2005, 09:54:38 PM
About time all the possible different dna can be evolved by our little robots.
Make sure its all of it, even including the custom labels.

BTW

Good Work Dude. I dont like it, because I have to blame myself as well but it looks like you are the only one making serios progress in the the coding of DB.
Title: 2.4 sooo close
Post by: Numsgil on September 20, 2005, 10:10:22 PM
Its way more basic than labels.  Basically mutations view the DNA as a long series with absolutely no correllation between elements.  Although this isn't true, it makes the mutations more realistic, and with what I've laerned playing around with them, more useful.
Title: 2.4 sooo close
Post by: PurpleYouko on September 21, 2005, 09:40:27 AM
You mean it won't add blocks of numbers in pre-formed condition or command groups. (like "*.nrg 6000 >" or "56 .aimsx store")

That is soooo gonna piss of Bots  :laugh:
Title: 2.4 sooo close
Post by: Numsgil on September 21, 2005, 01:01:40 PM
Sure won't.  In fact, if it adds a long string of commands in, it'll be more likely to be something like:

*885 start or >

He he.  Most mutations should be kept low in their effect, so you only distrupt things 1 bp at a time.  That's my theory anyway.
Title: 2.4 sooo close
Post by: PurpleYouko on September 21, 2005, 02:02:34 PM
I agree with you. There should be no rhyme nor reason to mutations so long as the DB Operating system can handle them and not crash because of a missing "start" or something.
Looks like your changes are making it much more robust all the time so it should be great.
Title: 2.4 sooo close
Post by: Numsgil on September 21, 2005, 03:59:23 PM
The few simulations I've run over night are encouraging.  Veggies are definately evolving -1 shots from time to time, because they keep finding ways to crash the program with them.

The best thing is the point mutations that can mutate a bot during any cycle.  If you set it impossibly high, it's a great way to check out possible crashes in the DNA robustness.

DNA, btw, can handle anything now.  You simply can't create a file of anything that, assuming it's read into the program successfully (that is, there's no file buffer overloads or something like that) would crash it.

In fact, I bet you could load in some science article you've been writing, or some .gif file, and the program wouldn't crash.  Not that the bot would be doing anything but 0 0 0 0 0 0 0 0 0... of course.
Title: 2.4 sooo close
Post by: PurpleYouko on September 21, 2005, 04:33:59 PM
Cool  B)

We can load in real words.

Maybe we should modify the DNA code so that it is in the form of real DNA but with more letters. That way we can write real words and the bots will be able to decode them and do real stuff.  :D
Title: 2.4 sooo close
Post by: Botsareus on September 21, 2005, 05:32:57 PM
I mean the custom labels: In vb: "Const abc = 20" that stuff. (assuming that you will still have them at all in the next virsion)

I just want to make sure we are staying with the policy everything that a bot programmer can do the mutations can do.

Quote
Its way more basic than labels.
(not sure what you mean by that, have to ask the same thing ^ again)
P.S.

I actualy like the no structure idea as long as we can clone peaces of code. So if "50 .repro store" gets cloned several times and then eather of the symbols change it would be more or less the same thing. I am pritty sure the new system supports multi symbol cloning or somthing of that nature.
Title: 2.4 sooo close
Post by: Numsgil on September 21, 2005, 06:42:21 PM
Code can be cloned, moved, outright changed, or deleted.  I do think that bots not being able to remember things like "I used this number to form a tie, so I need to remember to use this number in tieloc" is soemthing of an issue.  Oh well, let's see if they can evolve anyway.
Title: 2.4 sooo close
Post by: Botsareus on September 26, 2005, 04:57:33 PM
Num check this idea out, stumbled upon this in my math class –should work nicely with the new free-for-all conditions:

The expression 1 < x < 5 witch in db "can" be writtin as "1 *20 < 5 <" has to do:

Quote
If 1 < memory(20) and 5 > memory(20) Then

It currently will probably do:

Quote
If 1 < memory(20) < 5 Then
witch is:
If 1 < (memory(20) < 5) Then
witch is:
If 1 < (0 or 1 boolean) Then
whitch is not what I had in mind

Just an idea, if you don't like it don't bother... make sure to type convirsion otherwise....


'Oh well, let's see if they can evolve anyway'

"Oh well" meaning you did add it or did not add it?
Title: 2.4 sooo close
Post by: Numsgil on September 26, 2005, 05:31:41 PM
Quote
Num check this idea out, stumbled upon this in my math class –should work nicely with the new free-for-all conditions:

The expression 1 < x < 5 witch in db "can" be writtin as "1 *20 < 5 <" has to do:

Quote
If 1 < memory(20) and 5 > memory(20) Then

It currently will probably do:

Quote
If 1 < memory(20) < 5 Then
witch is:
If 1 < (memory(20) < 5) Then
witch is:
If 1 < (0 or 1 boolean) Then
whitch is not what I had in mind

Just an idea, if you don't like it don't bother... make sure to type convirsion otherwise....
We could do that, but the notation is ambigous, so we won't.

That is, think in terms of the stack:

1 *20 < 5 <

stack:
*20
1

< operator.  Removes the valus from the stack.  Stack is now empty.  is 1 < *20?  If so, put TRUE on conditions stack.  Otherwise False

5 is put on stack.

is 0 < 5?  IF so, put TRUE on conditions stack...

Quote
'Oh well, let's see if they can evolve anyway'

"Oh well" meaning you did add it or did not add it?

Added what?  What is 'it'? You have a pronoun with no predicate.
Title: 2.4 sooo close
Post by: Botsareus on September 27, 2005, 03:19:27 PM
we can use a bytype opperator:  "3 4 < bytype 2 >" works like stop expression... o well...



Quote
I do think that bots not being able to remember things like "I used this number to form a tie, so I need to remember to use this number in tieloc" is soemthing of an issue. [you]Oh well, let's see if they can evolve anyway[/you].

I gess you added labels right?
Title: 2.4 sooo close
Post by: Endy on September 27, 2005, 05:36:06 PM
I think Nums is talking about the current coding complexity problem. For a simple operation like TF'ing a bot needs to have a number stored in .tieval, -1 in .tieloc and the number of the tie stored in .tienum. All of which is extremly hard for evolution to accomplish independently.

I was thinking of something similar to how the new tielens/tieangs might be useful. I was thinking that possibly storing a percent value (representing the resource type) to be transfered might be used instead of the negative numbers. The amounts transfered could be limited by bot strength, similar to what we do with shots; or increased with something similar to how shootval currently works.
Title: 2.4 sooo close
Post by: Numsgil on September 27, 2005, 05:36:19 PM
Mutations possible:

1.  Single bp is changed into another bp.
2.  A run of bp are moved into a different location in the genome
3.  A run of bp are entirely deleted
4.  A series of random commands are inserted in at a random point
5.  A series of bp are reversed.
6.  Mutation rates are changed

That's it.  No fancy anythings going on.