Robot Simulator of the Robotics Group for Self-Organization of Control  0.8.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MutualInformationController Class Reference

This is a controller who is passive at the moment, that means, he will not generate any motor values. More...

#include <mutualinformationcontroller.h>

Inheritance diagram for MutualInformationController:
Collaboration diagram for MutualInformationController:

Public Member Functions

 MutualInformationController (int sensorIntervalCount, double minSensorValue=-1, double maxSensorValue=1, bool showF=false, bool showP=false, bool showXsiF=false)
 Constructs the mutual information controller. More...
 
virtual ~MutualInformationController ()
 
virtual double & getMI (int index)
 
virtual double & getH_x (int index)
 
virtual double & getH_yx (int index)
 
virtual double & getH_Xsi (int index)
 
virtual void setAandCandCalcH_xsi (double ainit, double cinit)
 we like to calculate the entropy of the xsi, therefore we need for the (self calculated) update rule x_t+1=-a * tanh(c * x_t) the a and c, which should be set in the main.cpp. More...
 
virtual void init (int sensornumber, int motornumber, RandGen *randGen=0)
 initialisation of the controller with the given sensor/ motornumber Must NORMALLY be called before use. More...
 
virtual int getSensorNumber () const
 
virtual int getMotorNumber () const
 
virtual void step (const sensor *sensors, int sensornumber, motor *motors, int motornumber)
 performs one step (includes learning). More...
 
virtual void stepNoLearning (const sensor *sensors, int sensornumber, motor *motors, int motornumber)
 performs one step without learning. More...
 
virtual bool store (FILE *f) const
 The list of the names of all internal parameters given by getInternalParams(). More...
 
virtual bool restore (FILE *f)
 loads the object from the given file stream (binary). More...
 
- Public Member Functions inherited from AbstractController
 AbstractController (const std::string &name, const std::string &revision)
 contructor (hint: use $ID$ for revision) More...
 
virtual void motorBabblingStep (const sensor *, int number_sensors, const motor *, int number_motors)
 called in motor babbling phase. More...
 
virtual void sensorInfos (std::list< SensorMotorInfo > sensorInfos)
 the controller is notified about the information on sensor. More...
 
virtual void motorInfos (std::list< SensorMotorInfo > motorInfos)
 the controller is notified about the information on motors. More...
 
virtual int SIdx (const std::string &name)
 returns the index of the sensor with the given name (if not found then 0 and all sensor names are printed) More...
 
virtual int MIdx (const std::string &name)
 returns the index of the motor with the given name (if not found then 0 and all motor names are printed) More...
 
virtual SensorMotorInfo SInfo (int index)
 returns the Information for the sensor with given index More...
 
virtual SensorMotorInfo MInfo (int index)
 returns the Information for the motor with given index More...
 
- Public Member Functions inherited from Configurable
 Configurable ()
 
 Configurable (const std::string &name, const std::string &revision)
 intialise with name and revision (use "$ID$") More...
 
virtual ~Configurable ()
 
virtual void notifyOnChange (const paramkey &key)
 Is called when a parameter was changes via setParam(). More...
 
virtual void addParameter (const paramkey &key, paramval *val, paramval minBound, paramval maxBound, const paramdescr &descr=paramdescr())
 This is the new style for adding configurable parameters. More...
 
virtual void addParameter (const paramkey &key, paramval *val, const paramdescr &descr=paramdescr())
 See addParameter(const paramkey& key, paramval* val, paramval minBound, paramval maxBound, const paramdescr& descr) More...
 
virtual void addParameter (const paramkey &key, parambool *val, const paramdescr &descr=paramdescr())
 See addParameter(const paramkey& key, paramval* val) but for bool values. More...
 
virtual void addParameter (const paramkey &key, paramint *val, paramint minBound, paramint maxBound, const paramdescr &descr=paramdescr())
 See addParameter(const paramkey& key, paramval* val) but for int values. More...
 
virtual void addParameter (const paramkey &key, paramint *val, const paramdescr &descr=paramdescr())
 
virtual void addParameterDef (const paramkey &key, paramval *val, paramval def, paramval minBound, paramval maxBound, const paramdescr &descr=paramdescr())
 This function is only provided for convenience. More...
 
virtual void addParameterDef (const paramkey &key, paramval *val, paramval def, const paramdescr &descr=paramdescr())
 
virtual void addParameterDef (const paramkey &key, parambool *val, parambool def, const paramdescr &descr=paramdescr())
 See addParameterDef(const paramkey&, paramval*, paramval) More...
 
