Open Source Code

I'm a scientist.  What I do is meaningless if it doesn't contribute to the rest of human knowledge in some way.  I think this applies to my code as well as to the rest of my ideas.  

If you use my code, you should give me credit just as you would if you used an idea from one of my papers.  Please keep all authorship information intact, and reference my work in any documentation.  Also, I'd like to hear about any projects using my code, whether they are working or just under way.  So please email me.  But don't expect much technical support - I'm afraid I don't have much time!

AmonI Software Page

The most accessable and heavily used/debugged versions of my code are now available on the AmonI software page.  This page now is primarily for supporting the lisp version of BOD & POSH, which I still use myself sometimes.  It also links to some even older code.

Lisp BOD/POSH Code

Lisp last updated 8 August 2005.  Works with Lispworks 4.4.5

If you don't already know about BOD, you'd better read that link first.  This code is in Common Lisp, using the Object System.  For a quick intro to this language, see Jeff Dalton's Brief Guide to CLOS.

If you download my code directory, you will see several behavior libraries each with many scripts.  But only a few things are really running --- some are currently in development, others represent early versions of the program.  See the Demo section below for recommended scripts to run.

Not everything is perfectly documented, but see my PhD for a lot of documentation!  Even this page is really for my students, though if someone hassles us we may rewrite it better.


Here is the lisp code in its directory structure.  To make it run in either linux, Mac OSX or the evil empire, download Lispworks.



To  run my code, run lispworks from the directory you downloaded my code to.
To get the BOD interface up, you need to load "posh-gui.lisp".  Either do this from the File menu, or from the listener window (the big one with the prompt) type:

CL-USER 1>  (load "posh-gui")

When the (stunningly ugly) BOD window comes up, choose a behavior library, then a script to run.  Then push the "run" button.  "Fast run" runs faster (surprise) but doesn't maintain any debugging state or print to any debugging windows.

If you want more information, play with the debugging tools.  Notice that after you click "debug mode" you are automatically stepping, so "run" only takes you to the first step.  Click "step" to advance another step, or "continue" to just run.

See my POSH web page for descriptions of the scripts mentioned below.  Basically, POSH plans coordinate the behavior of an agent, but it's behavior is generated by modules written in some OO language, (in this case, CLOS).  But the POSH scripts determine the different `personalities' (goals) of different agents.  They determine what the agents do, even though in theory any agent that shares the same behavior library has the same capacities.  See my BOD page (or papers) for a fuller explanation.

Transitive Inference

"educate-me+monk" is the best script to run under transitive inference.  That has phased training & terminates after either the agent fails to learn or the full testing program has run.  To see what happens without going through such an organized training system see the script "prior-learn".  You will have to quit this at some point.  

All results from this library trail into a file called monkey-results, which means one run will write over another if you don't rename it after the trial.

"educate-freq-test" is the only thing here that uses the frequency tests on the drives --- I used that a lot in the C & robot demos, but not so much for the monkeys.  It makes a `noise' every 1000 steps.  If you change "screech" to "squawk" in the script you can make the program break every 1000 steps.  Sam Partington has used this code feature to greater effect in his BOD/UT code.


Unfortunately, the colony code is now broken on all platforms.  It used CAPI for the simulator code, & CAPI got changed a bunch.  Since my students don't like learning lisp, there is now a new version of this code being written using python/jython called BOD/MASON.  Here are the old instructions for colony though, just in case: 

If you are running under the evil empire, the multi-agent stuff "colony" doesn't work.  Sorry, I have no idea why, I suspect it's the threading done by lispworks.  But you can still run the transitive inference demos.  I haven't checked OS X yet, or windows with lw 4.3.  UPDATE:  The newest version of lispworks has broken the colony demo on linux too!  I'm currently making TI work under OSX, I'll worry about colony next if I haven't migrated this work to python or repast before that.  10 November 2004.

If you are on linux, the two colony programs of most relevance to my most recent papers are "stay-groom" where folk hold still while they are being groomed, and "stay-intent" where they hold still even if they are being approached.

All results (decisions) here trail into a file named jane.[somebignumber].  These files don't overwrite each other.  They also don't grow very fast, but they will keep growing as long as the thing keeps running.  The python script summarizes these results.

Older Code

 I wrote a stand-alone version of an older version of POSH action selection for the net a number of years ago.  You can download it from my Edmund page (see the code section.)  That has toy scripts but real documentation!  For the reverse, on the same page further down you can find the code I used to make a winning mouse run in Toby Tyrrell's action-selection testing environment.

If you are really a great fan of my work and can't get enough of my code, you might want to also see my Reactive Accompanist page, which also has code.  Or, if you want to see the code I had running on the Nomad robot, ask & I will post it (if I can find it!)  It's probably lying around somewhere.

Joanna  Bryson
Last updated  a little on 15 August 2005
Lisp code last updated 15 August 2005