Auryn simulator  v0.8.1-206-gb56e451
Plastic Spiking Neural Network Simulator
Public Member Functions | List of all members
auryn::LinearTrace Class Reference

Exponential synaptic trace which exactly solves in an event-based manner in non-follow scenarios. More...

#include <LinearTrace.h>

Inheritance diagram for auryn::LinearTrace:
Inheritance graph
[legend]
Collaboration diagram for auryn::LinearTrace:
Collaboration graph
[legend]

Public Member Functions

 LinearTrace (NeuronID n, AurynFloat timeconstant)
 
 LinearTrace (NeuronID n, AurynFloat timeconstant, AurynTime *clk)
 
virtual ~LinearTrace ()
 
void inc (NeuronID i)
 Increment given trace by 1. More...
 
void add_specific (NeuronID i, AurynState amount)
 
AurynFloat get (NeuronID i)
 
void update (NeuronID i)
 
void evolve ()
 
- Public Member Functions inherited from auryn::EulerTrace
 EulerTrace (NeuronID n, AurynFloat timeconstant)
 
virtual ~EulerTrace ()
 
void set_timeconstant (AurynFloat timeconstant)
 
void set_target (AurynStateVector *target)
 
void follow ()
 
- Public Member Functions inherited from auryn::Trace
 Trace (NeuronID n, AurynFloat timeconstant)
 Default constructor. More...
 
virtual ~Trace ()
 Default destructor. More...
 
virtual void inc (SpikeContainer *sc)
 Increment given traces by 1. More...
 
AurynFloat get_tau ()
 Get decay time constant. More...
 
virtual AurynFloat normalized_get (NeuronID i)
 Get trace value of trace dived by tau. More...
 
virtual AurynStateVectorget_state_ptr ()
 Get pointer to state AurynStateVector for fast processing. More...
 
virtual void follow (AurynVectorFloat *v, const float rate)
 Follow other vector. More...
 
- Public Member Functions inherited from auryn::AurynVectorFloat
 AurynVectorFloat (NeuronID n)
 Default constructor. More...
 
 ~AurynVectorFloat ()
 Default destructor. More...
 
virtual void resize (NeuronID new_size)
 resize data array to new_size More...
 
void scale (const float a)
 
void saxpy (const float a, AurynVectorFloat *x)
 
void clip (const float min, const float max)
 
void add (const float c)
 
void add (AurynVectorFloat *v)
 
void sum (AurynVectorFloat *a, AurynVectorFloat *b)
 
void sum (AurynVectorFloat *a, const float b)
 
void mul (const float a)
 
void mul (AurynVectorFloat *v)
 
void diff (AurynVectorFloat *a, AurynVectorFloat *b)
 
void diff (AurynVectorFloat *a, const float b)
 
void diff (const float a, AurynVectorFloat *b)
 
void follow (AurynVectorFloat *v, const float rate)
 
- Public Member Functions inherited from auryn::AurynVector< float, NeuronID >
 AurynVector (NeuronID n)
 Default constructor. More...
 
 AurynVector (AurynVector *vec)
 Copy constructor. More...
 
virtual ~AurynVector ()
 Default destructor. More...
 
void copy (AurynVector *v)
 Copies vector v. More...
 
float get (NeuronID i)
 Gets element i from vector. More...
 
float * ptr (NeuronID i=0)
 Gets pointer to element i from vector. More...
 
void set (NeuronID i, float value)
 Sets element i in vector to value. More...
 
void set_all (const float v)
 Set all elements to value v. More...
 
void set_zero ()
 Set all elements to zero. More...
 
void scale (const float a)
 Scales all vector elements by a. More...
 
void add (const float c)
 Adds constant c to each vector element. More...
 
void add (AurynVector *v)
 Adds a vector v to the vector. More...
 
void add_specific (const NeuronID i, const float c)
 Adds the value c to specific vector element i. More...
 
void mul_specific (const NeuronID i, const float c)
 Multiply to specific vector element with data index i with the constant c. More...
 
