BECCA version 0.3.x

This code implements a brain-emulating cognition and control
architecture (BECCA). A BECCA agent is applied to various
tasks, each of which is defined in a directory named
'task_<taskname>'.

To run it, switch the working directory to the unzipped
BECCA_v0.3.x directory and run tester.m. Select the task to be
run by uncommenting the appropriate line in tester.m.

The code is designed to have an approximately object-oriented
mode of operation. These pseudo-objects in BECCA are related to
each other in a MATLAB structure in the following way:

task.
    agent.
        feature_map
        grouper
        model
        planner

For example, the model is an element of agent, which is an
element of task: task.agent.model

Each MATLAB function is titled '<classname>_<methodname>.m',
indicating the class and method it represents.
'<classname>_initialize.m' instantiates and initializes the
object <classname>. util is a static class containing useful
mathematical and image processing functions.


Tasks are structured in the same way, with unique folder names
denoting separate tasks. In order to create a new task, certain
methods with the following signatures must be included folder:

task = task_display( task); % displays progress to the user

task = task_initialize( task); % initializes the task

task = task_log_hist( task); % logs task progress

task = task_restore( task); % restores the task and agent from
a previous run, stored in memory

task = task_set_becca_parameters( task); % configures BECCA
parameters specifically for the task at hand

task = task_step( task); % executes one time step of the task

An optional method is often created as well in order to save
intermediate results of a task as it progresses:

void = task_save( task); % saves the current state of the task
and agent to disk

A task may have any number of internal variables, but only
three are necessary:

agent; % the BECCA agent

step_ctr; % the number of time steps taken in the life od the
agent

REPORTING_BLOCK_SIZE; % how many time steps should be taken
before reporting on the task's progress

The README in each task directory should explain its purpose,
details, and
instructions for interfacing with robot hardware, if any.

A task_stub is provided as a template for creating new tasks.
Copying and pasting from other tasks has proven effective as well.

see www.sandia.gov/rohrer for more detailed documentation,
papers, and videos.