GridWorld - an environment to run intelligent agents.
  use GridWorld;
  my $grid = new GridWorld( xSize => 8, ySize => 8,
                            stuff => 'dirt', dirtFraction => 0.3);
  $grid->runVacuumAgent( verbose=>1 );
An environment to run intelligent agents.
Runs a simple AI vacuum cleaner ``agent'' in a checkerboard world with dirt on some of the squares.
Here's an example of an agent.
 # Input:  reference ($percepts->{key}=value) hash of perceptions.
 # Output: action taken (string)
 sub reflexAgent {
   my ($percept) = @_;
   return 'suck'                                        if $percept->{dirt};
   return (qw(turnLeft turnRight))[int(rand(2))] if $percept->{bump};
   return (qw( forward forward forward 
              turnRight turnLeft ))[ int(rand(5)) ];
 }
And here's an example of a ``performance measure'' used to evaluate the agent's performance.
 # Input:  reference ($result->{key}=value) of results of actions.
 # Output: numeric score for that result.
 sub performanceMeasure {
   my ($result) = @_;
   return 100 if $result->{suck};
   return -1  if $result->{move};
   return 0;
 }
References to both of these routines may be specified in the runVacuumAgent call. The key => value pairs which may be passed are
 runVacuumAgent( x => $startX, y => $start, 
                 direction   => $startDirection,
                 agent       => \&agentFunction, 
                 performance => \&performanceFunction,
                 verbose     => 'yes' (the default) or 'no'
               );
The directions are (left, right, up or down).
Actions are (forward, turnRight, turnLeft, suck, wait).
Results of actions, passed to the performanceMeasure function, are (suck, move).
None.
Artificial Intelligence: A Modern Approach, by Stuart Russel and Peter Norvig, chapter 2.
Jim Mahoney, <mahoney@marlboro.edu
Copyright 2003 by Jim Mahoney
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.