/***
*
* rli.h
*
* $Revision: 1.3 $
*
* Description:
* Interface for the Simulation, Agent, and Environment abstract classes.
* These are abstract classes that define the three main objects
* to perform reinforcement learning simulation. Refer to the
* documentation in URL:
* http://www-anw.cs.umass.edu/People/sutton/RLinterface/RLinterface.html
* for further details.
*
* Author:
* Juan Carlos Santamaria
* E-mail: carlos@cc.gatech.edu
* URL: http://www.cc.gatech.edu/ai/students/jcs
*
* File name:
* $Id: rli.h,v 1.3 1996/09/19 21:56:36 carlos Exp $
*
* Revision History:
* $Log: rli.h,v $
* Revision 1.3 1996/09/19 21:56:36 carlos
* - Eliminate the arguments ps and pa from Agent::step.
* - Change the order of arguments in Enviornment::step:
* old: A,r,S' new: A,S',r
* - Change the order of arguments in Simulation::collect_data:
* old: S,A,r,S' new: S,A,S',r
* Now all the order of arguments in all functions are consistent.
*
* Revision 1.2 1996/08/29 15:05:34 carlos
* - Definition of constant TERMINAL_STATE.
* - Change in the order of arguments in Agent::step:
* old: S,A,r,S' new: S,A,S',r
* - Environment::transition is now Environment::step.
* - All member functions of the Simulation class are now virtual.
* - Simulation::run_steps and Simulation::run_trials are now
* Simulation::steps and Simulation::trials.
*
* Revision 1.1 1996/08/14 20:57:56 carlos
* Initial revision
*
****/
#pragma interface
#ifndef _INCL_RLI
#define _INCL_RLI
// -- Constants
#define TERMINAL_STATE 0
// -- Class and type declarations
class Agent;
class Environment;
class Simulation;
class Action {
public:
Action( void ) {}
virtual ~Action( void ) {}
};
class Sensation {
public:
Sensation( void ) {}
virtual ~Sensation( void ) {}
};
class Agent {
friend class Simulation;
public:
Agent( void ) {}
virtual ~Agent( void ) {}
virtual void init( int argc, char *argv[] );
virtual Action *start_trial( const Sensation *ps ) = 0;
virtual Action *step( const Sensation *pnext_s,
double reward ) = 0;
protected:
Simulation *psim;
};
class Environment {
friend class Simulation;
public:
Environment( void ) {}
virtual ~Environment( void ) {}
virtual void init( int argc, char *argv[] );
virtual Sensation *start_trial( void ) = 0;
virtual void step( const Action *pa,
Sensation *&pnext_s,
double &reward ) = 0;
protected:
Simulation *psim;
};
class Simulation {
public:
Agent *pagt;
Environment *penv;
Simulation( Agent *pa, Environment *pe ) : pagt(pa), penv(pe)
{ pagt->psim = this; penv->psim = this; pcurr_s = 0; pcurr_a = 0; }
virtual ~Simulation( void )
{ pagt->psim = 0; penv->psim = 0; delete pcurr_s; delete pcurr_a; }
virtual void init( int argc, char *argv[] );
virtual void steps( long num_steps );
virtual void trials( long num_trials, long max_steps_per_trial );
virtual void start_trial( void );
virtual void collect_data( const Sensation *ps,
const Action *pa,
const Sensation *pnext_s,
double reward );
private:
Sensation *pcurr_s;
Action *pcurr_a;
};
/****************************** end of file *********************************/
#endif