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 - rwill128

Pages: [1]
1
Solved Bugs / Local Internet Mode Broken in 2.46?
« on: December 23, 2013, 01:11:47 PM »
I have two decent sized sims running (about 900 sex-repro animal minimalis) and about 800 veg each. They're going great at almost 30 fps. But when I tried to connect them with Internet Mode I immediately get an overflow error.

2
Solved Bugs / Out of Memory error
« on: December 22, 2013, 01:40:19 PM »
Was just talking to Botsareus, and for my recently achieved huge sims, I've only had them work with DB 2.45.

2.46 gives me an out of memory error. As soon as I get Botsareus's email I can send him one of my sim files (they're each almost 100 mb) and he can try to debug it.

3
Evolution and Internet Sharing Sims / Maximizing numbers in EvoSim
« on: December 20, 2013, 12:51:59 PM »
What are the largest numbers most of you guys can achieve in your sims?

I used to keep the size relatively small because it makes for more interesting interactions, and my sims would run great on the computer I'm currently using (an i5 2500K at 3.3Ghz -- my work computer), but only if I kept the population somewhere between a few hundred and a thousand creatures (including vegs). If I let the numbers get higher than that the sim would slow to a crawl and get less than .1 - .2 frames per second.

But I was reading about a grid optimization that was implemented a while back and I realized it might be beneficial to make a huge environment and let the creatures spread out. I was able to get 5,000 veggies running in the same sime with 3,900 animal minimalis at about 5-6 FPS.  Big improvement!

So I tried doing the same thing in 8 sims at once to take advantage of the quad cores, and I was able to get 3-4 FPS on each. So almost 4,000 * 8 is about 30,000 animal minimalis and about 50,000 veggies all running at the same time at about 3-4 FPS. I'm hoping to get a new computer for home use in just a couple weeks, so imagine the possibilities then!

I wanted to point this out because with so many creatures running at once, it might be possible to get much more interesting results in an evosim. Anybody have suggestions on what to use / where to start?

4
Off Topic / Back again with an interesting machine learning idea to discuss
« on: November 19, 2013, 11:59:29 AM »
Hey everyone,

It's been a while since I posted around here, but at the end of the summer a bunch of crazy things happened in my life and I didn't have time to indulge my interest in programs like DarwinBots. Lately I've been working as a Java software developer though, which is an awesome transition from my previous work as a writer. It's nice to be back in the field even though I have an English degree.

Anyway, I've been doing a lot of research and reading academic papers on reinforcement learning techniques, and I was thinking about something Numsgil said when he explained that he thinks that artificial neural networks are more accurately described as weighted cascading gate mechanisms (or something similar). I completely agree, and in fact I only began to understand them more thoroughly when I stopped thinking of them as neural networks and instead thought of them as such.

But I was just brushing up on some math, and I realized it might be really cool (though not necessarily computationally efficient) to model an artificial neural network in a different way, based on something like real physics. (Not biochemistry or anything, just simple physics.)

Imagine a neural network where each node is modeled as a point in space (let's go with 2-dimensional space for now) from which a vector is extended down (toward the next layer of nodes). Data is transferred to the next layer by calculating the proximity of the previous layer's vector endpoints. (Or by many other alternative methods, perhaps, but this one makes the most sense to me.)

Training this kind of neural network could involve modifying the magnitude of these vectors so they end closer (or farther away) from the next layer of nods, which would be analogous to modifying the weights of a traditional neural network. But you could also modify the angle of the vector or even slide nodes on one layer along their axis so they are closer or farther apart. You could also give the nodes other kind of activity choices like pulsing with a greater degree of force, thereby affecting the next layer of nodes more strongly and from a greater distance. This would allow one node to trigger some kind of explosive activity in the network during specific event sequences while acting normally the rest of the time.

What you would have is an actual cascading network of nodes, where the data cascades through the network in a much more complex and multi-faceted (but still ordered) way than it does in a traditional NN that just uses weights and thresholds to decide how data passes through a node. My attraction to this idea stems from two things:

1.) It would be easy (and extremely captivating) to graphically illustrate this kind of neural network and watch it in action.

