<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-799872550211773283</id><updated>2011-07-08T07:03:54.021-07:00</updated><title type='text'>Scott Schafer's A-LIFE blog</title><subtitle type='html'>Get A-Life!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-8591132430832032559</id><published>2009-06-08T12:35:00.000-07:00</published><updated>2009-06-08T14:27:22.903-07:00</updated><title type='text'>VatLife update</title><content type='html'>The latest on VatLife: I've done very little coding on it, mainly owing to a lack of time. I began an attempt at a tic-tac-toe playing environment, I've thought about adapting both Tom's noble ape brain as a controller, and Scott Davis' Bubble Pond as an environment, and I rambled about it on "Visions of the Evogrid".&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which on the one hand, seems entirely inappropriate, given that the Evogrid (opposed to Biota Eve) is now about artificial chemistry, and VatLife abstracts all the details of self-replication and has the genome as a primitive. And this isn't something I apologize for. I don't think one is necessarily better than the other, they are simply different approaches.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yeah, the idea of self-replication occuring within an artificial chemistry is more pure and I can see why it would be more appealing to biologists in particular. However, the abstracted approach has produced tangible products, such as circuits and satellite antennae. This is a tiring debate...I wish the two approaches could simply co-exist in peace without the need to rank them or dismiss one or the other.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, after the recording with Tom I wrote down what I wished I had said, and here it is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 14px; line-height: 16px; "&gt;What I attempted to achieve with VatLife was to create a framework that met two main goals: make it a little easier to create a genome-based &lt;span class="yshortcuts" id="lw_1244490433_0" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;artificial life simulation&lt;/span&gt; by providing a simple set of generic tools, and to put an &lt;span class="yshortcuts" id="lw_1244490433_1" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;abstraction layer&lt;/span&gt; between the phenotypes of a-lifes and how they act within their environment. My thought there was while A-lifes within a 2D or 3D simulation might evolve to look radically different, they might share the same kind of evolving logic. For example, both a 2D and a 3D environment could contain a-lifes that used something like the Noble Ape brain to interact with their &lt;span class="yshortcuts" id="lw_1244490433_2" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; border-bottom-style: dashed; border-bottom-width: 1px; border-bottom-color: rgb(0, 102, 204); cursor: pointer; "&gt;host environments&lt;/span&gt;, while these same environments could simulataneously host a-lifes that used different kinds of evolvable controllers.&lt;br /&gt;&lt;br /&gt;An a-life in VatLife therefore has two genomes, much as a cell has both &lt;span class="yshortcuts" id="lw_1244490433_3" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;nuclear DNA&lt;/span&gt; and &lt;span class="yshortcuts" id="lw_1244490433_4" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; cursor: pointer; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; background-position: initial initial; "&gt;mitochondrial DNA&lt;/span&gt;. The first genome is used by its &lt;span class="yshortcuts" id="lw_1244490433_5" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;host environment&lt;/span&gt; to produce the a-life's initial phenotype, and the second which specifies its initial &lt;span class="yshortcuts" id="lw_1244490433_6" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;control logic&lt;/span&gt;. It also contains an ID to the controller that interprets the second genome to produce an initial brain, and interpret it against its host environment. Just as our brains are a product of both biological evolution and development after birth in response to our environment, the idea is that even something like a &lt;span class="yshortcuts" id="lw_1244490433_7" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;neural net&lt;/span&gt; would benefit from an initial seeding from a genome that evolved through &lt;span class="yshortcuts" id="lw_1244490433_8" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; cursor: pointer; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; background-position: initial initial; "&gt;natural selection&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A nice benefit of this structure is that you can author environments and controllers separately, which is particularly useful when the behaviors are not entirely determined from the phenotype. So you can author a simulation and immediately have a-lifes with evolving brains attempting to exploit the constraints of your simulation.&lt;br /&gt;&lt;br /&gt;It would also be possible for a VatLife a-life to cross over from one environment to the next, although since each environment would intepret the phenotype-controlling genome differently, it would probably not be likely to succeed.&lt;br /&gt;&lt;br /&gt;This model allows for a very different kind of interactions between simulations, one that's less focused on creating a common vocabulary so simulations can interact on a high level, and more focused on leveraging existing code for faster development of evolutionary simulations. At the  same time, there's no reason why a VatLife simulation couldn't communicate with other Biota Eve style simulations.&lt;br /&gt;&lt;br /&gt;A demonstration of VatLife is hosted at &lt;a target="_blank" href="http://www.ripplingloop.com/" style="line-height: 1.2em; text-decoration: none; color: rgb(0, 51, 153); outline-style: none; outline-width: initial; outline-color: initial; "&gt;&lt;span class="yshortcuts" id="lw_1244490433_9" style="line-height: 1.2em; outline-style: none; outline-width: initial; outline-color: initial; "&gt;www.ripplingloop.com&lt;/span&gt;&lt;/a&gt;, which currently has a simple environment hosting a-lifes that can use one of two controllers to interact with their environment. Links to source code and to my blog are also on that page.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-8591132430832032559?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/8591132430832032559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=8591132430832032559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/8591132430832032559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/8591132430832032559'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2009/06/vatlife-update.html' title='VatLife update'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-2279331336263226706</id><published>2008-10-08T02:36:00.000-07:00</published><updated>2008-10-08T02:43:44.151-07:00</updated><title type='text'>No, this is IT!</title><content type='html'>Really, I mean it. ;)&lt;br /&gt;&lt;br /&gt;Apart from data persistency, the main features are in place, the performance is much better, and the source code is posted. Share and enjoy.&lt;br /&gt;&lt;br /&gt;If anyone has luck creating a kick ass controller or environment, I'd love to hear about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-2279331336263226706?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/2279331336263226706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=2279331336263226706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2279331336263226706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2279331336263226706'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/10/no-this-is-it.html' title='No, this is IT!'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-6899429085534563412</id><published>2008-10-03T02:31:00.000-07:00</published><updated>2008-10-03T02:35:37.943-07:00</updated><title type='text'>okay, but that's IT!</title><content type='html'>I promised myself I'd stop working on this. My goal is to put together some rudimentary documentation, post the source and be done with it for a while. But lying in bed tonight unable to sleep seemed unproductive, so I implemented another selection strategy in addition to the generational/constant population approach, which is to killing off all a-lifes below an energy threshold and breeding those above. This now happens pretty frequently, and the results seem to be much faster evolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-6899429085534563412?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/6899429085534563412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=6899429085534563412' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6899429085534563412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6899429085534563412'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/10/okay-but-thats-it.html' title='okay, but that&apos;s IT!'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-7432840034121442315</id><published>2008-10-02T15:31:00.000-07:00</published><updated>2008-10-02T15:53:21.572-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JRXA-HrqKZ8/SOVQtmw-41I/AAAAAAAABO8/D2u1T31ssQg/s1600-h/VatLife.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_JRXA-HrqKZ8/SOVQtmw-41I/AAAAAAAABO8/D2u1T31ssQg/s320/VatLife.png" alt="" id="BLOGGER_PHOTO_ID_5252693284827882322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An image from VatLife - the polygonal environment, anyway. Check out the critters on the upper right, which seemed for a while to be about to take over the whole top surface. That line of critters did extend to the left for a while, under another critter evolved that messed up their scene.&lt;br /&gt;&lt;br /&gt;I think the constant population selection scheme is unfair to the successful adaptations. But who said a-life is fair?&lt;br /&gt;&lt;br /&gt;www.ripplingloop.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-7432840034121442315?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/7432840034121442315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=7432840034121442315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7432840034121442315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7432840034121442315'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/10/image-from-vatlife-polygonal.html' title=''/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JRXA-HrqKZ8/SOVQtmw-41I/AAAAAAAABO8/D2u1T31ssQg/s72-c/VatLife.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-2423398783295337794</id><published>2008-10-01T12:43:00.001-07:00</published><updated>2008-10-01T12:43:48.291-07:00</updated><title type='text'>new improved VatLife posted</title><content type='html'>A fresh new version can be found at www.ripplingloop.com. Spore it ain't, but I think the scientific underpinnings are better. ;)&lt;br /&gt;&lt;br /&gt;So what are all these shapes and lines about?&lt;br /&gt;&lt;br /&gt;First off, VatLife is a platform that separates the "environment" that creatures inhabit (which includes their physical form) from their "controllers", which contains logic for how each creature interacts with its environment. The thinking here is that any a-life can use any controller in any environment, and thus could migrate from one environment to another.&lt;br /&gt;&lt;br /&gt;Because the environments and controllers are separate from VatLife and are loaded dynamically, what you're seeing isn't VatLife itself, but VatLife running a simulated environment with simulated controllers. The reason this is exciting to me is that someone out there could write a better evolvable controller, upload it, and it would just work in this environment (or any VatLife environment).&lt;br /&gt;&lt;br /&gt;Enough preamble. The way this particular environment works is that each a-life has the physical form of a polygon, and will gain energy when "sunlight" (the vertical yellow lines) hits a face. Note that polygons can shade other polygons. Every a-life also loses energy each turn. The energy is shown by the polygon's color. Brighter colors mean higher energy, gray means low energy.&lt;br /&gt;&lt;br /&gt;The simulation starts by generating twenty a-lifes using randomly generated genomes and randomly selected controllers. I've supplied two different controllers, neither of which are particularly good. The green polygons use one controller and the red polygons use another. The VatLife produces a polygon for an a-life by interpreting its genome. Complex polygons are allowed, but since they shade themselves, they're quickly selected against.&lt;br /&gt;&lt;br /&gt;Periodically, the lowest-energy 50% are killed, and the top 50% are reproduced (with random mutations) to maintain a constant population. When this happens, you'll see a new "Generation #x" appear in the message box. I also give the existing a-life a good shake, so the new ones don't just settle on top of the old ones and shade them out.&lt;br /&gt;&lt;br /&gt;So, what do the controllers get to do? Same as any VatLife controller - it can read and write pin values. In fact, I basically reused the controllers I'd used in the VatLife demo from two month ago. The environment handles pin I/O this way:&lt;br /&gt;&lt;br /&gt;1) For an a-life, there are as many pins as there are polygon faces, with no child pins.&lt;br /&gt;&lt;br /&gt;2) Each pin returns a value from 0 to 1 based on the amount of sunlight that polygon face is receiving.&lt;br /&gt;&lt;br /&gt;3) Writing a value to a pin applies force to the polygon in the opposite direction that the face is pointing.&lt;br /&gt;&lt;br /&gt;In other words, if a polygon has 4 faces, and it's rotated so that face #2 is on the bottom, reading pin #2 will return 0 (no sunlight) and writing to pin #2 will propel the a-life upwards.&lt;br /&gt;&lt;br /&gt;If it's not obvious by now, that's what those magenta lines are about - they indicate the force that was applied from writing to a pin. If you see a line going on and off, that means the controller is using logic to control its propulsion.&lt;br /&gt;&lt;br /&gt;Incidentally, the physics here isn't quite accurate on many levels. The force is applied to the center of the mass, not the center of the face as is shown. It's also a reactionless jet, which I'm very excited to have invented. ;) There's no fluid dynamics in play, although the top area above the blue background is a high gravity zone, which gives it some properties of being "above the water line".&lt;br /&gt;&lt;br /&gt;Unfortunately, there's no data persistence - the simulation starts when you bring up the page and ends when you close it. With data persistence, you could have multiple environment in the central repository. Different users could sign in and simulate an environment for a number of turns, and evolved a-lifes could migrate from one to the other.&lt;br /&gt;&lt;br /&gt;Unfortunately, all of that will have to wait, as I'm needing to turn my focus away from my hobby - and I'm curious to see if other people see value in this platform before investing more time in it.&lt;br /&gt;&lt;br /&gt;I'll try to make the source code and some basic documentation available soon. Gerald de Jong has graciously offered to give it a code review, which is like having Leonardo da Vinci for your first year art teacher, so I will be polishing it first. This will be entirely open source.&lt;br /&gt;&lt;br /&gt;Feedback, comments, questions are appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-2423398783295337794?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/2423398783295337794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=2423398783295337794' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2423398783295337794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2423398783295337794'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/10/new-improved-vatlife-posted.html' title='new improved VatLife posted'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-6012341134236201660</id><published>2008-09-30T01:12:00.000-07:00</published><updated>2008-09-30T01:30:26.288-07:00</updated><title type='text'>VatLife online</title><content type='html'>In advance of tomorrow's GT meeting, I have my my first online version of VatLife up at &lt;a target="_blank" href="http://www.ripplingloop.com/"&gt;&lt;span class="yshortcuts" id="lw_1222763260_0"&gt;www.ripplingloop.com&lt;/span&gt;&lt;/a&gt;. Comments are welcome.&lt;br /&gt;&lt;br /&gt;Right now I have a single environment and two different single controllers (which are almost identical), both dynamically loaded from &lt;span class="yshortcuts" id="lw_1222763260_1"&gt;JAR files&lt;/span&gt;. In this environment, each a-life is a simple 2D polygon of up to five vertices, and gains energy by having an upward facing face that isn't shadowed by another a-life. The energy of each a-life is gray when low and more saturated when high.&lt;br /&gt;&lt;br /&gt;Also, just to keep it interesting, the critters don't get energy if the "sunlight" hits them on the very top of the screen.&lt;br /&gt;&lt;br /&gt;I decided to give each critter two different genotypes: one used by the environment to determine the initial form, and one used by the controller to determine the mind. My original thought was to use the same for both, but decided this would prevent the possibility of critter migration between environments.&lt;br /&gt;&lt;br /&gt;In this environment, each "critter" has the same number of pins as it has faces, with the pin value returning the amount of energy that face received. Writing to a pin adds force in a particular direction.&lt;br /&gt;&lt;br /&gt;Periodically the worst performers (the lowest energy a-lifes) are killed off and the best performers are reproduced with occasional mutations.&lt;br /&gt;&lt;br /&gt;And incidentally, this could run way faster. I profiled it and found that the collision detection (from the Phys2D library I'm using) is taking about 90% of the time. I'm sure this could be cut down significantly. But of course, the environment is really just another &lt;span class="yshortcuts" id="lw_1222763260_2"&gt;proof of concept&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-6012341134236201660?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/6012341134236201660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=6012341134236201660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6012341134236201660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6012341134236201660'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/09/vatlife-online.html' title='VatLife online'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-8634447631401170656</id><published>2008-09-09T05:08:00.000-07:00</published><updated>2008-09-09T05:39:11.441-07:00</updated><title type='text'>insomnia + NetBeans = VatLife?</title><content type='html'>At least that's what I'm hoping.&lt;br /&gt;&lt;br /&gt;So I've switched from using Eclipse to using NetBeans IDE 1.6. Originally I was considering using JavaBeans as a component model, but that seemed like overkill. I looked into OSGi and Knopplerfish but found myself getting lost in documentation...and it again seemed like overkill.&lt;br /&gt;&lt;br /&gt;At the moment, I have controllers and environments dynamically loaded as JAR files. Nothing mindblowing there, but it's a good start.&lt;br /&gt;&lt;br /&gt;I really love the NetBeans IDE, even if I am using just a small fraction of it. Although it does have a few quirks I'm learning about, it's remarkably intuitive and just a GREAT tool for someone like me who's learning the language. The warnings are clear and helpful, the interface is intuitive and flexible, and it's just extremely well polished. I love the refactoring (just drag code from one package to another - or even one project to another - and it fixes all the references), the automatic code formatting, the list goes on.&lt;br /&gt;&lt;br /&gt;Excellent job, Sun engineers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-8634447631401170656?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/8634447631401170656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=8634447631401170656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/8634447631401170656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/8634447631401170656'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/09/insomnia-netbeans-vatlife.html' title='insomnia + NetBeans = VatLife?'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-5897582632129707076</id><published>2008-08-18T15:21:00.001-07:00</published><updated>2008-08-18T15:25:09.075-07:00</updated><title type='text'>No news...</title><content type='html'>...is, well, no news.&lt;br /&gt;&lt;br /&gt;VatLife is on hold for now. I've gotten busy with work, remodeling the houseboat and family visits. However, my wife is going to a five day conference in early September, and I'm planning to spend some time cranking on it while she's gone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-5897582632129707076?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/5897582632129707076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=5897582632129707076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/5897582632129707076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/5897582632129707076'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/08/no-news.html' title='No news...'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-3192583868738262456</id><published>2008-08-03T15:03:00.000-07:00</published><updated>2008-08-03T22:10:21.352-07:00</updated><title type='text'>It don't mean a thing if it ain't got that swing</title><content type='html'>Would jazz make any sense if you'd never walked through a city, heard a train whistle, knew speech patterns? Would blues make any sense if you never felt blue? Actually, would music make any sense at all if you'd never heard (or possessed) a heartbeat?&lt;br /&gt;&lt;br /&gt;This, oddly, is an inspiration for VatLife.&lt;br /&gt;&lt;br /&gt;Let's say the fitness function in a evolving environment is that a-lifes are rewarded if they can predict the next number in a sequence. So, let's say the sequence is 1, 2, 3, 4. It world not be difficult for most evolvable machines to predict the next number. 1, 2, 4, 8 would also be a fairly easy sequence to predict.&lt;br /&gt;&lt;br /&gt;Now, let's say the sequence is 3, 1, 4, 1, 5, 9. Clearly, these are the base 10 digits of pi, but since it's not a smooth problem space to go from the first two sequences to that one, I don't think there's any way for a-lifes to make that evolutionary jump. Not without some outside experience. And even then, it seems necessary for the a-life to learn the digits of pi, rather than to figure that sequence out. It seems pretty safe to say that there's never been a human being born on this planet who could predict the digits of pi without some kind of mathematical training.&lt;br /&gt;&lt;br /&gt;Could an a-life evolve in a different environment and gain the knowledge to be able to solve that problem? It's hard for me to picture that happening with that specific problem. But just as life experience in extra-musical domains is necessary to truly understand music, a-life experience from many different simulated environments may be necessary to solve the problem at hand.&lt;br /&gt;&lt;br /&gt;Incidentally, this may sound like AI training, but I'm talking specifically about breeding ALs that are capable problem solvers. Although...this does argue for individual VatLife creatures with life experience crossing from one environment to another, not just their genotypes and controller IDs. And perhaps a VM that is designed with the goal of allowing VatLife's to pass knowledge between individuals.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-3192583868738262456?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/3192583868738262456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=3192583868738262456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3192583868738262456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3192583868738262456'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/08/it-dont-mean-thing-if-it-aint-got-that.html' title='It don&apos;t mean a thing if it ain&apos;t got that swing'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-9195743053135684169</id><published>2008-08-01T17:00:00.000-07:00</published><updated>2008-08-02T19:01:46.956-07:00</updated><title type='text'>Better (artificial) living through chemistry?</title><content type='html'>Just got caught up with my Biota podcasts and GT presentations. I particularly enjoyed Bruce's presentation at Greythumb London.&lt;br /&gt;&lt;br /&gt;I believe it was in the London GT meeting that Bruce quoted a simulation author who said that there's always an IOU you have to write. In other words, there's always going to be a part of the simulation where you wave your hands a bit. This makes some sense...if you are trying to simulate the spread of a virus in a human population, it makes sense to simulate the mobility of the population, but why waste the effort simulating the internal combustion engines that are getting people from point A to point B?&lt;br /&gt;&lt;br /&gt;Actually, that's not such a great example, because no one would expect you to repay that IOU. We all know in abstract terms how cars allow people to move from here to there, and so it would be unreasonable to expect your poor CDC epidemiologist to have to model reality beyond the minimum needed to solve the problem.&lt;br /&gt;&lt;br /&gt;So, do we write an IOU that we have to repay when we create simulated organisms that use genetic information to control their form and behavior without actually modeling the underlying chemistry?&lt;br /&gt;&lt;br /&gt;I think it all depends on your perspective. If you're a biologist, or if you want to evolve something in your simulation that might exist in the real world, then you'll need a high adherence to reality in your simulation. But since all simulations fall short of reality, I think requiring accuracy is something of a losing game.&lt;br /&gt;&lt;br /&gt;Case in point: the three body problem. If you just have three objects that interact with each other  - for example, a planet, moon and sun - there's no way of exactly determining what effect each body has on the others. You can only approach a solution. So what if you have a billion bodies in interaction? And how far down do we take this...do we model subatomic particles, and then do we store their location OR their velocity?&lt;br /&gt;&lt;br /&gt;But let's say that we model atoms and molecules, and we have good approximations of their interactions. We ignore relativity and just use Newtonian physics. How large a world can we model? As fast as computers get, and even writing our IOUs, I'm skeptical that we could model a very large volume of space in real-time. Since it took something like two billion years for multi-cellular life to evolve in the vast oceans of Earth, I don't hold out too much hope we'd see this in a computer simulation.&lt;br /&gt;&lt;br /&gt;But if we did, what of it? Creationists would say that the simulation was flawed and created by proponents of evolution, and both charges would be true. It might be confirming evidence of evolution, but do we need more confirmation?&lt;br /&gt;&lt;br /&gt;So while I see this as a very interesting enterprise, I'm skeptical of this approach as yielding useful results. Interesting perhaps, but I'm not sure about useful.&lt;br /&gt;&lt;br /&gt;My personal preference at this point is to say: hey, evolution works, and it's given us these great design patterns - such as DNA and a central nervous system. What can else can we do with those design patterns? And then, like the CDC epidemiologist, we can make a simplified simulation that yields useful results without worrying about the tire pressure of the virus' host's car.&lt;br /&gt;&lt;br /&gt;All JMO.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-9195743053135684169?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/9195743053135684169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=9195743053135684169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/9195743053135684169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/9195743053135684169'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/08/better-artificial-living-through.html' title='Better (artificial) living through chemistry?'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-7215936313155974782</id><published>2008-07-31T11:37:00.000-07:00</published><updated>2008-07-31T17:43:50.858-07:00</updated><title type='text'>Open-sourcing VatLife</title><content type='html'>I just set up an SourceForge location for VatLife.&lt;br /&gt;&lt;br /&gt;However, I don't plan to upload it just yet. While I just don't have the time, resources or knowledge to develop the "perfect" framework, and my plan was always to release a rough cut that might inspire others or be picked up by better developers than I, for VatLife to get any traction at all I think it will need some documentation and better examples. I'd rather have this make a splash later than a thud now.&lt;br /&gt;&lt;br /&gt;Given that this is a side project of mine and I don't have that much spare time to work on it, let's figure it will be at least a few weeks before this goes on-line.&lt;br /&gt;&lt;br /&gt;I consider that the GreyThumb SV presentation was a launch of a concept more than a launch of the technology itself - and again, I'd welcome feedback of all sorts. Well, most sorts anyway. ;)&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-7215936313155974782?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/7215936313155974782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=7215936313155974782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7215936313155974782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7215936313155974782'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/07/open-sourcing-vatlife.html' title='Open-sourcing VatLife'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-7734467680541854658</id><published>2008-07-30T03:03:00.000-07:00</published><updated>2008-07-30T17:57:05.642-07:00</updated><title type='text'>In defense of the unreal</title><content type='html'>I attended GreyThumb earlier tonight and presented VatLfe, and am too buzzed on adrenaline and a can of Coke I guzzled earlier to go to sleep just yet. Having given up sugar for the past few weeks, that single can sent me flying.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall, I thought the presentation went reasonably well. It was extremely well attended and a fairly good mix of people. At this moment, I'd be hard pressed to say what the reaction was to my presentation. At times I felt I'd made it too basic, at other times too technical...and then there were the moments where I felt I was transparently making it up on the spot. Zann's talk and mine were different enough that I'm not sure if the combined brainstorming session entirely worked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the plus side, I was glad I'd gotten the software to the proof of concept stage, and was &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;REALLY&lt;/span&gt; glad Osher got the projectors working. When the projectors cut out on Zann, I was worried I was going to have to talk my way through it, and that would have been ugly. Without the demo, I'm afraid it would have made even less sense.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I believe the reaction to VatLife fell into four camps:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Those who found it incomprehensible or boring (hopefully a small minority).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Those who were interested in its possibilities, and perhaps would even use it.&lt;/li&gt;&lt;li&gt;Those who were at least mildly appalled by how it played fast and loose with biology.&lt;/li&gt;&lt;li&gt;Those who view this as related to Artificial Intelligence and not Artificial Life.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;During the brainstorming session, that last view was expressed pretty vocally. I frankly don't really understand it, unless you take the view that an organism has to exist in the real world to be considered life. This seems somewhat prejudicial to me. Why should A-Life's be given less respect simply because they don't exist? I'm considering leading a march to protest this unfair treatment, billions of non-existent A-Life's marching behind me, of course.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seriously, my feeling is that simulated organisms within an evolutionary simulation &lt;span class="Apple-style-span" style="font-style: italic;"&gt;are&lt;/span&gt; artificial life. It's a different sort of artificial life than a real-world bacteria containing a designed genome, but it's still AL in my opinion - at least if you can get past the fact that the environments are either simplistic representations or may bear little resemblance to our own reality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To point #3...I am sympathetic to this viewpoint. Frankly, I do feel slightly uncomfortable borrowing rudimentary principles of biology and incorporating them into my simulations, as if I were some New Ager appropriating bits of various religions for my own without fully understanding them. However, in the same way that flight was inspired by birds but airplanes do not flap their wings, I think it's legitimate to learn from nature without being compelled to copy it.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But perhaps both of these last points beg the question: what is it good for? If we're evolving stuff that doesn't teach us about actual biology, and doesn't necessarily translate into the real world, isn't it simply a toy?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, my hope is that VatLife could support simulations involving real world physics, so objects that evolved could be built in the real world. But putting that aside, why should simulated environments have to resemble our own?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've used this analogy before - chicken breeders may select for chickens that have meatier breasts. This is not an adaptive trait in the real world, so in a sense, breeding chickens puts them in an artificial environment with an artificial fitness function to achieve a specific goal. In our simulated environments, we can lower gravity, or make representations of inanimate objects breed, or even impose conditions and fitness functions that have no real world analogues at all. Why not breed AL's like chickens to serve our own purposes, whether or not the environments and selection criteria have analogues in "real" biology?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ultimately, I believe the technology of evolving computer systems will have enormous implications that will touch all of our lives in very real ways. While the Evogrid and perhaps Vatlife may be interesting tools for exploring biological evolution, my personal interest is in what they can teach us about evolvable software. And if that leads to the emergence of Artificial Intelligence, then so be it. ;)&lt;br /&gt;&lt;br /&gt;Hate to spoil a perfectly good closing line, but I did want to add that I did get some positive and encouraging interest in this technology. The comparison to MVC architecture made me happy, the use of Java as a foundation platform seemed to make the crowd happy, and OSGA is apparently something I need to learn.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-7734467680541854658?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/7734467680541854658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=7734467680541854658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7734467680541854658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/7734467680541854658'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/07/in-defense-of-unreal.html' title='In defense of the unreal'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-6901754337809815738</id><published>2008-06-29T11:52:00.000-07:00</published><updated>2008-06-29T11:57:36.665-07:00</updated><title type='text'>source code for Micropond v1</title><content type='html'>Due to the overwhelming demand for Micropond source code (I think I've been asked twice, but I'm easily overwhelmed), I've decided to go ahead and post it.&lt;br /&gt;&lt;br /&gt;So here it is. It's written in C++ and MFC, and is poorly documented and is totally unsupported. Caveat emptor!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.badongo.com/file/10127772"&gt;MicroPond v1. source code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-6901754337809815738?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/6901754337809815738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=6901754337809815738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6901754337809815738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/6901754337809815738'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/06/source-code-for-micropond-v1.html' title='source code for Micropond v1'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-3420269395937058845</id><published>2008-06-26T12:41:00.000-07:00</published><updated>2008-06-26T12:45:02.801-07:00</updated><title type='text'>This is your brain. This is your brain in a vat. This is your brain in a vat on the EvoGrid.</title><content type='html'>&lt;span style="font-size: 10pt; font-family: trebuchet ms;"&gt;&lt;o:p&gt;&lt;/o:p&gt;You're undoubtedly familiar with some form of the brain in the vat argument, which suggests that your brain might actually not be connected to a nervous system connected ultimately to muscles and sense organs, but instead to a computer that simply receives the outputs of your brain, runs them through a giant virtual reality simulation and simulates inputs. Yeah, Descartes first considered it, and then there was that little film you might have seen called &lt;span style="font-weight: bold;"&gt;The Matrix&lt;/span&gt;. Sigh.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;As tired as this concept is, I think it could have a great application towards a generalized artificial life platform, which could play really well on the &lt;a href="http://www.evogrid.org/"&gt;&lt;span style="font-weight: bold;"&gt;EvoGrid&lt;/span&gt;.&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;What the model gives us is a layer of abstraction. Let’s say our A-Lifes are simply brains in a vat, hooked up to a computer simulation that processes their inputs and outputs. This model gives us the ability to separate the evolution of the control code from the simulation, so that the control code could theoretically be connected to any simulation. Perhaps the control code is operating a simulated robot, or perhaps it’s responding to musical notes. Maybe it’s in a 2D environment, or maybe a 3D environment. The point is that the “simulation” is a black box from the point of view of the A-Life.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Perhaps this is sounding more like AI than &lt;st1:state st="on"&gt;&lt;st1:place st="on"&gt;AL&lt;/st1:place&gt;&lt;/st1:State&gt;, to which case I plead somewhat guilty…although I frankly am more interested in evolution as a creative force than I am in these distinctions. But&lt;o:p&gt;&lt;/o:p&gt; what about the morphology of these ALifes? In our case, we’re born with more or less the same kinds of bodies with the same kinds of inputs and outputs. But anything is possible in simulations, and so I propose that some simulations might choose to interpret “outputs” as instructions to change the morphology. Perhaps in one simulation, writing “3” to pin #2 would a new limb to be generated, along with new inputs and outputs. In another simulation, every ALife might control the same make of robot.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Here’s my proposal for a new generalized ALife platform, which I’ll call &lt;b style=""&gt;VatLife&lt;/b&gt;. The intent is to make the environment as much as a black-box as possible, to separate evolutionary computation from simulations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;The main classes/components are:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;            &lt;b style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;    VatLifeEnvironment&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    VatLife&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    VatLifeGenotype&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    VatLifePhenotype&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    VatLifeMind&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    VatLifeController&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: trebuchet ms;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;Here's the basic design. A &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt; may contain a number of objects, which can include &lt;b style=""&gt;VatLife&lt;/b&gt; artificial life forms. It maintains information about those objects (the &lt;b style=""&gt;VatLifePhenotype) &lt;/b&gt;and handles all of their interactions, as well as any physics (if applicable). This is meant to be a “base class”, so there may be many different types of &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt; simulations with different properties. Each &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt; should essentially determine the fitness function of the objects within it. This could be as general as determining that one &lt;b style=""&gt;VatLife &lt;/b&gt;has eaten another, or as specific as rewarding individual &lt;b style=""&gt;VatLife&lt;/b&gt; objects based on their ability to replay a series of inputs.&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Each &lt;b style=""&gt;VatLife&lt;/b&gt; would contain a &lt;b style=""&gt;VatLifePhenotype, VatGenome&lt;/b&gt;, &lt;b style=""&gt;VatMind&lt;/b&gt; and a reference to a &lt;b style=""&gt;VatLifeController. &lt;/b&gt;The &lt;b style=""&gt;VatLifePhenotype&lt;/b&gt; is used by the parent’s &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt;, and will be treated (except perhaps for simple initialization purposes) as a black box by the &lt;b style=""&gt;VatLife&lt;/b&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt;"&gt;The &lt;b style=""&gt;VatLifeController&lt;/b&gt; would be a program that has two main tasks. The first is to take the &lt;b style=""&gt;VatGenome&lt;/b&gt; and produce a &lt;b style=""&gt;VatMind,&lt;/b&gt; as well as an initial &lt;b style=""&gt;VatLifePhenotype&lt;/b&gt;. The second is to respond to inputs and produce outputs by interpreting the &lt;b style=""&gt;VatMind&lt;/b&gt; – but &lt;b style=""&gt;not&lt;/b&gt; by referencing the &lt;b style=""&gt;VatLifePhenotype&lt;/b&gt; directly. Instead, it might read input pin #2 from the &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt; it’s in, which could get data based on the phenotype. For example, this could return the relative brightness that the left “eye” is receiving, the angle of which is controlled by another pin.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;To make this work across different types of &lt;b style=""&gt;VatLifeEnvironment&lt;/b&gt; simulations, the &lt;b style=""&gt;VatLifeController &lt;/b&gt;might be coded in something like Java bytecode. This way, when one &lt;b style=""&gt;VatLife&lt;/b&gt; enters a simulation from another, the new &lt;b style=""&gt;VatLifeEnvironment &lt;/b&gt;might note that the new &lt;b style=""&gt;VatLife&lt;/b&gt; uses a different controller and automatically download it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;A word on input and output pins – the basic idea here is very simple. A &lt;b style=""&gt;VatLife&lt;/b&gt; object might have a set of hierarchical pins, each of which can be read and written to. To use a grossly simplified model of the human body, you could say that we have four top-level pins (our two arms and two legs), with our two arms each containing five child pins controlling to our fingers. Each pin when written to activates a muscle, and when read returns the level of strain.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;Each &lt;b style=""&gt;VatLifeController&lt;/b&gt; should be given a certain amount of processing time, and can also be called when input pin values change, executing “attached code” (essentially interrupt processing).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;While I’m not claiming this should be the design for the EvoGrid, I think it might be a very interesting design for an “island” within it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;One open question I have is how &lt;b style=""&gt;ALife&lt;/b&gt;’s will breed. Should there be a standard way of breeding different &lt;b style=""&gt;VatGenome&lt;/b&gt; objects (and is there a generic representation?) and leave the interpretation open to the &lt;b style=""&gt;VatLifeController&lt;/b&gt;s, or should the &lt;b style=""&gt;VatLifeController&lt;/b&gt;s be responsible for the breeding? I’m inclined to go the first route, but perhaps the more flexible solution is to give the &lt;b style=""&gt;VatLifeController&lt;/b&gt; a crack at it first, and if it doesn’t handle it, fall back to a generic handler.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="font-family: trebuchet ms;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;Any f&lt;/o:p&gt;eedback would be much appreciated!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-3420269395937058845?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/3420269395937058845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=3420269395937058845' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3420269395937058845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3420269395937058845'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/06/this-is-your-brain-this-is-your-brain.html' title='This is your brain. This is your brain in a vat. This is your brain in a vat on the EvoGrid.'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-3849993739427201426</id><published>2008-06-03T14:49:00.000-07:00</published><updated>2008-06-03T14:51:51.962-07:00</updated><title type='text'>YouTube video</title><content type='html'>&lt;p&gt;Here's a YouTube video I created for MicroPond v1. Unfortunately, the audio is a bit garbled and out of sync at times, as MicroPond uses a ton of cycles when run at full-speed and interfered with the video recording - but it's still worth a watch.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=GuWJ1ZiwO2g"&gt;http://www.youtube.com/watch?v=GuWJ1ZiwO2g&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-3849993739427201426?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/3849993739427201426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=3849993739427201426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3849993739427201426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3849993739427201426'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/06/youtube-video.html' title='YouTube video'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-3727767519467676918</id><published>2008-06-02T22:27:00.000-07:00</published><updated>2008-06-02T22:59:27.384-07:00</updated><title type='text'>A vaguely interesting critter (MicroPond V2)</title><content type='html'>&lt;a href="http://bp2.blogger.com/_JRXA-HrqKZ8/SETWc6cZKeI/AAAAAAAAAxg/EzCJmEsoCVQ/s1600-h/two_critters.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207522861360163298" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://bp2.blogger.com/_JRXA-HrqKZ8/SETWc6cZKeI/AAAAAAAAAxg/EzCJmEsoCVQ/s320/two_critters.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;-Could these be the "Omega-Critter"?&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;This was a surprise to me. I thought it would take eight segments to produce a critter that protected its photosynthesize segment (the green pixel). But random mutatation and natural selection found this simpler solution, which is seven segments long. Because critters can't attack diagonally, the center area is safe.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-3727767519467676918?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/3727767519467676918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=3727767519467676918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3727767519467676918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3727767519467676918'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/06/two-vaguely-interesting-critters.html' title='A vaguely interesting critter (MicroPond V2)'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_JRXA-HrqKZ8/SETWc6cZKeI/AAAAAAAAAxg/EzCJmEsoCVQ/s72-c/two_critters.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-3684177071558212772</id><published>2008-06-01T22:59:00.000-07:00</published><updated>2008-06-02T21:50:41.905-07:00</updated><title type='text'>MicroPond v2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_JRXA-HrqKZ8/SESnFYgEYvI/AAAAAAAAAxY/vCVwiKYGYJY/s1600-h/MicroPond+v2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_JRXA-HrqKZ8/SESnFYgEYvI/AAAAAAAAAxY/vCVwiKYGYJY/s320/MicroPond+v2.jpg" alt="" id="BLOGGER_PHOTO_ID_5207470780065276658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In MicroPond v1, there's food and then there's critters. The evolution of the critters is simply driven by competition between the critters for food, and the food does not evolve.&lt;br /&gt;&lt;br /&gt;For the second version, I wanted the critters to eat each other in the hopes that this would drive critter evolution naturally. My thought was that the evolution of predators should drive the evolution of natural defenses, which should in turn drive smarter predators.&lt;br /&gt;&lt;br /&gt;Additionally, I planned for the "critters" in MicroPond V2 to develop a richer instruction set. While one goal I had for MicroPond V1 was to create an evolving ALife simulation that could be understood by a non-programmer, I hoped for more interesting instruction sets to evolve in V2. In V2, some instructions map to segments, while others do not. For example, while there's a Photosynthesize instruction that maps to a green pixel, an Eat instruction that maps to a red pixel, there are other instructions that don't map to segments at all.&lt;br /&gt;&lt;br /&gt;One problem I faced was coming up with an "attack" instruction that allowed for intelligent strategies to develop. If you can't defend yourself from attack, there's no need for much intelligence on the part of the attacker or prey. My solution was this: a critter gains energy each turn for every exposed Photosynthesize instruction (a green pixel), but the Photosynthesize instruction leaves a critter open to attack. Normally one critter cannot move on top of another, but if a critter attempts to move over another critter's green/photosynthesize segment, it will eat the critter.&lt;br /&gt;&lt;br /&gt;One defensive strategy is for a critter to curl up around its photosynthesize instruction, so no part is exposed. Colonies also form, which provides lesser protection.&lt;br /&gt;&lt;br /&gt;There are three territories in MicroPond V2: a shaded center square in which photosynthesis operates at reduced efficiency (every time a Photosynthesis instruction executes inside the center square it produces a third of the energy compared to elsewhere), a small square in the lower left that contains randomly placed gray obstacles, with a solid wall on its right side, and the remaining area which is unobstructed and photosynthesis runs at full efficiency.&lt;br /&gt;&lt;br /&gt;Also, MicroPond v2 is multithreaded, and so two separate "worlds" run simultaneously. There's no synchronization between the worlds, but it uses my dual-core process to good effect, and it's interesting to see how differently they can develop. I'm curious if this could be a useful metric for the "interestingness" of a particular simulation - let it run several times for a set number of turns and see how different the end result is between runs. Also, in a future version I'd like critters to migrate from one "world" to another.&lt;br /&gt;&lt;br /&gt;Finally, there's a pretty nice close-up view in MicroPond v2 that shows the individual "critters", along with their head, orientation, and a bar of their energy level on the tail.&lt;br /&gt;&lt;br /&gt;The program can be downloaded here:&lt;br /&gt;&lt;a href="http://www.badongo.com/file/9705866"&gt;http://www.badongo.com/file/9705866&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-3684177071558212772?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/3684177071558212772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=3684177071558212772' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3684177071558212772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/3684177071558212772'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/06/micropond-v2.html' title='MicroPond v2'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_JRXA-HrqKZ8/SESnFYgEYvI/AAAAAAAAAxY/vCVwiKYGYJY/s72-c/MicroPond+v2.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-2512261943275147172</id><published>2008-05-31T14:33:00.000-07:00</published><updated>2008-06-01T22:58:44.491-07:00</updated><title type='text'>MicroPond v1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_JRXA-HrqKZ8/SEOK4EHgr6I/AAAAAAAAAxQ/rQorIteIeBI/s1600-h/MicroPond+v1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_JRXA-HrqKZ8/SEOK4EHgr6I/AAAAAAAAAxQ/rQorIteIeBI/s320/MicroPond+v1.jpg" alt="" id="BLOGGER_PHOTO_ID_5207158289952976802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My first real foray into AL was what I'm now calling MicroPond v1. The original inspiration was the book &lt;span style="font-weight: bold;"&gt;Chaos &lt;/span&gt;by James Gliek, specifically the part where he discussed the chaotic nature of predator/prey populations. I set about to try to simulate this, and then realized that the predators needed rules. It was purely an afterthought to allow those predator rules to randomly mutate, but it soon became the main subject of my interest.&lt;br /&gt;&lt;br /&gt;In both MicroPond v1 and v2, "critters" are simple worm-like creatures on a 256 x 256 pixel 2D grid. They have a head which can be oriented up, down, left or right, and can contain multiple segments. They cannot travel over each other.&lt;br /&gt;&lt;br /&gt;In MicroPond v1, each critter contains a series of instructions which are executed sequentially, restarting at the beginning after the last instruction. Each critter is as long as the number of instructions. For example, "MZ&gt;" would be a three pixel long critter that would move, sleep, turn right and repeat.&lt;br /&gt;&lt;br /&gt;Critters gain energy by moving over green dots, which are randomly distributed, and lose energy each turn. If a Critter's energy level goes negative, it will die. If it exceeds an energy threshold, it produces a copy. If mutation is enabled, the copy may have a random mutation, which can be either randomly losing an instruction, gaining an instruction or having an instruction randomly changed.&lt;br /&gt;&lt;br /&gt;The executable (Windows only) can be downloaded here:&lt;br /&gt;&lt;a href="http://www.badongo.com/file/9689782"&gt;http://www.badongo.com/file/9689782&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You'll need to insert a critter to get the ball rolling. Start with "M", which will simply move forward, hit food and produce copies. Add mutation, and interesting results occur. Click on "Instruction Set" to view and enable/disable certain instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-2512261943275147172?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/2512261943275147172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=2512261943275147172' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2512261943275147172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/2512261943275147172'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/05/micropond-v1.html' title='MicroPond v1'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JRXA-HrqKZ8/SEOK4EHgr6I/AAAAAAAAAxQ/rQorIteIeBI/s72-c/MicroPond+v1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-799872550211773283.post-9212456437109210846</id><published>2008-05-31T14:26:00.000-07:00</published><updated>2008-05-31T14:32:54.079-07:00</updated><title type='text'>Introduction, my ALIFE projects</title><content type='html'>My name is Scott Schafer. While I've been involved in developing commercial software for about twenty years now, I've had an unprofitable hobby in the field of ALife.&lt;br /&gt;&lt;br /&gt;I've only recently found a community who share my interests - and I'm very excited where this field seems to be headed. So in the interests of sharing my work and discussing it further, I've created this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/799872550211773283-9212456437109210846?l=scottschaferalife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scottschaferalife.blogspot.com/feeds/9212456437109210846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=799872550211773283&amp;postID=9212456437109210846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/9212456437109210846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/799872550211773283/posts/default/9212456437109210846'/><link rel='alternate' type='text/html' href='http://scottschaferalife.blogspot.com/2008/05/introduction-my-alife-projects.html' title='Introduction, my ALIFE projects'/><author><name>Scott Schafer</name><uri>http://www.blogger.com/profile/16894652095365231201</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://3.bp.blogspot.com/_JRXA-HrqKZ8/SwMj1_fyMLI/AAAAAAAACAA/QwDVRYD5ovA/S220/head2.jpg'/></author><thr:total>0</thr:total></entry></feed>
