Program:     RoboSnake
Team:        One Happy Python Hacker
Team member: Bjarke Dahl Ebert 
             Employee at Cryptomathic 
             Denmark
             bebert@worldonline.dk
Language:    Python 2.2

========================================================================
                         Notes regarding 'runme' 

I assume that the Python 2.2 executable is called 'python2.2' and is
in the $PATH.  Also note that because of the way I produce the ZIP
file, I am not sure that runme and buildme has the +x permission flag
set. I hope you can correct these small issues if anything is wrong.
========================================================================


RoboSnake is a pretty simple implementation of a robot.  It is
implemented in pure Python.  It is quite randomized, since I believe
that it could work well when there are a lot of other robots - in
order to not run for the same packages as all the other fools ;-).

For navigation it uses a cache of tables, each table holding the
distance from a single point to all other points.

No bidding is implemented. It always bids +1.  No other "short term"
tactics is implemented either. Thus, there is no defence against being
pushed into the water, and it will act pretty stupid when fighting for
packages with other robots.  It "ignores" the other robots, except
that it tracks them and keeps track of the where-abouts of all known
packages (this was implemented before I realized that I didn't have
time to implement tactics to use that information).  No packages are
deliberately dropped in the wrong place to make space for others.  I
think that could be useful sometimes, but maybe complicated to
implement.

Longer term strategy and planning works as follows:
There are three kinds of "top level" goals: 

  - Go to destinations of my held packages.
  - Go to a square with known packages (i.e. weight and destination
    are known)
  - Go to a home base not visited before (just to look)

in roughly that order of priority.

First, all candidates for a new goal are listed. Then in a "somewhat
random" fashion one is chosen. This goal is then kept until the square
is reached, or it can be aborted at random times (with probability
depending on expected time to reach square), in order to avoid some of
the possible dead-locks and with a little luck to keep away from
crowded areas.