2.) Because each node interacts with other nodes in a mathematically complex way and dynamic way, it would allow for smaller numbers of neurons to approximate much more complex functions.

Anyway, I came here to post this because Numsgil usually has interesting thoughts on ideas like this.

5
Off Topic / First Paid Python Script!
« on: July 02, 2013, 09:18:08 PM »
Hey all,

This is an odd question, but I've got my first chance to actually do some paid programming work (ever) and I have to know that I'm capable of solving the problem he's laid out for me before I accept the project.

I'm going to look like a complete math beginner here, but after looking over his description of the basic problem this function needs to solve, I still have some questions. I'm hoping you guys can give me some insight into what his instructions mean, because I understand them like 80% -- and I'm not sure whether the last 20% is missing because I'm not qualified or because his instructions are confusing.

-----

To solve this type of problem laid out in Doc1, even if it were much more complicated than the example, I'd still just write a function that sums the distance over various aisles (the "P sub M"s) for each combination of picks (i.e. each element of K*) and then picks the lowest possible summated distance (finds the lowest value of P). Correct?

As long as I know the probability of each aisle being chosen and he gives me the function or information I need to determines the distance for each aisle, it should be easy. The only inputs for the function would be M (number of aisles) and N (number of picks), correct?

I'm not sure I have everything figured out right, but I'm willing to work very hard and fast to get it figured out. (On that note, how does "h" feed back into the equation. It says to find E[P] for a given value of h, but then h doesn't reappear later in the description. I'm afraid I may be misunderstanding something.)

If you're able to give it a quick look over I'd really appreciate it.

Thanks

6
Off Topic / Personal Project -- Biogenesis and QLearning
« on: June 26, 2013, 08:01:03 PM »
Hey all,

So I hope there's nothing wrong with me posting about another evolution sim program on here. If there is, I'll be okay with someone letting me know.

But anyway, I wanted to share the results of the project I've been working on for the last few days. It finally reached a milestone where I have a working "proof-of-concept" program, and now I want to tweak it so it looks prettier and has lots of interesting features. I've been using Biogenesis (Specifically, a mod of it called "Biogenesis Color Mod" : https://sourceforge.net/projects/biogenesiscolor/) and a QLearning framework I found at http://elsy.gdan.pl/

Check out some of the samples on the Elsy website. He's actually got a nifty little library there. He implemented a type of reinforcement learning that uses neural networks, and the "Wanderbot" or "Apollo Lander" examples both show what kind of tasks it's effective for.

Anyway -- I decided I wanted to combine Biogenesis, which I've always found to be a fascinating program because of its relative simplicity (but cool results), with this other guy's QLearning framework.

In Biogenesis, each creature's lines have different functions based on their color, and each creature's "genes" just store the overall shape of the creature. So more effective shapes are selected for. But movement patterns are largely unintelligent. But now, as of about 5PM today, I've got a working prototype of a Biogenesis mod where each creature is connected to its own (surprisingly effective) neural net, and can make movement decisions based on the information passed to that net.

---

With all the evolution sim enthusiasts around here, I thought I'd come and ask if anyone's experimented with either of these programs before, and if they have, do they have any input on this concept? Any ideas of how you'd like to see it implemented? How should creature's brains be given reward feedback? Should their "preferences" be stored as hereditary information?

7
Okay, I'd really like your feedback, but I will issue the disclaimer that I'm using this post more as a brain-dump/note-taking device than anything else. And I might be repeating other people's ideas here -- I certainly haven't read through all the posts on this issue.

I was thinking of nifty ways to classify species in DB, as part of graphing and record-keeping efforts but also to facilitate the possibility of sexual reproduction.

Here are some criteria that occur to me:

1. In order for two organisms to be of the same species, their DNA needs to be relatively similar in length. Off the top of my head, plus or minus 10% of their total DNA seems like a nice starting point for an arbitrary limit.

2. To create a rough taxonomy of sorts, we could compare their genes, and note which are roughly similar. (Which have ~90% of their commands in common, or have identical strings of commands that are long enough to be a significant sign of species similarity?)

OR

if we wanted to allow for mating between members of a species even if one is carrying a lot of junk DNA, has experienced a significant mutation, etc. we could only look for similar code surrounding certain commands, such as feeding or repro commands. That would allow for creatures that reproduce in similar ways to meet each other, while also allowing for significant differences in DNA composition elsewhere, which would be cool for allowing things like sexual differentiation, etc.

-----

Also, by writing this down, I realize, the more I think about these issues, the more questions I have. As a general design principle, to what extent do we want the features of real-life biology to be supported directly by the framework of the genes, and to what extent do we want the features of real-life biology to arise out of the genetic code?

An example (one of many) would be ... age-related growth stages. We could continue with the current, rather minimalist approach, where a creature would only ever change its behavior according the time it had been alive if it happened to have a code segment hidden behind an if age > X condition.

Or we could have one parameter of all organisms' DNA be an array of the organism's current genes, each gene paired with a variable that helps decide when they turn on. It's an artificial way of achieving age-related growth/behavior changes, but by providing a structure for such age-related behavior, you're allowing for more complex, more interesting bot behavior right off the bat.

---

Another example would be having a low food, medium food, high status variable (one that switches at various levels of bot energy -- these levels being subject to mutation) as a built-in part of every organism and it's genetic code.

The genetic code might be regulated so that each gene can have a low food, medium food, or high food tag -- or no tag at all -- at the beginning of the gene. The tag is a signal to the interpreting engine that this code should only be run when the appropriate status is in effect. And the mutation engine is smart, allowing mutations to modify these tags, remove them, or place them in the right position.

---

I know these methods (or similar ones -- these are just examples) might seem like artificial attempts to impose order on something that we think of as random and chaotic, but the facts might be different. There's a lot of evidence (from what I've read) that suggests, for example, that our genes can be turned on and off by environmental factors, by our behaviors, by our age, etc.

