<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	
	<channel>
		<title>Bag of Souls</title>
		<link>http://www.bagofsouls.com</link>
		<description>unraveling artificial life</description>
		<language>en</language>
		<managingEditor>boris.schmid@gmail.com</managingEditor>
                <copyright>Copyright 2009</copyright>
		<generator>Pivot Pivot - 1.40.4: 'Dreadwind'</generator>
		<pubDate>Wed, 23 Dec 2009 19:20:09 +0100</pubDate>
		<ttl>60</ttl>
		
		
		
		
		<item>
			<title>Easily installing clojure and vimclojure using leiningen</title>
			<link>http://www.bagofsouls.com/entry/41/Easily_installing_clojure_and_</link>
			<comments>http://www.bagofsouls.com/entry/41/Easily_installing_clojure_and_#comm</comments>
                        <description><![CDATA[ These are the steps I follow to install a local working environment (as you can guess this post is more as a mental note for me, so I can remember what I have done).<b><i>Make a local bin directory.</i></b><br />
mkdir ~/bin<br />
cd ~/bin<br />
<br />
<b><i>Get Leiningen, and self-install it.</i></b><br />
wget http://github.com/technomancy/leiningen/raw/stable/bin/lein<br />
chmod +x lein<br />
lein self-install<br />
<br />
<b><i>Make a project directory, for example 'eden-3'</i></b><br />
mkdir ~/eden-3<br />
cd ~/eden-3<br />
<br />
<b><i>Make a project.clj file in ~/eden-3, detailing the dependencies</i></b><br />
<pre><br />
(defproject eden-3 "1.0.0"<br />
              :description "My own project"<br />
             :dependencies [[org.clojure/clojure "1.1.0-alpha-SNAPSHOT"]<br />
                             [org.clojure/clojure-contrib "1.0-SNAPSHOT"]<br />
                             [dk.brics.automaton/automaton "1.11.2"]]<br />
              :dev-dependencies [[org.clojars.ato/nailgun "0.7.1"] <br />
                                 [org.clojars/gilbertl/vimclojure "2.1.2"]]<br />
              :main eden)<br />
</pre><br />
<br />
<b><i>Make a src directory in ~/eden-3, and write the sourcecode of eden.clj in that directory</i></b><br />
<pre><br />
(import '(dk.brics.automaton Automaton RunAutomaton RegExp))<br />
(RegExp. "[123][12][13]")<br />
</pre><br />
<br />
<b><i>Auto-install the dependencies, as specified in project.clj</i></b><br />
cd ~/eden-3<br />
lein deps<br />
<br />
<b><i>Unpack the nailgun client and vimclojure vim scripts somewhere, and manually install them</i></b><br />
mkdir ~/temp<br />
cd ~/temp<br />
wget http://www.vim.org/scripts/download_script.php?src_id=11066<br />
unzip vimclojure-2.1.2.zip<br />
cd vimclojure-2.1.2<br />
mkdir ~/.vim<br />
cp -r autoload ~/.vim<br />
cp -r doc ~/.vim<br />
cp -r ftdetect ~/.vim<br />
cp -r ftplugin ~/.vim<br />
cp -r indent ~/.vim<br />
cp -r syntax ~/.vim<br />
cd ngclient<br />
make ng<br />
cp ng ~/bin<br />
<br />
<b><i>Setup your .vimrc</i></b><br />
<pre><br />
set nocompatible<br />
filetype plugin indent on<br />
syntax on<br />
<br />
let maplocalleader = ","<br />
<br />
let g:clj_highlight_builtins = 1<br />
let g:clj_highlight_contrib = 1<br />
let g:clj_paren_rainbow = 0<br />
let g:clj_want_gorilla = 1<br />
<br />
let vimclojure#NailgunClient = "/path/to/your/ng"<br />
<br />
set number<br />
set hidden<br />
set showmode<br />
set bs=2</pre><br />
<br />
<b><i>And you're ready to go. Just fire up the nailgun server manually, open the sourcecode in vim, and launch a repl with ",sr"</i></b> <br />
cd ~/eden-3<br />
java -server -cp 'src:classes:lib/*' com.martiansoftware.nailgun.NGServer 127.0.0.1 & <br />
vim src/eden.clj<br />
<br />
<b><i>Done!</i></b> ]]></description>
			<guid isPermaLink="false">41@http://www.bagofsouls.com</guid>
			<category>linkdump_bagofsouls</category>
			<pubDate>Wed, 21 Jan 2009 09:57:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>Choice-based wandering</title>
			<link>http://www.bagofsouls.com/entry/34/Choice-based_wandering</link>
			<comments>http://www.bagofsouls.com/entry/34/Choice-based_wandering#comm</comments>
                        <description><![CDATA[ I've written about different wandering algorithms in one of the sidetrack posts, but now it is time to decide and design an algorithm by which the craas move around. There's several that spring to mind. The first, and perhaps most well-known one is to separate the field of vision of a craa in three regions (left, right, forward), and let it navigate to the region which is the most attractive.Extensions of this three-field method would include more fields (closeby, far away), so that a tiger far away isn't taking precedence over quenching the craas' thirst at this water pool right now. A simplification of the <i>fields algorithm</i> would be to consider a single, circular field, and sum up all the vectors from all the impulses to obtain a direction.<br />
<br />
There is different ways to sum up. We could weight different impulses based on the strength of the emotions associated with them, and on the distance they are away from us. More complicated, you could also weight them on whether or not they are expected (using the craas memory to create an image of what is expected) and give special weight to unexpected things. The latter puts us into a little bit of trouble though.. what if a craa expects a lion to charge him and thus pays no attention anymore.<br />
<br />
Summing impulses can put you into a classical bit of trouble called <a rel="external" href="http://en.wikipedia.org/wiki/Buridan's_ass" title="donkey between two haystacks">Buridan's ass</a>, which actually occurs in <a rel="external" href="http://en.wikipedia.org/wiki/Metastability_in_electronics" title="metastability in electronics">reality</a> (although not neccesarily in donkeys), so we will have to see if the artifacts of a summing system are acceptable.<br />
<br />
One thing I do want is that next to perhaps weighting based on distance, weighting based on the current needs of the <i>craa</i>. How needs are managed and created will be the topic of another post. ]]></description>
			<guid isPermaLink="false">34@http://www.bagofsouls.com</guid>
			<category>bagofsouls</category>
			<pubDate>Wed, 04 Jun 2008 08:28:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>Wandering Algorithms</title>
			<link>http://www.bagofsouls.com/entry/7/Wandering_Algorithms</link>
			<comments>http://www.bagofsouls.com/entry/7/Wandering_Algorithms#comm</comments>
                        <description><![CDATA[ In a previous weblog, I had started to work on different algorithms by which <i>craas</i> could steer themselves through empty space. Spending time on this now seems something like a folly to me, as the algorithm I use now lets the animal steer themselves based on previous experiences. There is still some use in the older algorithms, for example if a certain group of animals isn't your focus of interest, and you just want to have them move around in your artificial world. I'll describe the different algorithms I used here, and refer to some of the literature.<br />
<br />
Part of them are in ruby / OpenGL (the previous language / graphics engine I used), and part of them are described in words.There are many many ways you could device a wandering algorithm, the most simple being perhaps the <b>venerable random walk</b> in which your entities are randomly moved into one of the available directions.<br />
<br />
The biological equivalent for animals of the random walk is the <b>forward random walk</b> (although it might often be called different). Its basic rule is that animal moves forward, and occasionally shifts into a random new direction. <br />
<br />
If turning at straight angles is not what you seek in your artificial life, then you can <b>smoothen</b> the angles in a random forward walk pattern by limiting the number of degrees your animals can turn in a single timestep. A few timesteps after a direction change, they'll have turned enough to be again aligned with the direction they were aiming for. An example of this algorithm, and how it looks is given below. The full code of the program is at the bottom of the page.<br />
<pre>#<b>smoothed random forward walk</b><br />
#<br />
@aim = rand(360) if rand < 0.001<br />
@angle = ((250 * @angle + angle_diff(@angle,@aim)) / 250.0) % 360<br />
</pre><p style="text-align:center;"><img src="http://bagofsouls.com/images/wandering_1.png" style="border:0px solid" title="Wandering algorithm (vector adapting to a randomly changing aim)" alt="Wandering algorithm (vector adapting to a randomly changing aim)" class="pivot-image" /></p><br />
<br />
A variant on the smoothed random forward walk is to let the direction of the animal change slightly every single timestep, rather than having a large change in direction ever so often. This approach doesn't have the straight lines of the random forward walk algorithms, and might be something you desire when you design a wandering algorithm.<br />
<pre># <b>wandering aim forward walk</b><br />
#<br />
# if the difference between the direction (angle) of the bird and its goal (aim) is<br />
# larger than 6 degrees, then the bird corrects for it (but slowly by 1-200th)<br />
diff = angle_diff(@angle,@aim).abs<br />
if diff > 6 then @angle = ((200 * @angle + diff) / 200.0) % 360 end<br />
# the aim is drifting randomly between 0 and 360 degrees<br />
@aim += 3 * (rand(3) - 1) #33% chance of not changing<br />
@aim = @aim % 360</pre><br />
<p style="text-align:center;"><img src="http://bagofsouls.com/images/wandering_2.png" style="border:0px solid" title="Wandering algorithm (vector adapting to a gradually drifting aim)" alt="Wandering algorithm (vector adapting to a gradually drifting aim)" class="pivot-image" /></p><br />
<br />
With these small alterations you can device a large number of wandering algorithms, but the these algorithms are mainly suitable for slow-moving animals, which do not experience inertia; for animals that always move at a constant speed; or for some obscure reason, houseflies which tend to ignore physics and just turn at straight angles while buzzing around ;).  If we add <i>inertia</i> and a <i>variable moving speed</i>, then we get behaviour which seem suitable for modelling animals that chase each other, or move fast in general (like birds).<br />
<pre># <b>acceleration/inertia random forward walk</b><br />
#<br />
# Every 700 timesteps pick a random direction, translate it to a vector, and<br />
# make sure that the amplitude of the vector is between 0.5 and 1, so that<br />
# the bird isn't flying at snail speed<br />
# (this example isn't really clear code-wise, apologies)<br />
if @passedsincelast > 700<br />
           begin<br />
              @accel  = rand(360).to_vector <br />
              end until @accel[0].abs > 0.5 and @accel[1].abs > 0.5          <br />
           @passedsincelast = 0<br />
        end<br />
<br />
        # moving<br />
        @vector[0] = (1000 * @vector[0] + @accel[0]) / 1001.0  # I'm not sure if it is still acceleration<br />
        @vector[1] = (1000 * @vector[1] + @accel[1]) / 1001.0  # when I describe it like this. it's more like a new vector</pre><br />
<p style="text-align:center;"><img src="http://bagofsouls.com/images/wandering_3.png" style="border:0px solid" title="Wandering algorithm (vector subjected to randomly (but speedy enough) acceleration)" alt="Wandering algorithm (vector subjected to randomly (but speedy enough) acceleration)" class="pivot-image" /></p><br />
<br />
<a rel="external" href="http://www.rug.nl/biologie/onderzoek/onderzoekgroepen/theoreticalbiology/peoplePages/hannoPage" title="Flocking sterling birds, Hanno Hildenbrandt">Hanno Hildenbrandt, of the university of groningen, netherlands,</a> has been doing something similar (but far more impressive) as this acceleration/inertia algorithm, by applying these basic physics, as well as gravity to a 3d swarm of flocking sterling birds, and combined these physics with crowd behaviour of large swarms of entities, as was previously done by the boids of <a rel="external" href="http://www.red3d.com/cwrsteer/Wander.html" title="Wandering behaviour">Craig W. Reynolds</a>.<br />
<br />
The code for the three ruby programs is included here:<br />
first and second:<br />
<a rel="external" href="/images/wandering_bird_12.rb" title="Wandering bird in ruby, algorithm 1 and 2" class="download"><img src="http://bagofsouls.com/pivot/pics/icon_file.gif" width="16" height="16" alt="Wandering bird in ruby, algorithm 1 and 2" class="icon" style="border:0;" /> </a><br />
third:<br />
<a rel="external" href="/images/wandering_bird_3.rb" title="Wandering bird in ruby, algorithm 3" class="download"><img src="http://bagofsouls.com/pivot/pics/icon_file.gif" width="16" height="16" alt="Wandering bird in ruby, algorithm 3" class="icon" style="border:0;" /> </a> ]]></description>
			<guid isPermaLink="false">7@http://www.bagofsouls.com</guid>
			<category>linkdump_bagofsouls</category>
			<pubDate>Fri, 16 May 2008 20:43:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>Task 1: associating food with foodsources</title>
			<link>http://www.bagofsouls.com/entry/33/Task_1_associating_food_with_f</link>
			<comments>http://www.bagofsouls.com/entry/33/Task_1_associating_food_with_f#comm</comments>
                        <description><![CDATA[ With the memory and the world in place, it is time to subject one <i>craa</i> to its first task: to learn in a field of objects that tree-objects and food-objects are associated (i.e., in their world food lies always adjacent to a tree, and poisonous plants always grow near rocks). The animal is not steering itself yet, but is forced in a random forward walk, and biting whatever it encounters.It works!  Given the world (part of it) pasted below, and the <i>craa</i> (@) wandering a 1000 steps, it has clearly associated (f)ood with (T)rees and (p)oison with (R)ocks. Not only that, but in this randomly created world. (N)eutral objects happen to be a lying close to food as well, and are associated as such. The references to (bite X) in the associative memories are actions of the craa it self, which also get added to the short-term memory as they occur, but this will only be interesting in the future, when craas have multiple actions to chose from.<br />
<br />
<pre><br />
. . . . N . . . . . . . . . . . p R . . . . . . . . . . . . . . . . .<br />
. T f . . . . . . f T . . . . R . . . . . . . . . . . . . . . . . . .<br />
. . . . . . . . . f . . . . . . N . . . . . . . . . . . . . . . . . R<br />
. . . . . . . . . . . . . . N . . . . . . . . . . . . . T f . p . . <br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R p . .<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p . . . <br />
N . . . . . N . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. . . . . . N N . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N <br />
. . . . . T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
. . . N . f . . . N . . . . . . . . . . . . . . . . . . . p R p .<br />
. . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . p N . .<br />
. . . . . T . . . . N . . . . . . . T . . . . . . . . . . . . . . . <br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f . . . <br />
. . . . . . . . . . f T . . . . . . . . . . . N . . . . . . . . . T <br />
. . . . . . . . . . . N . . . . . . . . . . N . . . . . . . . . . . .<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
N . . . . . . . . . . . . . . . . . . . . . . N . . . . . . . . . . .<br />
. . . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. . . . . . . . . T . . . . . . . . . . . . . . . . @ . R . . . . .<br />
. . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <br />
</pre><br />
<br />
The settings in this simulation were: 1000 timesteps, world of 40x40, short-term memory size of 7, long-term memory size of 50, 3 associations made each time an observation is transferred from short to long-term memory.<br />
<br />
<pre><br />
short-term memory:<br />
(T f N f T f f)<br />
<br />
associative longterm memory:<br />
       N  iaw    . N,   4 R,  20 T,  25 f,   . p,   1 (bite N),   . (bite R),   . (bite T),   . (bite f),   . (bite p), <br />
       R  iaw   16 N,   . R,  10 T,   2 f,  20 p,   1 (bite N),   . (bite R),   . (bite T),   . (bite f),   1 (bite p), <br />
       T  iaw   23 N,   2 R,   . T,  24 f,   . p,   . (bite N),   . (bite R),   1 (bite T),   . (bite f),   . (bite p), <br />
       f  iaw   25 N,   1 R,  21 T,   . f,   . p,   1 (bite N),   . (bite R),   1 (bite T),   1 (bite f),   . (bite p), <br />
       p  iaw   24 N,  19 R,   3 T,   4 f,   . p,   . (bite N),   . (bite R),   . (bite T),   . (bite f),   . (bite p), <br />
</pre><br />
<br />
If we want our craa to walk on its own, rather than be forced in a walk, it will need a motivation to chose a direction. It will need to be able to give an emotional positive value to food, and control its direction of walking based on the emotional value of a direction. The first attempts to implement this were to merely add these emotions as observations to the long-term memory, but this seemed to have some drawbacks (for one, if a craa had learned about poison, and would just pass by poisonous plants and avoid biting in them, the negative emotion associated with eating poisonous plants would slowly fade from its long-term memory, as it wasn't reaffirming that emotion over time anymore). A second option was to create a separate emotional longterm memory, in which positive, neutral and negative associations with certain objects or actions are stored, and this, for now, seems a more fruitful approach.<br />
<br />
Here is the arc code: <a rel="external" href="/images/arc-life.arc" title="craa-version1" class="download"><img src="http://bagofsouls.com/pivot/pics/icon_file.gif" width="16" height="16" alt="craa-version1" class="icon" style="border:0;" /> </a><br />
<br />
~bOR_ ]]></description>
			<guid isPermaLink="false">33@http://www.bagofsouls.com</guid>
			<category>bagofsouls</category>
			<pubDate>Mon, 12 May 2008 13:26:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>The name of the beast</title>
			<link>http://www.bagofsouls.com/entry/31/The_name_of_the_beast</link>
			<comments>http://www.bagofsouls.com/entry/31/The_name_of_the_beast#comm</comments>
                        <description><![CDATA[ Decided on a name for my artificial animals. Up to now I was calling them boids (after Reynolds work on flocking birds), critters (after my original professors work), and half a dozen other names, which gets confusing after a while. From now on, a single one of them will be a <i>cra</i>, and multiple ones will be referred to as <i>craas</i>.<br />
<br />
Artificial life has been given many different names before, and I will try to maintain a species-name list here of artificial lifeforms.First, the origin of <i>craas</i>: It is a reversal of an abbreviation of ARtificial Critters. As the code is written in <a rel="external" href="http://arclanguage.org" title="Arc, lisp / scheme like programming language">Arc</a> that name would have been confusing. The reversed word '<i>cra</i>' sounded more as a species of animals, and happened to be part of the word <a rel="external" href="http://en.wikipedia.org/wiki/Simulacrum" title="">Simulacra</a><br />
<br />
Earlier artificial lifeforms were named:<br />
<ul><br />
<li><b>Boids - 1987</b> Craig W. Reynolds  <a rel="external" href="http://www.red3d.com/cwr/papers/1987/boids.html" title="Link to the boids paper webpage">The original boids paper</a><br />
<li><b>Digital Organism - 1992</b> Thomas Ray, An approach to the synthesis of life, In: Langton CG, Taylor C, Farmer JD, Rasmussen S (eds). Proc. of Artificial Life II, p. 371. Addison-Wesley<br />
<li><b>Critters - 2001</b> Paulien Hogeweg <a rel="external" href="http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6T2K-44GM1N4-1&_user=3021451&_rdoc=1&_fmt=&_orig=search&_sort=d&view=c&_acct=C000021878&_version=1&_urlVersion=0&_userid=3021451&md5=cebfee6dee59c4c5598d27eb7abd86ee" title="P Hogeweg, doi:10.1016/S0303-2647(01)00178-2  ">Computing an organism: on the interface between informatic and dynamic processes</a><br />
<li>more to be added.<br />
</ul><br />
<br />
Link to similar work:<br />
http://www.msu.edu/~pennock5/research/EI.html<br />
history:<br />
http://devolab.cse.msu.edu/software/avida/background.php ]]></description>
			<guid isPermaLink="false">31@http://www.bagofsouls.com</guid>
			<category>bagofsouls</category>
			<pubDate>Tue, 12 Feb 2008 17:20:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>Memory</title>
			<link>http://www.bagofsouls.com/entry/27/Memory</link>
			<comments>http://www.bagofsouls.com/entry/27/Memory#comm</comments>
                        <description><![CDATA[ Memory of the critters will be a fairly simple thing to start with. The short term memory can be imagined as a simple tube, in which the experiences of the animal are entered on one side, and slowly shoved through the tube as more new experiences are added. Experiences come in three forms: observations, actions (your own), effects (for example, a change in your energy state).At a fairly early point in life the tube will be full, and experiences will `fall out' of the tube at the other side. These experiences are stored into the long-term memory of the critter, and as they are stored, they associate themselves with a few of the experiences that are currently in the short-term tube. <br />
<br />
<p style="text-align:center;"><img src="http://bagofsouls.com/images/shorttermmemory.png" style="border:0px solid" title="short-term memory of a critter" alt="short-term memory of a critter" class="pivot-image" /></p><br />
<br />
Later on, when the animal encounters an experience for which it has a memory, this memory will also give the animal acces to some predictions about what is going to happen next. what actions it performed in the past, and what effect these actions had. This (hopefully) is enough for the animal to make an informed decision.<br />
<br />
More details on the memories: if an animal experiences something again, the memory already carries with it a number of associations (3 in the example), but in total has room for a predefined number of associations (current default is 50). These associations are randomly overwritten. As a result, those experiences that often follow after a particular memorized experience will occur more frequently in the array of associations that comes with the memory. Therefore, the frequency with which something is associated with a particular memorized experience provides a mechanism by which multiple responses to a particular experience can co-exist with different `weights' each.<br />
<br />
One possible future extension is not to pick random associations, but to increase the chance on associations that are temporally closer to the oldest one (a poisson distribution).<br />
<br />
Codewise, the implementation is as follows<br />
<pre><br />
(deftem creature <br />
   stm nil<br />
   stmsize 7<br />
   ltm (table)<br />
   ltmsize 50<br />
   s2ltm 3)<br />
<br />
(= creature (table))<br />
(= (creature "ltm") (table))<br />
<br />
o = observation, i = the memory to be stored, stm / ltm = short / longterm memory.<br />
(def add-observation (creature o)<br />
   (= creature!stm (cons o creature!stm))<br />
   (let i (car (nthcdr creature!stmsize creature!stm))<br />
      (if i<br />
         (do<br />
            (if (no (creature!ltm i)) (= ((creature 'ltm) i) (n-of creature!ltmsize nil)))<br />
            (repeat creature!s2ltm<br />
               (let stm-pp (rem i (rem nil creature!stm))<br />
                  (if (~is 0 (len stm-pp))<br />
                     (= ((creature!ltm i) (rand 50)) (car (nthcdr (rand (len stm-pp)) stm-pp))))))<br />
            )))<br />
   (= creature!stm (firstn creature!stmsize creature!stm))<br />
   nil)<br />
</pre><br />
<br />
<b>Update 9 may 2008:</b><br />
I made a small change to the add-observation code to allow different <i>craas</i> to have a different short and/or longterm memory array size, and associate a different number of short-term memory with a longterm memory, as I've no idea yet what are good and functional sizes.<br />
<br />
One of the major things that is still lacking from this memory is the issue of saturation / filtering uninteresting information. If there is always grass around you, you probably don't associate it with something, or let it fill your short-term memory. Two solutions come to mind: a module that 'filters' your observations in some way (perhaps by distincting between expected / unexpected, or by flagging things as 'not interesting'). A second possibility is that you can lump similar observations so that they don't take as much space in your short-term memory (1, 2, many trees). Moving from one place in the forest to another would just add a single 'many trees' observation to your shortterm memory, rather than filling your short-term memory with 'tree','tree','tree','tree','tree', and missing the 'bear'.<br />
~ ]]></description>
			<guid isPermaLink="false">27@http://www.bagofsouls.com</guid>
			<category>bagofsouls</category>
			<pubDate>Wed, 23 Jan 2008 22:18:00 +0100</pubDate>
		</item>
		
		
		
		<item>
			<title>.Plan</title>
			<link>http://www.bagofsouls.com/entry/26/Plan</link>
			<comments>http://www.bagofsouls.com/entry/26/Plan#comm</comments>
                        <description><![CDATA[ <i>Let's build something intelligent.</i><br />
<br />
The goal is to create a rich virtual world in which some artificial life critters live. The critters are designed to be as close to a tabula rasa as I can manage to make them: the main difference between critters will be inherited physical characteristics (size, speed, quality of sight, smell or hearing) and their inherited preferential responses (attack, eat, move away, move towards, hide), which develops over time (ie, youngsters might prefer to hide, whereas adults might move away).Current status:<br />
<br />
Have: <br />
<ul><li> world with objects<br />
<li> animal that can memorize things (see <a rel="external" href="http://bagofsouls.com/entry/27/Memory" title="Memory - bag of souls">Memory</a>)</ul><br />
<br />
Need:<br />
<ul><li> method for the animal to turn experiences and their associations into action.<br />
<li> genetic algorithm to improve the animals</ul> ]]></description>
			<guid isPermaLink="false">26@http://www.bagofsouls.com</guid>
			<category>bagofsouls</category>
			<pubDate>Sun, 20 Jan 2008 11:04:00 +0100</pubDate>
		</item>
		
		
		
	</channel>
</rss>
