Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

SRMNeuron.h

Go to the documentation of this file.
00001 #ifndef __SRMNEURON_H
00002 #define __SRMNEURON_H
00003 
00004 #include "Neuron.h"
00005 #include <an/Numeric.h>
00006 #include "../../utils/SpikeDelayLine.h"
00007 
00008 #include <queue>
00009 #include <cmath>
00010 
00015 namespace Teem
00016 {
00029     class SRMNeuron : public Neuron
00030     {
00031     public:
00032         SRMNeuron();
00033         virtual ~SRMNeuron() { }
00034     
00035         // Neuron overrides
00036         virtual void setParams(const std::string &param, double value);
00037         virtual void update(double dt);
00038         virtual void commit();
00039         
00042         void overrideSpike(bool spike) { lastSpike = spike; }
00043     
00044     public:
00046         double membrane;
00048         double threshold;
00049         
00050     protected:
00052         An::ExpDecay refractory;
00054         bool isSpiking;
00056         double thresNoise;
00058         double refracQuantum;
00059     };
00060     
00070     class DelaySynapse : public Synapse
00071     {
00072     public:
00073         DelaySynapse() { setDelay(2.0); incomingSpikes = 0; }
00074         virtual ~DelaySynapse() { }
00075         
00076         virtual void setParams(const std::string &param, double value);
00077         virtual void update(double dt = 1.0);
00078         
00080         virtual void setDelay(double theDelay) { delayLine.setDelay(theDelay); }
00081     
00082     protected:
00084         SpikeDelayLine delayLine;
00086         unsigned incomingSpikes;
00087     };
00088     
00101     class SRMSynapse :  public DelaySynapse
00102     {
00103     public:
00104         SRMSynapse();
00105         virtual ~SRMSynapse() {}
00106     
00107         // Synapse overrides
00108         virtual void setParams(const std::string &param, double value);
00109         virtual bool getSpike() const {return false;}
00110         virtual double getCurrent() const {return response;}
00111         
00112         virtual void update(double dt = 1.0);
00113         
00114         // Accessors.
00116         virtual void setTau(double theTau)
00117         {
00118             spikeResponse1.setTau(theTau / std::log(2.0));
00119             spikeResponse2.setTau(theTau / (2.0 * std::log(2.0)));
00120         }
00121     
00122     protected:
00123         
00125         An::ExpDecay spikeResponse1;
00127         An::ExpDecay spikeResponse2;
00129         double response;
00130         
00131     };
00132     
00145     class SRMPlasticSynapse : public SRMSynapse
00146     {
00147     public:
00148         SRMPlasticSynapse();
00149         virtual ~SRMPlasticSynapse() {}
00150         
00151         virtual void setParams(const std::string &param, double value);
00152         
00153         virtual void update(double dt = 1.0);
00154         
00155         static double learningRate;  
00156         static double stdpControl; 
00157         
00158     protected:
00159     
00161         double potFactor;
00163         double deprFactor;
00165         An::ExpDecay potState;
00167         An::ExpDecay deprState;
00169         SpikeDelayLine preDelayLine;
00171         SpikeDelayLine postDelayLine;
00172         
00173         
00175         void preformLearning(double dt);
00176     };
00177 }
00178 
00179 #endif

Generated on Mon Oct 24 17:38:25 2005 for Teem by  doxygen 1.4.2