It would also be interesting to research whether different parts of our genetic code are subject to higher or lower rates of mutation depending on factors such as how often they are read, etc.

---

Also, here's a kid's video on youtube about biology that actually is pretty interesting. If you watch the last part about an experiment done with a fruit fly and a mouse's genetic code for producing an eye, you'll get an idea of another subject I'm curious about.

If we want to simulate an environment that supports organisms with great complexity and, well, interesting behavior, might it not be a good strategy to pre-structure the genetic code in such a way that all organisms, for example, are asked -- essentially -- "How do you make eyes?" An organism's "eye code" section could be blank, extravagant, or anything in between, but we gear the code's mutation engine so that eye-related commands appear exclusively in this section.

We could also have every organism posses a built-in section of code for building a body, and a special subset of commands that are only available in this section of code, these commands telling how to build a body. Another section of code might be all movement-related, etc.

I know this is a lot different than what DB does now, in some ways, but I'm just thinking that if we want to simulate more complex organisms, we have to provide some built-in avenues for structured behavior to arise. Anyway, please don't take my suggestions as criticisms.. I'm just curious what other people think.

That's my brain dump.

8
Newbie / Running DB on Mac.
« on: April 29, 2013, 03:09:35 PM »
Hey -- wasn't sure where to post it, but it seemed like a newbie questions, so here it is.

My girlfriend just got her new MacBook Pro in the mail, and I was really looking forward to seeing how DB2 runs on it -- I don't know why I didn't reach the obvious conclusion that it might not run on it.

