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.


Topics - Numsgil

Pages: 1 ... 3 4 [5] 6 7 ... 22
61
Off Topic / What I've been up to other than Darwinbots
« on: July 16, 2007, 09:33:48 AM »
This is what I've been working on other than Darwinbots since last year.  You can skip reading most of the technical information and skip to the download section.

62
Off Topic / Microscopic life
« on: July 16, 2007, 06:54:41 AM »
Was a lot of fun to watch.  Got me excited to program Darwinbots

63
Darwinbots3 / Bot DNA
« on: July 16, 2007, 02:38:01 AM »
I'm hoping to encourage some brainstorming about new DNA forms here.  I'll start with some of my own observations and ideas:

1.  First, the current DNA system has lead me to a strong conclusion.  The stack is very easily manipulated by evolution.  The memory locations much less so.  A new system should take advantage of the stack more fully, and reduce or eliminate dependence on memory locations.

2.  Viruses are key to most evo sims.  They should be encouraged.  But their method of propagation is a little overpowered in the current system, I think.  It should be easier for bots to spread viruses, and more difficult for viruses to enter a non receptive host.

3.  The linear nature of current DNA is limiting.  It should be easier for bots to run several much shorter strands in "parallel" than one long, linear one.  Especially with something like viruses, induced behavior should be additive and not necessarily disrupt existing behavior.

4.  Conditions shouldn't be separated from the stores that they influence.  Something like:
cond
*.nrg 5000 >
start
50 .repro store
stop

Would be better off looking like this:

*nrg 5000 > 50 .repro store

Maybe remove all the flow commands, or keep just start and stop (for junk DNA purposes).  I'm not quite sure how a system like this would work, but probably the condition operators (>, <, etc.) toggle whether stores work or not.

Probably there would be a parallel boolean stack (as there is now), and stores simply check against the top of this stack to see if they are active or not.

5.  DNA commands should be easily performed and understood by a human.  Things like the bitwise operators tend to make the DNA look even more indecipherable than is necessary.  Evolution will use whatever tools it has at hand, but humans don't like doing bitwise ANDing in their heads.

