This controller follows the prinziple of homeokinesis and implements the extensions described in the thesis of Georg Martius 2009, University Goettingen: Goal-Oriented Control of Self-organizing Behavior in Autonomous Robots. More...
#include <semox.h>
Inherits HomeokinBase, and Teachable.
Public Member Functions | |
SeMoX (const SeMoXConf &conf=getDefaultConf()) | |
virtual void | init (int sensornumber, int motornumber, RandGen *randGen=0) |
initialisation of the controller with the given sensor/ motornumber Must be called before use. | |
virtual | ~SeMoX () |
virtual int | getSensorNumber () const |
returns the number of sensors the controller was initialised with or 0 if not initialised | |
virtual int | getMotorNumber () const |
returns the mumber of motors the controller was initialised with or 0 if not initialised | |
virtual void | step (const sensor *, int number_sensors, motor *, int number_motors) |
performs one step (includes learning). | |
virtual void | stepNoLearning (const sensor *, int number_sensors, motor *, int number_motors) |
performs one step without learning. Calulates motor commands from sensor inputs. | |
virtual bool | store (FILE *f) const |
stores the controller values to a given file. | |
virtual bool | restore (FILE *f) |
loads the controller values from a given file. | |
virtual std::list< ILayer > | getStructuralLayers () const |
Specifies which parameter vector forms a structural layer (in terms of a neural network) The ordering is important. | |
virtual std::list< IConnection > | getStructuralConnections () const |
Specifies which parameter matrix forms a connection between layers (in terms of a neural network) The orderning is not important. | |
virtual void | setMotorTeaching (const matrix::Matrix &teaching) |
The given motor teaching signal is used for this timestep. | |
virtual void | setSensorTeaching (const matrix::Matrix &teaching) |
The given sensor teaching signal (distal learning) is used for this timestep. | |
virtual matrix::Matrix | getLastMotorValues () |
returns the last motor values (useful for cross motor coupling) | |
virtual matrix::Matrix | getLastSensorValues () |
returns the last sensor values (useful for cross sensor coupling) | |
Static Public Member Functions | |
static SeMoXConf | getDefaultConf () |
returns the default configuration | |
Protected Member Functions | |
virtual void | fillBuffersAndControl (const sensor *x_, int number_sensors, motor *y_, int number_motors) |
puts the sensors in the ringbuffer, generate controller values and put them in the | |
virtual void | calcXsi (int delay) |
calculates xsi for the current time step using the delayed y values | |
virtual void | learnController () |
learn H,C with motors y and corresponding sensors x | |
virtual void | learnModel (int delay) |
learn A, (and S) using motors y and corresponding sensors x | |
virtual matrix::Matrix | model (const matrix::Matrix *x_buffer, int delay, const matrix::Matrix &y) |
calculates the predicted sensor values | |
virtual void | management () |
handles inhibition damping etc. | |
virtual matrix::Matrix | calculateControllerValues (const matrix::Matrix &x_smooth) |
returns controller output for given sensor values | |
Static Protected Member Functions | |
static double | regularizedInverse (double v) |
Protected Attributes | |
unsigned short | number_sensors |
unsigned short | number_motors |
matrix::Matrix | A |
Model Matrix (motors to sensors). | |
matrix::Matrix | S |
additional Model Matrix (sensors derivatives to sensors) | |
matrix::Matrix | C |
Controller Matrix. | |
matrix::Matrix | H |
Controller Bias. | |
matrix::Matrix | B |
Model Bias. | |
matrix::Matrix | R |
C*A. | |
matrix::Matrix | SmallID |
small identity matrix in the dimension of R | |
matrix::Matrix | v |
shift | |
matrix::Matrix | xsi |
current output error | |
NoiseGenerator * | BNoiseGen |
Noisegenerator for noisy bias. | |
paramval | modelNoise |
strength of noisy bias | |
double | xsi_norm |
norm of matrix | |
double | xsi_norm_avg |
average norm of xsi (used to define whether Modell learns) | |
double | pain |
if the modelling error (xsi) is too high we have a pain signal | |
matrix::Matrix * | x_buffer |
matrix::Matrix * | x_c_buffer |
buffer for sensors with context sensors | |
matrix::Matrix * | y_buffer |
matrix::Matrix | y_teaching |
motor teaching signal | |
paramval | gamma_cont |
parameter to include contiuity in motor values (avoid high frequencies) | |
paramval | gamma_teach |
strength of teaching | |
paramval | discountS |
discount strength for hierachical model | |
paramval | dampModel |
damping of A and S matrices | |
paramval | dampController |
damping of C matrix | |
SeMoXConf | conf |
bool | intern_useTeaching |
flag whether there is an actual teachning signal or not | |
int | t_rand |
initial random time to avoid syncronous management of all controllers | |
int | managementInterval |
interval between subsequent management function calls | |
parambool | _modelExt_copy |
copy of modelExtension variable (to achieve readonly) | |
Friends | |
class | ThisSim |
This controller follows the prinziple of homeokinesis and implements the extensions described in the thesis of Georg Martius 2009, University Goettingen: Goal-Oriented Control of Self-organizing Behavior in Autonomous Robots.
This class also implements part of the guided self-organization
Name: SElf-organizing MOtor space eXtended
Main characteristics: Motor Space, Extended World model, Continuity, Teaching interface
~SeMoX | ( | ) | [virtual] |
Matrix calculateControllerValues | ( | const matrix::Matrix & | x_smooth | ) | [protected, virtual] |
returns controller output for given sensor values
calculate controller outputs
x_smooth | smoothed sensors Matrix(number_channels,1) |
void calcXsi | ( | int | delay | ) | [protected, virtual] |
calculates xsi for the current time step using the delayed y values
void fillBuffersAndControl | ( | const sensor * | x_, | |
int | number_sensors, | |||
motor * | y_, | |||
int | number_motors | |||
) | [protected, virtual] |
puts the sensors in the ringbuffer, generate controller values and put them in the
static SeMoXConf getDefaultConf | ( | ) | [inline, static] |
returns the default configuration
matrix::Matrix getLastMotorValues | ( | ) | [virtual] |
returns the last motor values (useful for cross motor coupling)
Implements Teachable.
matrix::Matrix getLastSensorValues | ( | ) | [virtual] |
returns the last sensor values (useful for cross sensor coupling)
Implements Teachable.
virtual int getMotorNumber | ( | ) | const [inline, virtual] |
returns the mumber of motors the controller was initialised with or 0 if not initialised
Implements AbstractController.
virtual int getSensorNumber | ( | ) | const [inline, virtual] |
returns the number of sensors the controller was initialised with or 0 if not initialised
Implements AbstractController.
list< Inspectable::IConnection > getStructuralConnections | ( | ) | const [virtual] |
Specifies which parameter matrix forms a connection between layers (in terms of a neural network) The orderning is not important.
Reimplemented from Inspectable.
list< Inspectable::ILayer > getStructuralLayers | ( | ) | const [virtual] |
Specifies which parameter vector forms a structural layer (in terms of a neural network) The ordering is important.
The first entry is the input layer and so on.
Reimplemented from Inspectable.
void init | ( | int | sensornumber, | |
int | motornumber, | |||
RandGen * | randGen = 0 | |||
) | [virtual] |
initialisation of the controller with the given sensor/ motornumber Must be called before use.
The random generator is optional.
Implements AbstractController.
void learnController | ( | ) | [protected, virtual] |
learn H,C with motors y and corresponding sensors x
learn controller paramters C and H
void learnModel | ( | int | delay | ) | [protected, virtual] |
learn A, (and S) using motors y and corresponding sensors x
void management | ( | ) | [protected, virtual] |
handles inhibition damping etc.
Matrix model | ( | const matrix::Matrix * | x_buffer, | |
int | delay, | |||
const matrix::Matrix & | y | |||
) | [protected, virtual] |
calculates the predicted sensor values
static double regularizedInverse | ( | double | v | ) | [static, protected] |
bool restore | ( | FILE * | f | ) | [virtual] |
loads the controller values from a given file.
Implements Storeable.
void setMotorTeaching | ( | const matrix::Matrix & | teaching | ) | [virtual] |
The given motor teaching signal is used for this timestep.
It is used as a feed forward teaching signal for the controller. Please note, that the teaching signal has to be given each timestep for a continuous teaching process.
teaching,: | matrix with dimensions (motornumber,1) |
Implements Teachable.
void setSensorTeaching | ( | const matrix::Matrix & | teaching | ) | [virtual] |
The given sensor teaching signal (distal learning) is used for this timestep.
The belonging motor teachung signal is calculated by the inverse model. See setMotorTeaching
teaching,: | matrix with dimensions (motorsensors,1) |
Implements Teachable.
performs one step (includes learning).
performs one step (includes learning). Calculates motor commands from sensor inputs.
Calulates motor commands from sensor inputs.
Implements AbstractController.
void stepNoLearning | ( | const sensor * | x, | |
int | number_sensors, | |||
motor * | y, | |||
int | number_motors | |||
) | [virtual] |
performs one step without learning. Calulates motor commands from sensor inputs.
Implements AbstractController.
bool store | ( | FILE * | f | ) | const [virtual] |
stores the controller values to a given file.
Implements Storeable.
friend class ThisSim [friend] |
parambool _modelExt_copy [protected] |
copy of modelExtension variable (to achieve readonly)
matrix::Matrix A [protected] |
Model Matrix (motors to sensors).
matrix::Matrix B [protected] |
Model Bias.
NoiseGenerator* BNoiseGen [protected] |
Noisegenerator for noisy bias.
matrix::Matrix C [protected] |
Controller Matrix.
paramval dampController [protected] |
damping of C matrix
paramval gamma_cont [protected] |
parameter to include contiuity in motor values (avoid high frequencies)
paramval gamma_teach [protected] |
strength of teaching
matrix::Matrix H [protected] |
Controller Bias.
bool intern_useTeaching [protected] |
flag whether there is an actual teachning signal or not
int managementInterval [protected] |
interval between subsequent management function calls
paramval modelNoise [protected] |
strength of noisy bias
unsigned short number_motors [protected] |
unsigned short number_sensors [protected] |
double pain [protected] |
if the modelling error (xsi) is too high we have a pain signal
matrix::Matrix R [protected] |
C*A.
matrix::Matrix S [protected] |
additional Model Matrix (sensors derivatives to sensors)
matrix::Matrix SmallID [protected] |
small identity matrix in the dimension of R
int t_rand [protected] |
initial random time to avoid syncronous management of all controllers
matrix::Matrix v [protected] |
shift
matrix::Matrix* x_buffer [protected] |
matrix::Matrix* x_c_buffer [protected] |
buffer for sensors with context sensors
matrix::Matrix xsi [protected] |
current output error
double xsi_norm [protected] |
norm of matrix
double xsi_norm_avg [protected] |
average norm of xsi (used to define whether Modell learns)
matrix::Matrix* y_buffer [protected] |
matrix::Matrix y_teaching [protected] |
motor teaching signal