void sub (const float c)
 Subtract constant c to each vector element. More...
 
void sub (AurynVector *v)
 Elementwise subtraction. More...
 
void mul (const float a)
 Multiply all vector elements by constant. More...
 
void mul (AurynVector *v)
 Element-wise vector multiply. More...
 
void div (const float a)
 Element-wise division. More...
 
void div (AurynVector *v)
 Element-wise vector division. More...
 
void div (AurynVector *a, AurynVector *b)
 Element-wise vector division which stores the result in this. More...
 
void saxpy (const float a, AurynVector *x)
 SAXPY operation as in GSL. More...
 
void follow (AurynVector< float, NeuronID > *v, const float rate)
 Follows target vector v with rate. More...
 
void follow_scalar (const float a, const float rate)
 Like follow but with a scalar target value a. More...
 
void elementwise_max (AurynVector *v1, AurynVector *v2)
 Elementwise max operation. More...
 
void elementwise_max (AurynVector *v1)
 Elementwise max operation with another vector. More...
 
void pow (const unsigned int n)
 Takes each element to the n-th power. More...
 
void fast_exp ()
 Computes an approximation of exp(x) for each vector element. More...
 
void exp ()
 Computes exp(x) for each vector element. More...
 
void sigmoid (AurynVector *x, const float beta, const float thr)
 Computes sigmoid(beta*(x-thr)) for each vector element and stores result in this instance. More...
 
void sqrt ()
 Takes the square root of each element. More...
 
void neg ()
 Flips the sign of all elements. More...
 
void inv ()
 Computes 1./x of each element. More...
 
void sum (AurynVector *a, AurynVector *b)
 Computes the sum a+b and stores the result in this instance. More...
 
void sum (AurynVector *a, const float b)
 Computes the sum a+b and stores the result in this instance. More...
 
void diff (AurynVector *a, AurynVector *b)
 Computes the difference a-b and stores the result in this instance. More...
 
void diff (AurynVector *a, const float b)
 Computes the difference a-b and stores the result in this instance. More...
 
void diff (const float a, AurynVector *b)
 Computes the difference a-b and stores the result in this instance. More...
 
void sqr ()
 Squares each element. More...
 
void abs ()
 Takes absolute value of each element. More...
 
void rect ()
 Rectifies all elements. More...
 
void neg_rect ()
 Negatively rectifies all elements. More...
 
void clip (float min, float max)
 Clips all vector elements to the range min max. More...
 
double var ()
 Computes the variance of the vector elements on this rank. More...
 
double std ()
 Computes the standard deviation of all elements on this rank. More...
 
double mean ()
 Computes the mean of the vector elements on this rank. More...
 
double element_sum ()
 Computes the sum of the vector elements. More...
 
double l1norm ()
 Computes the l1 norm of the vector. More...
 
double l2norm ()
 Computes the l2 norm of the vector. More...
 
double max ()
 Returns the max of the vector elements. More...
 
double min ()
 Returns the min of the vector elements. More...
 
NeuronID nonzero ()
 Computes number of nonzero elements on this rank. More...
 
void zero_effective_zeros (const float epsilon=1e-3)
 Sets all values whose absolute value is smaller than epsilon to zero. More...
 
void add_random_normal (AurynState mean=0.0, AurynState sigma=1.0, unsigned int seed=8721)
 
void set_random_normal (AurynState mean=0.0, AurynState sigma=1.0, unsigned int seed=8721)
 
void set_random (unsigned int seed=0)
 Initializes vector elements with Gaussian of unit varince and a seed derived from system time if no seed or seed of 0 is given. More...
 
bool any ()
 Returns true if any element is nonzero. More...
 
bool any (float eps)
 Returns true if any element is nonzero. More...
 
void print ()
 Print vector elements to stdout for debugging. More...
 
void write_to_file (std::string filename)
 Print vector elements to a text file for debugging. More...
 

Additional Inherited Members

- Public Attributes inherited from auryn::AurynVector< float, NeuronID >
NeuronID size
 Size of the vector. More...
 
