normalize.hpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #ifndef _HPP_NORMALIZE
  2. #define _HPP_NORMALIZE
  3. #include "simelement.hpp"
  4. #include "libcsim.hpp"
  5. #include "connection.hpp"
  6. /*! \brief AbstractNormalize
  7. *
  8. */
  9. class AbstractNormalize: public SimElement
  10. {
  11. protected:
  12. bool RewiringOn;
  13. float IncommingConnectivity; // for rewiring
  14. float SynDelThreshold; // for rewiring
  15. float InitialWeights; // for rewiring
  16. public:
  17. AbstractNormalize();
  18. virtual void SetRewiring(float IncommingConnectivity, float SynDelThreshold, float InitialWeights);
  19. virtual void SetRewiringOff();
  20. };
  21. /*! \brief Normalize
  22. *
  23. */
  24. class Normalize: public AbstractNormalize
  25. {
  26. protected:
  27. layer* Target;
  28. TconnectionList ConList;
  29. int NTarget;
  30. public:
  31. Normalize();
  32. virtual int AddConnection(connection* newcon);
  33. virtual int proceede(int =0);
  34. virtual int prepare(int =0);
  35. virtual int WriteSimInfo(fstream &fw);
  36. virtual int WriteSimInfo(fstream &fw, const string &ChildInfo);
  37. };
  38. /*! \brief FiringRateNormalize
  39. *
  40. */
  41. class FiringRateNormalize: public Normalize
  42. {
  43. protected:
  44. float* PostSynFirePot;
  45. int* PostSynLastFirings;
  46. float Tau;
  47. float NormThreshold;
  48. float NormFactor;
  49. public:
  50. FiringRateNormalize(float _NormThresh=1, float _NormFactor=1, float _Tau=40);
  51. virtual int AddConnection(connection* newcon);
  52. virtual int proceede(int =0);
  53. virtual int prepare(int =0);
  54. };
  55. /*! \brief FiringRateNormalize2
  56. *
  57. */
  58. class FiringRateNormalize2: public Normalize
  59. {
  60. protected:
  61. int* PostSynLastFirings;
  62. float Tau;
  63. float* NormLut;
  64. int NormLutN;
  65. float MaxNormFactor;
  66. float NormDeltaT;
  67. float NormFactor;
  68. float NormFrequency;
  69. public:
  70. FiringRateNormalize2(float NormFrequency=1, float NormFactor=0.001, float MaxNormFactor=10);
  71. virtual int AddConnection(connection* newcon);
  72. virtual int proceede(int =0);
  73. virtual int prepare(int =0);
  74. virtual int WriteSimInfo(fstream &fw);
  75. };
  76. /*! \brief ConstSFNormalize
  77. *
  78. */
  79. class ConstSFNormalize: public Normalize
  80. {
  81. protected:
  82. float* PostSynFirePot;
  83. int* PostSynLastFirings;
  84. float Tau;
  85. float NormThreshold;
  86. float NormFactor;
  87. float DesiredFirePot;
  88. public:
  89. ConstSFNormalize(float _DesiredSpikeFreq=30, float _NormFactor=0.01, float _Tau=40);
  90. virtual int AddConnection(connection* newcon);
  91. virtual int proceede(int =0);
  92. virtual int prepare(int =0);
  93. virtual int WriteSimInfo(fstream &fw);
  94. };
  95. /*! \brief ConstSumNormalize
  96. *
  97. */
  98. class ConstSumNormalize: public Normalize
  99. {
  100. protected:
  101. float* PostSynWeightSum;
  102. float WeightSum;
  103. int* PostSynLastFirings;
  104. bool quadratic;
  105. public:
  106. ConstSumNormalize(float _WeightSum=1, bool _quadratic=false);
  107. // virtual int AddConnection(connection* newcon);
  108. virtual int proceede(int =0);
  109. int NormalizeAll();
  110. void CalcInitWeightSum(); //calculate weight sum from initial weight distribution
  111. float GetWeightSum();
  112. int SetWeightSum(float NewWeightSum);
  113. virtual int WriteSimInfo(fstream &fw);
  114. // virtual int prepare(int =0);
  115. };
  116. /*! \brief NormalizePsp
  117. *
  118. */
  119. class NormalizePsp: public Normalize
  120. {
  121. protected:
  122. int* PostSynLastFirings;
  123. float* PspPot;
  124. float NormThreshold;
  125. float NormFactor;
  126. public:
  127. NormalizePsp(float _NormThresh=1, float _NormFactor=0.95);
  128. virtual int AddConnection(connection* newcon);
  129. virtual int proceede(int =0);
  130. virtual int WriteSimInfo(fstream &fw);
  131. };
  132. #endif /*_HPP_NORMALIZE */