Does anyone here use a Mac, and if so, what tools/methods do you use to run DB2? Also, if you have to use a VM or something (I'm not too familiar with how they work) does it slow the performance down a lot?

9
Darwinbots Program Source Code / Quick Question on C++ DB Version
« on: April 25, 2013, 01:09:13 AM »
So I see there's a C++ port of DarwinBots that never got finished, and I presume development was halted in favor of working on DB3 code.

But I did download the project snapshot posted by Numsgil in 2006, just out of curiosity, a few minutes ago.

Does anyone remember what kind of figures people were expecting in terms of performance boost between VB and C++?

10
Darwinbots3 / Helping
« on: September 07, 2012, 02:18:52 PM »
I have a background in C++, working 3d graphics libraries, and a college education in math up to various levels of calculus. It's all super rusty (5+ years old), but I'm willing to relearn and then learn some more.

I'd love to get involved helping with DB3. The program's really caught my attention this summer, and having just finished an English degree, I'm thinking about getting back into computer science. This would be a great project to keep me coming back and learning more.

I'm familiarizing myself with the wiki, getting the C# compiler working, downloading the libraries, etc. Once I've laid out the basics, how can I start helping. (Or learning more about the system/code, so I can eventually help.)

Thanks,

Rick

11
Bugs and fixes / Huge Performance Loss After Starting Graphs?
« on: September 04, 2012, 10:45:24 AM »
Has anyone else experienced a big loss in cycles per second after starting a graph, especially if you start more than one or two?

It happens even if I have my cycles per data point at the default 200, which makes me think this performance loss is disproportionate to the amount of processing it should actually require to generate the graphs. Also, they're not too hard on the memory, are they? I wouldn't think so.

12
Okay, I have a lot to say here, so I'm trying to narrow it down to just one small bite-size piece of information for this post. I've been thinking about DB a lot since I discovered it a month or so ago, though.

Here goes:

As far as I know, right now DB's only mutation-rate variability is a global one, which not only affects all parts of the bot's DNA, but it affects all bots.

But I think we should have more options: not just a variable inside a bot that changes it's own susceptibility to mutation, but commands that changes a particular gene's susceptibility to mutation, or even a command that changes the bot's susceptibility to mutation in the following lines of code until it is changed again, or perhaps changes the bot's susceptibility to mutation for an X number of lines of code that follow.

The above system could simulate variability in environmental factors that change our genes (such as carcinogenic substances, responses to stress, or radiation).

It could also allow for evolutionarily-intelligent ways of "sticking one's neck out." Certain crucial parts of code would, through the process of natural selection, be more-or-less preserved as low mutation rates were selected for, while other more experimental parts could be left open to higher mutation rates.

I don't think this way of handling mutation would be counter to actual biological processes. Granted, I'm no biologist, but I think that the molecular copying of our genes is orchestrated in such a way that other genes could actually be telling our copying centers to copy that piece of code with a greater or lesser degree of precision.

(Perhaps I'm wrong. If so, I would welcome a swift knuckle-rapping from an actual biologist.)

---

Secondly, I think that, in order to conform more precisely to the behavior of actual genetics, it would be wise to consider the following options:

1) Consider a way that each bot's code would be more likely to support a metaphorical bank of stored-up, unexpressed mutations -- mutations that are waiting for a relatively unlikely mutational "on-switch," one that causes that set of genes to be expressed at a very specific time in the bot's life or under other specific circumstances.

2) Consider giving genes not just commands for performing operations,  but conditions for genes to check if certain goals are being achieved, certain inputs are being received, or certain conditions are being met by the end of a gene's expression. If not, these genes should be able to deactivate their own expression.

----

In fact, perhaps each gene should have three sections: one that only accepts conditions for this gene to express itself, one that only accepts commands -- a "what to do if this gene is turned on" section, and a third section that also only accepts conditions, and which serves as a "when to turn this gene off section."

If a mutation occurs such that a new gene is created, but only one of these sections has code, then the gene rests dormant until all sections have gained a mutation.

I have a few other ideas, but I think these changes (to start) would be crucial for inviting more complex evolutionary jumps.

----

Perhaps some research would have to be done to cite a biological precedent, but I do believe that biological organisms behave according to these patterns, and even though bot instructions are referred to as "DNA," they're still operating at a macro level (we have commands that tell bots to "shoot" or "repro" -- and an entire gene can define a complex set of behaviors, etc.) To me this fact means that we should tweak DB "DNA" to have some of macro-level behaviors of expression that our genes do.

----

Similarly, as far as I know, two of the properties of genetic code that make mutations so potentially powerful are the recursive nature and the scalability of genes that define certain features.

Because of the way DB code is run, we can't necessarily implement true recursiveness except for on a cycle-to-cycle basis, but why not add mutation types that, for example, copy an entire section of code and put in a new area, or put it directly following the original section. Or perhaps a whole gene is copied and then both genes are allowed to express themselves, but if one changes the original will still be there.

---

Let me know if I'm making sense. and also give me any input you have on these ideas.

Thanks,

Rick

Pages: [1]