virtual void addParameterDef (const paramkey &key, paramint *val, paramint def, paramint minBound, paramint maxBound, const paramdescr &descr=paramdescr())
 See addParameterDef(const paramkey&, paramval*, paramval) More...
 
virtual void addParameterDef (const paramkey &key, paramint *val, paramint def, const paramdescr &descr=paramdescr())
 
virtual void setParamDescr (const paramkey &key, const paramdescr &descr, bool traverseChildren=true)
 sets a description for the given parameter More...
 
int getId () const
 return the id of the configurable objects, which is created by random on initialisation More...
 
virtual paramkey getName () const
 return the name of the object More...
 
virtual paramkey getRevision () const
 returns the revision of the object More...
 
virtual void setName (const paramkey &name, bool callSetNameOfInspectable=true)
 Sets the name of the configurable. More...
 
virtual void setRevision (const paramkey &revision)
 sets the revision Hint: { return "$ID$"; } More...
 
virtual paramval getParam (const paramkey &key, bool traverseChildren=true) const
 returns the value of the requested parameter or 0 (+ error message to stderr) if unknown. More...
 
virtual bool hasParam (const paramkey &key, bool traverseChildren=true) const
 Returns if the requested parameter is part of the configurable or their children. More...
 
virtual bool setParam (const paramkey &key, paramval val, bool traverseChildren=true)
 sets the value of the given parameter or does nothing if unknown. More...
 
virtual void setParamBounds (const paramkey &key, paramval minBound, paramval maxBound, bool traverseChildren=true)
 Sets the bounds (minBound and maxBound) of the given parameter. More...
 
virtual void setParamBounds (const paramkey &key, paramint minBound, paramint maxBound, bool traverseChildren=true)
 
virtual void setParamBounds (const paramkey &key, paramvalBounds bounds, bool traverseChildren=true)
 
virtual void setParamBounds (const paramkey &key, paramintBounds bounds, bool traverseChildren=true)
 
virtual paramlist getParamList () const
 The list of all parameters with there value as allocated lists. More...
 
virtual std::list< paramkeygetAllParamNames (bool traverseChildren=true)
 returns all names that are configureable More...
 
virtual parammap getParamValMap () const
 
virtual paramintmap getParamIntMap () const
 
virtual paramboolmap getParamBoolMap () const
 
virtual paramdescr getParamDescr (const paramkey &key, bool traverseChildren=true) const
 returns the description for the given parameter More...
 
virtual paramvalBounds getParamvalBounds (const paramkey &key, bool traverseChildren=true) const
 
virtual paramintBounds getParamintBounds (const paramkey &key, bool traverseChildren=true) const
 
virtual bool hasParamDescr (const paramkey &key, bool traverseChildren=true) const
 
virtual bool hasParamvalBounds (const paramkey &key, bool traverseChildren=true) const
 
virtual bool hasParamintBounds (const paramkey &key, bool traverseChildren=true) const
 
virtual bool storeCfg (const char *filenamestem, const std::list< std::string > &comments=std::list< std::string >())
 stores the key values paires into the file : filenamestem.cfg including the comments given in the list More...
 
virtual bool restoreCfg (const char *filenamestem)
 restores the key values paires from the file : filenamestem.cfg More...
 
void print (FILE *f, const char *prefix, int columns=90, bool traverseChildren=true) const
 prints the keys, values and descriptions to the file. Each line is prefixed More...
 
bool parse (FILE *f, const char *prefix=0, bool traverseChildren=true)
 parses the configuration from the given file More...
 
virtual void addConfigurable (Configurable *conf)
 Adds a configurable as a child object. More...
 
virtual void removeConfigurable (Configurable *conf)
 Removes a configurable as a child object. More...
 
virtual const configurableListgetConfigurables () const
 Returns the list containing all configurable children. More...
 
virtual void configurableChanged ()
 Indicates that the configurable itself or the configurable children attached to this configurable have changed. More...
 
- Public Member Functions inherited from BackCaller
 BackCaller ()
 
virtual ~BackCaller ()
 
virtual void addCallbackable (Callbackable *callbackableInstance, CallbackableType type=BackCaller::DEFAULT_CALLBACKABLE_TYPE)
 Adds a Callbackable instance to this caller instance. More...
 
virtual void removeCallbackable (Callbackable *callbackableInstance, CallbackableType type=BackCaller::DEFAULT_CALLBACKABLE_TYPE)
 Removes a Callbackable instance from this caller instance. More...
 