6.  Codules (basically sub functions that can't be set up recursively) are important for allowing branching logic.  I'm further advancing the idea that there would be "core" codules that interact in very defined ways, passing control to each other, and lesser codules, that act simply as functions, returning when they're done to where they were called.

7.  Probably something like half of the sysvars relate to vectors in one way or another.  I'm playing with the idea of using vectors as the basic type instead of integers.  But it's not as easy to do as I would like, so I may just sit on this idea.  Basically, it would be alot better to do something like:

*.refvel .move store

instead of

*.refvelup .up store
*.refveldx .dx store

8.  It's unrealistic to know exact details about your position, orientation, etc.  I'd move sysvars towards being entirely relative.  Sysvars would return information as if the bot is stationary and at the world origin (0,0).

9.  Arbitrary values need to be removed where appropriate.  For instance, instead of 100 .shootval store -2 .shoot store you might do something like 100 .nrgshot store.  Eyes also should probably be redone to return values representing distance more accurately.

10.  Most sysvars should be reworked to accept and return values in a normalized range.  Something like -1000, 1000.

11.  I was also playing with the idea of having all values be floating point in the range -1 to 1, but there are some places where this doesn't work out well (such as .body for instance)

12.  Where possible, sysvars should give and return information.  That is, act as both input and output.

13.  As a general rule, passing A to a sysvar and passing B to a sysvar should mean that passing their average gives a result that is related to A and B.  For instance, while -2 and -6 shots are both feeding shots, -4 is not.

14.  Where possible, choices should be dumbed down where these choices aren't important.  I was toying with the idea of making ties strictly for aggressive feeding and allowing only a single tie to be created per bot.  (The connective properties of ties would be moved to another mechanism).  Then instead of creating a tie and remembering its number, you'd just have to create a tie.  Feeding wouldn't need to know about which tie to use, because there would be only one.

Haven't worked through all the consequences of this yet, but it's the track of thinking I'm on.

Structure
This is the big one.  There are several ideas I've toyed with:
  • The first involves creating a linear assembly line of codules.  Something like a pipeline.  After one codule is finished executing, it passes control to the next one, until finally the last one somehow gives values to sysvars to cause action.  Mutations could change the order of the codules being executed.  The result is somewhat similar to the evolution of metabolic pathways, but it's still too linear for my liking.
  • The second involves a web of codules.  Each cycle, a codule would receive a stack filled with its input parameters, manipulate those parameters, and produce an output stack (the stack after it's done executing).  Codules could be connected to other codules by connecting one's output to another's input.  Sysvars would be simple codules that give output and receive input.

    The problem is that it would then take several cycles for data to be processed from the inputing sysvars, through the DNA, to the outputing sysvars.  Also, this creates a problem when it takes one calculation 2 cycles to do, while a more sophisticated, branching calculation can take 10 or more.  DNA would be encouraged to sacrifice sophistication for simplicity, which is backwards of what I'd like to aim to achieve.
  • An alternative is to run the DNA several times in a cycle, but here there are issues with how many times to run the DNA.
  • Another idea is to simply prevent any looping at all (no recursion), which collapses the web into more of a feed forward neural net.  This is what I'm currently thinking.

    Input sysvars would pass their values to any codules they're connected to.  These codules process their data and send it to the next codule.  But I'm not sure how to set it up so that the different execution paths don't end up with a racing condition against each other.
-------------------------------------------------------------
That's pretty much all I have at the moment.

64
Darwinbots3 / New bot shape
« on: July 06, 2007, 05:58:22 AM »
I've been working over how the next Darwinbots will work.  Specifically I want to make it 3D and allow bots to create "membranes" so they can form things like squids that move based on jet propulsion.

I realized pretty quickly that spherical bots attached with rods doesn't work well in this sort of situation.  Bots that wanted to change the angle between ties need to specify both ties to work with.  This creates a level of complexity that I have a hard time imagining evolution being able to successfully adapt to.  So I reversed my thinking, instead of bots acting as the joints between ties, I have bots be the rigid rod and have them form joints with each other.

There are a variety of shapes that bots could have.  The one that comes to mind quickest would be a large box.  But I don't think it would look very organic-- too many corners.  The next thought in my mind was for them to be capsules.  Looking something like this:



Multibots would form as a pivot point between two bots.  It would either look like or

I haven't decided which one looks and works better, so I might implement both and see which one works better in practice.  I'm wondering what people think about something like this.  It would really change how the program looks.

65
Announcements / Insane new captcha
« on: May 31, 2007, 10:42:28 AM »
It's been forever since I started manually validating members, and the spam is still trying to get through.  I just upped the ante with an insane new captcha (the numbers you have to type to register).  Took me 4 tries before I managed to get it right.

Everyone should go and try to register a dummy account (I can delete it later) just so they can give me feedback on the difficulty of the captcha.

Hopefully it prevents waves of spam bots and I can stop manually validating every member.

66
Announcements / Forum not accepting password
« on: April 22, 2007, 04:41:56 PM »
Just a few minutes ago I was having trouble logging in to the forum.  It wouldn't accept my password.  I had to manually change databse fields to fix this.  If this happens to anyone else, please email me at Numsgil2002 (at) yahoo (dot) com, and I'll try to reset your passwords.

67
Announcements / Code Repositories and Fundraising
« on: March 28, 2007, 01:25:28 AM »
At the moment, my game plan is to stick with the current host (GoDaddy) for the webspace.  Moving everything from the databases and web space would just be too much effort for not enough gain.  Since GoDaddy doesn't offer any sort of CVS or SVN code repositories, I'm looking for an alternate place to host the repositories (that is, the C++ code, the Visual Basic code, and perhaps a future C# version).  Not that anyone's really working on any of that at the moment   The repositories make sharing code between developers very easy, which makes development easier, for those who don't know what I'm talking about.

The best solution I've managed to find so far is at www.hosted-projects.com.  They offer a 12 month account with fixed disk space (100 megs) but unlimited number of repositories for $70.  By itself I couldn't justify $70 for Darwinbots in addition to the money for renewing the namespace, webspace, etc.  So what I'm going to do is this: I will, no matter what, foot the bill for a repository account.  I will use the account for some personal projects (say, 1 or 2) in addition to Darwinbots.  Others who want to donate a little money for the coding repository would also have this right, though I only imagine this might interest Eric.  Either way, money is money.  Send me an PM and we can work out PayPal payment if you're interested in supporting the repositories.

The webspace will be up for renewal in 3 days.  There was enough money from last year to pay for this year and the next(!), though again if you would like to donate a little money to demonstrate your appreciation of the project, I'll put it aside specifically for webspace.  Again, PM me and I'll give you details if you're interested.

68
Evolution and Internet Sharing Sims / Testing a hypothesis
« on: February 25, 2007, 06:20:51 AM »
Came to me after watching the robots Jez linked to.  I just want to write it down before I forget.

Basically, you'd have a controller veg that gets fed basically infinite nrg.  It would create insanely large amounts of both slime and shell, to prevent it from being a viable food source.  Poison too.  It would be programmed to send info shots to bots that it sees that have certain criteria, forcing them to reproduce.  Maybe this threshold value changes over time as the number of bots in the sim increases/decreases.

Another dummy veg species would exist as little more than food pellets.

Another controller veg species would act as the dynamic predator that Eric has mentioned.  It would get stronger or weaker depending on how many animal bots it sees.

The animal bots would have rudimentary behavior to feed from dummy vegs and move around a bit if there isn't any food.  It would seek out the controller veg when it feels that it's time to reproduce.

The hypothesis I have is that cooperation becomes easy and natural when you're reproduction is handled by another, independent agent.  I think this sort of environment should foster cooperation as opposed to cannibalism.

The hard part is deciding the criteria that the master controller veg uses to decide wether or not to reproduce a bot.  I'm thinking possible candidates are either age, nrg and/or body, or kills.  Another option is maybe having the bots give nrg to the master controller as a sort of "bribe".

I'm betting that the bots won't learn to independantly reproduce very quickly.  Though I might have to add some new features to ensure that only the master controller allows reproduction.  I'll probably need to add a few features here and there anyway to get things like my predator up and running.

69
Suggestions / League stats tests
« on: January 03, 2007, 01:34:44 PM »
After several hours of intensive googling and reading my old stats book, here's what I've come up with:

Supposing you have two outcomes (Bot A wins, or bot B wins) and you'd like to test to see if one bot is statistically winning more than the other one, this is the formula you'd use:

Bot A wins if 2 * #wins - #rounds > Z * sqrt(#rounds)

if you want to know how far a current bot is from winning a match, you use the following formula:

Bot A needs (Z * sqrt(#rounds) + #rounds) / (2 * #rounds) wins in order to be declared the winner.

where Z is your confidence interval (the most common being Z = 2 which corresponds to 95%).

This formula only works if #rounds >= 5.

The good news is that the way the league matches works right now is not only statistically and mathematically correct, it's probably the most reasonable trade off between correctness and number of rounds.  The current league uses a confidence interval Z = 2, which corresponds to a confidence interval of 95%.  My hat's off to whoever figured out the statistically valid number of rounds to run at the dawn of DB time.  Most of the stuff I double check in the code isn't really correct.  So I'm impressed.

To expand the current featureset, I would suggest having the following preset round confidence intervals:
  • Most out of X trials - Simply award a win to the bot that wins the most out of a preset number of trials.  There are still stats you can do on this, but I haven't played with it yet.
  • One Standard Deviation - Corresponds to a Z of 1, and a confidence interval of about 68%.  This would probably be the best for casual runs of the league.
  • Two Standard Deviations - what we currently have
  • Four Standard Deviations - Corresponds to a Z of 4, and a confidence interval of 99.993%
  • Proffessional Test - Corresponds to a Z of 4.4172 and a confidence interval of 99.999.  I believe this is the confidence interval used by manufacting companies when they test to see if a lot is defective or not.  This is really overkill, but you'd be very confidant in your results
An interesting point about confidence intervals, it's not that you'll be picking the wrong bot as victor 5% of the time, it's that you'll be prematurely ending the match 5% of the time.  I think.  This stuff gets really screwy in what you can and can't conclude.  But my point is that you're very unlikely to declare an inferior bot a winner.

Last, here's the nice article I found to help me through the stats: Checking if a coin is fair.

70
Off Topic / Black Shoals
« on: December 21, 2006, 03:24:38 AM »
Black Shoals is a very interesting use of artificial life.  Its agents are actually pretty similar to our bots, and feed from sources that grow or shrink based on real time stock market data.

71
Suggestions / Variable length arrays for the bots
« on: December 19, 2006, 06:28:31 AM »
This isn't as much an issue now, but playing around with the idea of bot IDs (as in "Bot 10456 attacked me.  Everyone attack him if you see him!"), variable number of ties, and other similar issues having a "foreach" type loop in the DNA would be very useful.  This only works if this "foreach" was performed on an array.

We could have, say, 10 circular arrays of unlimited length that bots can write to that persist across cycles just like memory locations, addressed by memory locations -1 through -10.

I haven't worked out all the specifics, but something like the following is my goal (in pseudocode)

if a bot is attacking me that's supposed to be a conspec:
store this ID in .Cheaters array

...

if I see another bot:
foreach ID in .Cheaters array, if other bot's ID = ID from .Cheaters array, attack this bot or run away.

72
Announcements / C++ snapshot
« on: December 19, 2006, 06:18:30 AM »
Here's a snapshot of the C++ code and exe as it exists at the moment (minues some of Sprotiel's new changes that I haven't downloaded yet.  Sorry Sprotiel!).  When you start the simulation, you will see about 100 veggies clump because of planet eaters and eventually form a planet.  There is a small stable of bots that come with this snapshot, but most current bots should work just as well in the new version.

The most notable differences between this and older 2.4X versions is ties (specifically the lack of alot of tie functions) and physics.  Please play with the physics.  The mouse wheel zooms in/out and left clicking and holding will let you "drag" the display around.  

Read sysvarschanges.txt to see what's different.  This version represents a place DB was at before most of Eric's changes, so there are no shapes, for instance.
 
This also comes with the source code, so for those so inclined they can use this source code and project files to get started (although you'll need some dependancies, please consult the wiki).

73
Announcements / Anti Spam Controls
« on: December 16, 2006, 05:35:00 AM »
Due to the literally insane amount of spam this forum has been getting, all new forum registerees will need to manually be approved by me.  This is a temporary measure until I can figure out something better.  I'll be approving everyone, since the spammers register and post in the same second and they seem to give up on an account name if it can't post in the first half second after it was created.

There are two warnings during the registration process that an admin needs to approve someone's account before they can post, but they're easily overlooked.  Ideally I'd have an email confirmation, but for some reason the forum isn't sending out any automatic emails (or at least, not to me).

Hopefully new users might glance at this message before or after they register.  Ideally the spammers might just give up eventually.

There won't be any emails sent out when you finally get validated.  The forum's automailer feature is broke, much to my chagrin.  Just try back in about a day, and you should be validated.  If not, send me an email ([my user name]2002@yahoo dot com)

74
Bugs and fixes / Odd vision issues
« on: December 11, 2006, 06:23:19 AM »
I'm not 100% sure if this is a bug or just my odd bot.  I'm trying to set up a simulation with a modified Enitor Comesum that can deal with shapes.  Drag one of the enitors to a veggy and make it look at it.  (This is harder to do than it sounds, and may take a few tries).

Some of the enitors' vision grids seem to be ignoring veggies.  Specifically the enitor with ID 117 has this issue.

75
Bugs and fixes / Decaying shots in 2.42.9m
« on: December 11, 2006, 05:51:09 AM »
Wanted to enable shot decays (I'm using enitor comesum, so I'm talking as big as it gets), but found that it's been moved to a menu item!  The menu item isn't checked even though the default seemed to have it checked.  Checking and unchecking it fixed the problem, so this is pretty minor.

Pages: 1 ... 3 4 [5] 6 7 ... 22