float * data
 Pointer to the array housing the data. More...
 
- Protected Member Functions inherited from auryn::AurynVector< float, NeuronID >
void check_size (NeuronID x)
 Checks if argument is larger than size and throws and exception if so. More...
 
void check_size (AurynVector *v)
 Checks if vector size matches to this instance. More...
 
void allocate (const NeuronID n)
 Implements aligned memory allocation. More...
 
void freebuf ()
 
float fast_exp256 (float x)
 Computes approximation of exp(x) via fast series approximation up to n=256. More...
 
- Protected Attributes inherited from auryn::Trace
AurynFloat tau
 

Detailed Description

Exponential synaptic trace which exactly solves in an event-based manner in non-follow scenarios.

Since this trace is normally slower than brute-force computing all traces with forward Euler (EulerTrace), it is disabled by default.

Constructor & Destructor Documentation

◆ LinearTrace() [1/2]

LinearTrace::LinearTrace ( NeuronID  n,
AurynFloat  timeconstant 
)
44  : super(n, timeconstant)
45 {
46  init(n,timeconstant);
47  clock = sys->get_clock_ptr();
48 }
AurynTime * get_clock_ptr()
Gets a pointer to the current clock.
Definition: System.cpp:236
int n
Definition: mkpat.py:5
System * sys
Global pointer to instance of System which needs to be initialized in every simulation main program...
Definition: auryn_global.cpp:37
Here is the call graph for this function:

◆ LinearTrace() [2/2]

LinearTrace::LinearTrace ( NeuronID  n,
AurynFloat  timeconstant,
AurynTime clk 
)
50  : super(n, timeconstant)
51 {
52  init(n,timeconstant);
53  clock = clk;
54 }
int n
Definition: mkpat.py:5

◆ ~LinearTrace()

LinearTrace::~LinearTrace ( )
virtual
57 {
58  free();
59 }

Member Function Documentation

◆ add_specific()

void LinearTrace::add_specific ( NeuronID  i,
AurynState  amount 
)
77 {
78  update(i);
79  super::add_specific(i, amount);
80 }
void add_specific(const NeuronID i, const float c)
Adds the value c to specific vector element i.
Definition: AurynVector.h:263
void update(NeuronID i)
Definition: LinearTrace.cpp:62
Here is the call graph for this function:

◆ evolve()

void LinearTrace::evolve ( )
virtual

Perform Euler step.

Reimplemented from auryn::EulerTrace.

96 {
97  // lazy on evolve updates on get and inc
98 }

◆ get()

AurynFloat LinearTrace::get ( NeuronID  i)
89 {
90  update(i);
91  return super::get(i);
92 }
float get(NeuronID i)
Gets element i from vector.
Definition: AurynVector.h:207
void update(NeuronID i)
Definition: LinearTrace.cpp:62
Here is the call graph for this function:

◆ inc()

void LinearTrace::inc ( NeuronID  i)
virtual

Increment given trace by 1.

Parameters
iindex of trace to increment.

Reimplemented from auryn::Trace.

83 {
84  update(i);
85  data[i] += 1.0;
86 }
float * data
Pointer to the array housing the data.
Definition: AurynVector.h:154
void update(NeuronID i)
Definition: LinearTrace.cpp:62
Here is the call graph for this function:

◆ update()

void LinearTrace::update ( NeuronID  i)
63 {
64  const int timediff = *clock - timestamp[i];
65  if ( timediff == 0 ) return;
66 
67  if ( timediff >= zerointerval ) {
68  data[i] = 0.0;
69  } else { // as a last resort call exp
70  data[i] *= std::exp( -(auryn_timestep*timediff)/tau);
71  }
72 
73  timestamp[i] = *clock;
74 }
float * data
Pointer to the array housing the data.
Definition: AurynVector.h:154
AurynFloat tau
Definition: Trace.h:43
double auryn_timestep
Simulation timestep in seconds.
Definition: auryn_definitions.cpp:31

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