virtual void removeAllCallbackables (CallbackableType type)
 Removes all Callbackable instances from this caller instance. More...
 
virtual void callBack (CallbackableType type=BackCaller::DEFAULT_CALLBACKABLE_TYPE)
 Calls all registered callbackable classes of the determined type. More...
 
virtual void callBackQMP (CallbackableType type=BackCaller::DEFAULT_CALLBACKABLE_TYPE)
 Calls all registered callbackable classes of the determined type. More...
 
- Public Member Functions inherited from Inspectable
 Inspectable (const iparamkey &name="")
 TYPEDEFS END. More...
 
virtual ~Inspectable ()
 
virtual iparamkeylist getInternalParamNames () const
 The list of the names of all internal parameters given by getInternalParams(). More...
 
virtual iparamvallist getInternalParams () const
 
virtual iparamvalptrlist getInternalParamsPtr () const
 be careful: matrices will be ignored More...
 
virtual ilayerlist getStructuralLayers () const
 Specifies which parameter vector forms a structural layer (in terms of a neural network) The ordering is important. More...
 
virtual iconnectionlist getStructuralConnections () const
 Specifies which parameter matrix forms a connection between layers (in terms of a neural network) The orderning is not important. More...
 
virtual void addInspectableValue (const iparamkey &key, iparamval const *val, const std::string &descr=std::string())
 This is the new style for adding inspectable values. More...
 
virtual void addInspectableMatrix (const iparamkey &key, const matrix::Matrix *m, bool only4x4AndDiag=true, const std::string &descr=std::string())
 This is the new style for adding inspectable values. More...
 
