Final Project Page has been posted.
Ok, so here's where I'm at:
After a conversation with Prof. Ackley, it was concluded that my model needed a lot of simplification. So back to the drawing board I went, and implemented the changes he suggested. That done, and several wasted simulation runs later during which I realized I had some implementation errors in my model, I've gone back to running simulations. Now, instead of varying the amount of resources on the board, I am varying the threshold by which the Sytizens will engage in their genetic behavior. Parochials now have a single behavior. Altruists have another. Thus, PAs will engage in both. PNAs and NPAs will engage in one or the other, and NPNAs will engage in neither. Both genetic behaviors are tied to an energy threshold, below which they will not fire. For example, if set to 20, no Sytizen with less than 20 energy will share with or attack another Sytizen. This threshold is now what I am adjusting over runs. And holy crap, I think I have a U-shaped curve.
The bad news is, this has placed me very much behind. Now, my model description must be redone. My figure 1 redone. And I have many more lengthy runs to do before I can produce graphs 1 and 2. The bright side is that I am pretty much working solely on this over the weekend, but I wonder if that will be enough time…
I completely forgot to make an update last week, so I guess I'll lump it in with this weeks, and attempt to keep it concise.
All in all, the outlook is iffy. On the bright side, were I to do a project like this again, I would be much more comfortable in knowing the kinds of bumps to expect, and a better sense of where the pitfalls lie. That's a good thing.
I've been working sporadically over the week, so I'm just going to compile everything into one update for the week:
Graphing: I've installed gnuplot on my usb-untu and wrote a bash script that will convert my data files into nice graphs that do a great job of telling the tale of a simulation at a glance.
The bad news is, this has exposed all the horrible things wrong with my Element_Sytizen. After doing several runs of of a single team only and seeing a predominance of one kind of classification, I concluded something must be wrong in the implementation. After going through the code, there were not only issues with genetic behavior, but with breeding and movement as well. After some refactoring of the broken stuff, I tried to take Professor Ackley's advice and simplify the genetic behavior as much as possible. The following behavior algorithms are now in effect:
Parochial Altruists: Attack outgroup with 0.5 chance of success, no longer get energy for this, but opponent still dies. On failure, 0.5 chance of dying from the attempt.
Parochial Non-Altruists: 0.5 chance of stealing 1 RES worth of energy from outgroup. The PNA does not get to keep this energy if successful. On failure: 0.5 chance of losing 1 RES worth of energy.
NP-A: If NPA energy is over a threshold and a friendly has less energy than the energy surplus over that threshold, the NPA will give the friendly 1 RES worth of energy.
NPNA: Still just dancing.
This, along with some adjustments to global parameters (Increased breeding range to 4, RES pickup range to 2, Strike range to 2, Mutation odds to 1 in 250) the simulation runs now resemble something closer to sanity. Instead of looking like fish and sharks with swarms of colors chasing each other around the map, it now looks something more like Frobworld, with diffused dots chasing RES around the map and occassionally getting into scuffles with an outgroup. Runs with a single team now show more balance in categories (with the exception of NP-As which still tank fairly quickly, but at least appear on the board now.)
Here's an example run with 1 team only, RES produced at 1 in 200
And here's one with 2 teams, RES produced at 1 in 200.
I think I'm in good shape, and so am now cautiously transitioning to my science hat.
Finished reading Maley's paper in preparation for my defense next class. Having never defended a paper in this manner before, I'm not sure what to expect. My brother's recommendation is to put my back to the corner, drop the paper at my feet, and swing my arms around wildly, all while making extremely loud bird calls to confuse would-be attackers. So between that and carefully studying the paper, I should hopefully be able to put up a good defense.
Yesterday, I stopped by Professor Ackley's office, who provided me with some code to output statistical data from our atoms. I created a walkthrough page on the wiki to provide the code to others who might also need the same capabilities. Now to get some preliminary data from my Sytizens.
Ok one more post. I adjusted the settings of the parochial non-altruists so that I'm no longer getting lock-up, or if I do, it doesn't last, and will eventually erode and things continue to move. After playing around with this configuration in a 4-up match, it's clear that Parochial Altruists are the hands-down dominant category, followed by PNAs, then NPAs, and the NPNAs dead last. Not sure there's anything terribly exciting about that, but…
I just adjusted the resources down a bit and set off a 1v1 match and it has been the hands-down most exciting run I've watched yet. 8 kAEPS in and it's still going. I'm getting lock-ups that eventually get eroded away and these two guys are slugging it out hard. I wish I had recorded it. I also really wish I had statistical output so that I knew what the heck was going on. Hopefully that feature will come soon.
**edit: Ah, blue finally won at 9.1 kAEPS. Bravo, blue.
This week, I'm lumping my updates into one post.
I finished up my researcher presentation on Tom Ray last Monday after class. I'm glad I picked him, he's had a fascinating career, and I'm looking forward to telling everyone about him.
I wrote an abstract and expected outcome a few days ago, and I was sure to use as many $2 words as I could to make it sound good. However, I've already blown my expected outcome out of the water because…
So it turns out that the hunch was correct that the gridlock of elements that kept occurring in my simulation runs were made up of predominently the same category. In fact it essentially entirely one category, but not the Non-Parochial, Non-Altruists as I'd suspect, and no not the Parochial Altruists, either. It is, to my surprise, entirely the Parochial Non-Altruists (the ones who steal from outgroups, at potential cost to themselves.)
After looking at their behavior, I suppose I understand why; the consequences of failure aren't too bad. So in the grand scheme of abilities, they have a much smaller chance of dying than the others, so I need to nerf their advantage a little bit. However, I feel that I am arbitrarily doing this, and need to figure out some way of making the behavior a realistic one, even if it confers a greater advantage. However, at this point one is as realistic as the other, so I suppose I will just attempt adjustments until I am at least no longer getting gridlock.
Amazing: I make an off-hand comment about how I'm a loser who doesn't know how to debug and not 4 hours later, a tutorial gets posted on logging and debugging. IT'S LIKE MAGIC!
Today's impediment is that I do not have a million dollars…
Worth a shot. Anyway, I've implemented the genetically-specific behavior of my Sytizens, and thanks to the magic of LOG.Debug I've ironed out some (not all) kinks in my element. I need to be able to incorporate some randomness into the creation of the element, specifically in GetDefaultAtom function. I have an sos in to Trent on the best way to get a nicely seeded prng in that function.
Next up: Implement breeding. Now where is the Barry White function…
Stellar programming achievements today:
So, not much progress today. I still have tomorrow, and the rest of what I need is essentially variations on things I've since figured out, so I'm hoping for a faster pace tomorrow.
Forgot to update last night, so this is last night's update: Managed to get the good Sytizens of Paralta walking around and eating res and dying when they run out of gas. This was no small endeavor, and there were more than one “Aha” moments when I finally understood how some basic mechanisms of MFM work (like realizing that I have to keep re-writing the active Sytizen to the window if I want the new state to take effect, even if the Sytizen does not move). My poor wife had to endure me shouting at my Sytizens all night “Why won't you die?! I want you to die!” She looks at me funny now.
Today, I'll be forging ahead to get as many interesting behaviors as I can out of them before demo on Monday.
Tutorial done. Element_Sytizen draft is done. Didn't get to push ahead on research of Tom Ray as I'd hoped. Getting Ubuntu/MFM working at home was much more of an endeavor than I'd fooled myself into believing. I guess there's always next week. Until there isn't.
Just a celebratory news update: as of the timestamp I finally have the mfm built and running on an ubuntu partition at home. (MFM is painfully slow, however, at ~25AER) Now to figure out emacs and do the tutorial.
I'm a little behind on my news, but since last update, I've settled on a project and will move ahead with a study of parochial altruism and the evolution thereof with the hopes of pinning down a good fitness behavior that a robust program might engage in to ensure suitability in a resource-competitive environment. My presentation and the ensuing discussion helped reveal some potential pitfalls I might encounter like my approach to reproduction, as well as some great improvement ideas in having PA elements rove around in bands.
Today I had a great primer in developing for the MFM via Trent's boot camp. I think I've got my work cut out for me and it's a good thing that I only have essentially one element to develop.
This evening I am going to attempt getting a usb drive set up with Ubuntu to be able to boot from it.
This weekend I will be working on the Element_Creg tutorial and flesh out my element.
Still playing catch-up from 5 days out of town. Too early to feel like I'm drowning. Perused the options for ALife researchers and chose Dr. Thomas Ray. He seems really interesting; especially with lines like “My current research: The diverse set of psychoactive drugs collectively represents a rich set of tools for probing the chemical architecture of the human mind.” I read that one sentence and said “Sold.” I've found no additional time to get into the labs at school and play with the fishes. I guess I'm left floundering at 80kAEPS.
Read Professor Ackley's paper Altruism in the Evolution of Communication. Was relieved to discover that it was a different angle of altruism than I was thinking of. However, am still considering what lessons might be carried over to a study of a population of individuals sharing resources in varying degrees of altruism. Also, attempted to get MFM running through a putty session which was laughably unsuccessful.
Spent some time with Ezra in the CS lab playing with the fish and sharks. Best results so far only made it to 80 kAEPS. Have not hit on a stable solution yet. Strongly considering changing my research topic, but haven't hit on any bright ideas yet. Trying to think outside the box, but I'm not even really sure what the box looks like…
Today I made a people page for myself.