virtual void addInspectableDescription (const iparamkey &key, const std::string &descr)
 adds a description for the given parameter using info-lines The line will start (appart from the #I) with a D for description followed by the key end then followed by the string. More...
 
virtual void addInfoLine (std::string infoLine)
 Adds an info line to this inspectable instance. More...
 
virtual void addInfoLines (std::list< std::string > infoLineList)
 Adds a bunch of infolines with addInfoLine to this inspectable instance. More...
 
virtual void removeInfoLines ()
 Removes all infolines from this inspectable instance. More...
 
virtual const infoLinesListgetInfoLines () const
 Returns all infolines added to this inspectable instance. More...
 
virtual void addInspectable (Inspectable *insp)
 Adds an inspectable as a child object. More...
 
virtual void removeInspectable (Inspectable *insp)
 Removes an inspectable as a child object. More...
 
virtual void setNameOfInspectable (const iparamkey &name)
 set the name of the inspectable More...
 
virtual const iparamkey getNameOfInspectable () const
 return the name of the inspectable, getName() would conflict with Configurable::getName() too often More...
 
virtual const inspectableListgetInspectables () const
 Returns the list containing all inspectable children. More...
 
- Public Member Functions inherited from Storeable
virtual ~Storeable ()
 
bool storeToFile (const char *filename) const
 Provided for convenience. More...
 
bool restoreFromFile (const char *filename)
 Provided for convenience. More...
 

Static Public Attributes

static const int numberSensorsPreInitialized = 10
 
static const int numberMotorsPreInitialized = 2
 
- Static Public Attributes inherited from Configurable
static const CallbackableType CALLBACK_CONFIGURABLE_CHANGED = 11
 
- Static Public Attributes inherited from BackCaller
static const CallbackableType DEFAULT_CALLBACKABLE_TYPE = 0
 This is the default Callbackable type. More...
 

Protected Member Functions

virtual void calculateMIs (double *MI)
 Calculates the mutual information This is made by normal formula, which needs O(n^2) costs. More...
 
virtual void calculateH_x (double *H)
 Calculates the entropy of x This is made by normal formula, which needs O(n) costs. More...
 
virtual void calculateH_yx (double *H_yx)
 Calculates the conditional entropy of y|x This is made by normal formula, which needs O(n²) costs. More...
 
virtual void updateXsiFreqMatrixList (const sensor *sensors)
 Updates the xsi frequency matrix list. More...
 
virtual void calculateH_Xsi (double *H_Xsi)
 Calculates the entropy of H(Xsi) This is made by normal formula, which needs O(n) costs. More...
 
virtual void updateMIs (const sensor *sensors)
 Updates the mutual information This is made by a difference term, which is added to the old MI(t-1). More...
 
virtual int getState (double sensorValue)
 Returns the appropiate state which belongs to the given sensorValue. More...
 
virtual void internalInit (int sensornumber, int motornumber, RandGen *randGen=0)
 Does the pre-initialization functionality. More...
 
- Protected Member Functions inherited from Configurable
void copyParameters (const Configurable &, bool traverseChildren=true)
 copies the internal params of the given configurable More...
 
void printdescr (FILE *f, const char *prefix, const paramkey &key, int columns, int indent) const
 

Protected Attributes

parambool showF
 
parambool showP
 
parambool showXsiF
 
bool initialized
 
bool useXsiCalculation
 
double minSensorValue
 
double maxSensorValue
 
int sensorIntervalCount
 
int sensorNumber
 
int motorNumber
 
std::list< matrix::Matrix * > freqMatrixList
 
std::list< matrix::Matrix * > probMatrixList
 
std::list< matrix::Matrix * > xsiFreqMatrixList
 
double * oldSensorStates
 
int t
 
double * MI
 
double * H_x
 
double * H_yx
 
double * H_Xsi
 
double ainit
 
double cinit
 
- Protected Attributes inherited from AbstractController
std::map< std::string, int > sensorIndexMap
 
std::map< std::string, int > motorIndexMap
 
std::map< int, SensorMotorInfosensorInfoMap
 
std::map< int, SensorMotorInfomotorInfoMap
 
- Protected Attributes inherited from Inspectable
iparamkey name
 
iparampairlist mapOfValues
 
imatrixpairlist mapOfMatrices
 
infoLinesList infoLineStringList
 

Additional Inherited Members

- Public Types inherited from AbstractController
typedef double sensor
 
typedef double motor
 
- Public Types inherited from Configurable
typedef std::string paramkey
 
typedef std::string paramdescr
 
typedef double paramval
 
typedef std::list< std::pair
< paramkey, paramval > > 
paramlist
 
typedef std::map< paramkey,
paramval * > 
parammap
 
typedef bool parambool
 
typedef std::list< std::pair
< paramkey, parambool > > 
paramboollist
 
typedef std::map< paramkey,
parambool * > 
paramboolmap
 
typedef int paramint
 
typedef std::list< std::pair
< paramkey, paramint > > 
paramintlist
 
typedef std::map< paramkey,
paramint * > 
paramintmap
 
typedef std::map< paramkey,
paramdescr
paramdescrmap
 
typedef std::pair< paramval,
paramval
paramvalBounds
 
typedef std::map< paramkey,
paramvalBounds
paramvalBoundsMap
 
typedef std::pair< paramint,
paramint
paramintBounds
 
typedef std::map< paramkey,
paramintBounds
paramintBoundsMap
 
typedef std::pair< paramkey,
paramval * > 
paramvalpair
 
typedef std::pair< paramkey,
parambool * > 
paramboolpair
 
typedef std::pair< paramkey,
paramint * > 
paramintpair
 
typedef std::vector
< Configurable * > 
configurableList
 
- Public Types inherited from BackCaller
typedef unsigned long CallbackableType
 
- Public Types inherited from Inspectable
typedef std::string iparamkey
 
typedef double iparamval
 
typedef std::pair< iparamkey,
iparamval const * > 
iparampair
 
typedef std::pair< iparamkey,
std::pair< const
matrix::Matrix *, bool > > 
imatrixpair
 
typedef std::list< iparamkeyiparamkeylist
 
typedef std::list< std::string > infoLinesList
 
typedef std::list< iparamvaliparamvallist
 
typedef std::list< iparamval
const * > 
iparamvalptrlist
 
typedef std::list< iparampairiparampairlist
 
typedef std::list< imatrixpairimatrixpairlist
 
typedef struct Inspectable::ILayer ILayer
 
typedef struct
Inspectable::IConnection 
IConnection
 
typedef std::list< ILayerilayerlist
 
typedef std::list< IConnectioniconnectionlist
 
typedef std::list< const
Inspectable * > 
inspectableList
 

Detailed Description

This is a controller who is passive at the moment, that means, he will not generate any motor values.

This controller calculates the mutual information from one to the next time step. Note that many steps are necessary for a good prediction of the mutual information.

Constructor & Destructor Documentation

MutualInformationController ( int  sensorIntervalCount,
double  minSensorValue = -1,
double  maxSensorValue = 1,
bool  showF = false,
bool  showP = false,
bool  showXsiF = false 
)

Constructs the mutual information controller.

At this time the controller is not yet initialized (this does the Agent).

Parameters
sensorIntervalCountis the number of the intervals used. This is important for generating the internal matrices.
minSensorValueis the minimum value the sensors can become
maxSensorValueis the maximum value the sensors can become
virtual ~MutualInformationController ( )
inlinevirtual

Member Function Documentation

void calculateH_x ( double *  H)
protectedvirtual

Calculates the entropy of x This is made by normal formula, which needs O(n) costs.

void calculateH_Xsi ( double *  H_Xsi)
protectedvirtual

Calculates the entropy of H(Xsi) This is made by normal formula, which needs O(n) costs.

void calculateH_yx ( double *  H_yx)
protectedvirtual

Calculates the conditional entropy of y|x This is made by normal formula, which needs O(n²) costs.

void calculateMIs ( double *  MI)
protectedvirtual

Calculates the mutual information This is made by normal formula, which needs O(n^2) costs.

virtual double& getH_x ( int  index)
inlinevirtual
virtual double& getH_Xsi ( int  index)
inlinevirtual
virtual double& getH_yx ( int  index)
inlinevirtual
virtual double& getMI ( int  index)
inlinevirtual
virtual int getMotorNumber ( ) const
inlinevirtual
Returns
Number of motors the controller was initialised with or 0 if not initialised

Implements AbstractController.

virtual int getSensorNumber ( ) const
inlinevirtual
Returns
Number of sensors the controller was initialised with or 0 if not initialised

Implements AbstractController.

int getState ( double  sensorValue)
protectedvirtual

Returns the appropiate state which belongs to the given sensorValue.

void init ( int  sensornumber,
int  motornumber,
RandGen randGen = 0 
)
virtual

initialisation of the controller with the given sensor/ motornumber Must NORMALLY be called before use.

For all ControllerAdapters call first AbstractControllerAdapter::init(sensornumber,motornumber) if you overwrite this method

Implements AbstractController.

void internalInit ( int  sensornumber,
int  motornumber,
RandGen randGen = 0 
)
protectedvirtual

Does the pre-initialization functionality.

Parameters
sensornumber
motornumber
randGen
virtual bool restore ( FILE *  f)
inlinevirtual

loads the object from the given file stream (binary).

Implements Storeable.

void setAandCandCalcH_xsi ( double  ainit,
double  cinit 
)
virtual

we like to calculate the entropy of the xsi, therefore we need for the (self calculated) update rule x_t+1=-a * tanh(c * x_t) the a and c, which should be set in the main.cpp.

void step ( const sensor sensors,
int  sensornumber,
motor motors,
int  motornumber 
)
virtual

performs one step (includes learning).

Calculates motor commands from sensor inputs.

Parameters
sensorssensors inputs scaled to [-1,1]
sensornumberlength of the sensor array
motorsmotors outputs. MUST have enough space for motor values!
motornumberlength of the provided motor array

Implements AbstractController.

void stepNoLearning ( const sensor sensors,
int  sensornumber,
motor motors,
int  motornumber 
)
virtual

performs one step without learning.

See Also
step

Implements AbstractController.

virtual bool store ( FILE *  f) const
inlinevirtual

The list of the names of all internal parameters given by getInternalParams().

The naming convention is "v[i]" for vectors and "A[i][j]" for matrices, where i, j start at 0.

Returns
: list of keys
: list of valuesstores the object to the given file stream (binary).

Implements Storeable.

void updateMIs ( const sensor sensors)
protectedvirtual

Updates the mutual information This is made by a difference term, which is added to the old MI(t-1).

This function needs the OLD MI(t-1) AND the OLD F matrix, so update the MI with this function first before updating the F matrix! calculation costs: O(1)

void updateXsiFreqMatrixList ( const sensor sensors)
protectedvirtual

Updates the xsi frequency matrix list.

Member Data Documentation

double ainit
protected
double cinit
protected
std::list<matrix::Matrix*> freqMatrixList
protected
double* H_x
protected
double* H_Xsi
protected
double* H_yx
protected
bool initialized
protected
double maxSensorValue
protected
double* MI
protected
double minSensorValue
protected
int motorNumber
protected
const int numberMotorsPreInitialized = 2
static
const int numberSensorsPreInitialized = 10
static
double* oldSensorStates
protected
std::list<matrix::Matrix*> probMatrixList
protected
int sensorIntervalCount
protected
int sensorNumber
protected
parambool showF
protected
parambool showP
protected
parambool showXsiF
protected
int t
protected
bool useXsiCalculation
protected
std::list<matrix::Matrix*> xsiFreqMatrixList
protected

The documentation for this class was generated from the following files: