1
1
/*
2
- * eprop_iaf_psc_delta .cpp
2
+ * eprop_iaf_bsshslm_2020 .cpp
3
3
*
4
4
* This file is part of NEST.
5
5
*
21
21
*/
22
22
23
23
// nest models
24
- #include " eprop_iaf_psc_delta .h"
24
+ #include " eprop_iaf_bsshslm_2020 .h"
25
25
26
26
// C++
27
27
#include < limits>
@@ -43,31 +43,31 @@ namespace nest
43
43
{
44
44
45
45
void
46
- register_eprop_iaf_psc_delta ( const std::string& name )
46
+ register_eprop_iaf_bsshslm_2020 ( const std::string& name )
47
47
{
48
- register_node_model< eprop_iaf_psc_delta >( name );
48
+ register_node_model< eprop_iaf_bsshslm_2020 >( name );
49
49
}
50
50
51
51
/* ----------------------------------------------------------------
52
52
* Recordables map
53
53
* ---------------------------------------------------------------- */
54
54
55
- RecordablesMap< eprop_iaf_psc_delta > eprop_iaf_psc_delta ::recordablesMap_;
55
+ RecordablesMap< eprop_iaf_bsshslm_2020 > eprop_iaf_bsshslm_2020 ::recordablesMap_;
56
56
57
57
template <>
58
58
void
59
- RecordablesMap< eprop_iaf_psc_delta >::create()
59
+ RecordablesMap< eprop_iaf_bsshslm_2020 >::create()
60
60
{
61
- insert_ ( names::learning_signal, &eprop_iaf_psc_delta ::get_learning_signal_ );
62
- insert_ ( names::surrogate_gradient, &eprop_iaf_psc_delta ::get_surrogate_gradient_ );
63
- insert_ ( names::V_m, &eprop_iaf_psc_delta ::get_v_m_ );
61
+ insert_ ( names::learning_signal, &eprop_iaf_bsshslm_2020 ::get_learning_signal_ );
62
+ insert_ ( names::surrogate_gradient, &eprop_iaf_bsshslm_2020 ::get_surrogate_gradient_ );
63
+ insert_ ( names::V_m, &eprop_iaf_bsshslm_2020 ::get_v_m_ );
64
64
}
65
65
66
66
/* ----------------------------------------------------------------
67
67
* Default constructors for parameters, state, and buffers
68
68
* ---------------------------------------------------------------- */
69
69
70
- eprop_iaf_psc_delta ::Parameters_::Parameters_ ()
70
+ eprop_iaf_bsshslm_2020 ::Parameters_::Parameters_ ()
71
71
: C_m_( 250.0 )
72
72
, c_reg_( 0.0 )
73
73
, E_L_( -70.0 )
@@ -83,7 +83,7 @@ eprop_iaf_psc_delta::Parameters_::Parameters_()
83
83
{
84
84
}
85
85
86
- eprop_iaf_psc_delta ::State_::State_ ()
86
+ eprop_iaf_bsshslm_2020 ::State_::State_ ()
87
87
: learning_signal_( 0.0 )
88
88
, r_( 0 )
89
89
, surrogate_gradient_( 0.0 )
@@ -94,12 +94,12 @@ eprop_iaf_psc_delta::State_::State_()
94
94
{
95
95
}
96
96
97
- eprop_iaf_psc_delta ::Buffers_::Buffers_ ( eprop_iaf_psc_delta & n )
97
+ eprop_iaf_bsshslm_2020 ::Buffers_::Buffers_ ( eprop_iaf_bsshslm_2020 & n )
98
98
: logger_( n )
99
99
{
100
100
}
101
101
102
- eprop_iaf_psc_delta ::Buffers_::Buffers_ ( const Buffers_&, eprop_iaf_psc_delta & n )
102
+ eprop_iaf_bsshslm_2020 ::Buffers_::Buffers_ ( const Buffers_&, eprop_iaf_bsshslm_2020 & n )
103
103
: logger_( n )
104
104
{
105
105
}
@@ -109,7 +109,7 @@ eprop_iaf_psc_delta::Buffers_::Buffers_( const Buffers_&, eprop_iaf_psc_delta& n
109
109
* ---------------------------------------------------------------- */
110
110
111
111
void
112
- eprop_iaf_psc_delta ::Parameters_::get ( DictionaryDatum& d ) const
112
+ eprop_iaf_bsshslm_2020 ::Parameters_::get ( DictionaryDatum& d ) const
113
113
{
114
114
def< double >( d, names::C_m, C_m_ );
115
115
def< double >( d, names::c_reg, c_reg_ );
@@ -126,7 +126,7 @@ eprop_iaf_psc_delta::Parameters_::get( DictionaryDatum& d ) const
126
126
}
127
127
128
128
double
129
- eprop_iaf_psc_delta ::Parameters_::set ( const DictionaryDatum& d, Node* node )
129
+ eprop_iaf_bsshslm_2020 ::Parameters_::set ( const DictionaryDatum& d, Node* node )
130
130
{
131
131
// if leak potential is changed, adjust all variables defined relative to it
132
132
const double ELold = E_L_;
@@ -209,15 +209,15 @@ eprop_iaf_psc_delta::Parameters_::set( const DictionaryDatum& d, Node* node )
209
209
}
210
210
211
211
void
212
- eprop_iaf_psc_delta ::State_::get ( DictionaryDatum& d, const Parameters_& p ) const
212
+ eprop_iaf_bsshslm_2020 ::State_::get ( DictionaryDatum& d, const Parameters_& p ) const
213
213
{
214
214
def< double >( d, names::V_m, v_m_ + p.E_L_ );
215
215
def< double >( d, names::surrogate_gradient, surrogate_gradient_ );
216
216
def< double >( d, names::learning_signal, learning_signal_ );
217
217
}
218
218
219
219
void
220
- eprop_iaf_psc_delta ::State_::set ( const DictionaryDatum& d, const Parameters_& p, double delta_EL, Node* node )
220
+ eprop_iaf_bsshslm_2020 ::State_::set ( const DictionaryDatum& d, const Parameters_& p, double delta_EL, Node* node )
221
221
{
222
222
v_m_ -= updateValueParam< double >( d, names::V_m, v_m_, node ) ? p.E_L_ : delta_EL;
223
223
}
@@ -226,7 +226,7 @@ eprop_iaf_psc_delta::State_::set( const DictionaryDatum& d, const Parameters_& p
226
226
* Default and copy constructor for node
227
227
* ---------------------------------------------------------------- */
228
228
229
- eprop_iaf_psc_delta::eprop_iaf_psc_delta ()
229
+ eprop_iaf_bsshslm_2020::eprop_iaf_bsshslm_2020 ()
230
230
: EpropArchivingNodeRecurrent()
231
231
, P_()
232
232
, S_()
@@ -235,7 +235,7 @@ eprop_iaf_psc_delta::eprop_iaf_psc_delta()
235
235
recordablesMap_.create ();
236
236
}
237
237
238
- eprop_iaf_psc_delta::eprop_iaf_psc_delta ( const eprop_iaf_psc_delta & n )
238
+ eprop_iaf_bsshslm_2020::eprop_iaf_bsshslm_2020 ( const eprop_iaf_bsshslm_2020 & n )
239
239
: EpropArchivingNodeRecurrent( n )
240
240
, P_( n.P_ )
241
241
, S_( n.S_ )
@@ -248,23 +248,23 @@ eprop_iaf_psc_delta::eprop_iaf_psc_delta( const eprop_iaf_psc_delta& n )
248
248
* ---------------------------------------------------------------- */
249
249
250
250
void
251
- eprop_iaf_psc_delta ::init_buffers_ ()
251
+ eprop_iaf_bsshslm_2020 ::init_buffers_ ()
252
252
{
253
253
B_.spikes_ .clear (); // includes resize
254
254
B_.currents_ .clear (); // includes resize
255
255
B_.logger_ .reset (); // includes resize
256
256
}
257
257
258
258
void
259
- eprop_iaf_psc_delta ::pre_run_hook ()
259
+ eprop_iaf_bsshslm_2020 ::pre_run_hook ()
260
260
{
261
261
B_.logger_ .init (); // ensures initialization in case multimeter connected after Simulate
262
262
263
263
V_.RefractoryCounts_ = Time ( Time::ms ( P_.t_ref_ ) ).get_steps ();
264
264
265
265
if ( P_.surrogate_gradient_function_ == " piecewise_linear" )
266
266
{
267
- compute_surrogate_gradient = &eprop_iaf_psc_delta ::compute_piecewise_linear_derivative;
267
+ compute_surrogate_gradient = &eprop_iaf_bsshslm_2020 ::compute_piecewise_linear_derivative;
268
268
}
269
269
270
270
// calculate the entries of the propagator matrix for the evolution of the state vector
@@ -287,13 +287,13 @@ eprop_iaf_psc_delta::pre_run_hook()
287
287
}
288
288
289
289
long
290
- eprop_iaf_psc_delta ::get_shift () const
290
+ eprop_iaf_bsshslm_2020 ::get_shift () const
291
291
{
292
292
return offset_gen_ + delay_in_rec_;
293
293
}
294
294
295
295
bool
296
- eprop_iaf_psc_delta ::is_eprop_recurrent_node () const
296
+ eprop_iaf_bsshslm_2020 ::is_eprop_recurrent_node () const
297
297
{
298
298
return true ;
299
299
}
@@ -303,7 +303,7 @@ eprop_iaf_psc_delta::is_eprop_recurrent_node() const
303
303
* ---------------------------------------------------------------- */
304
304
305
305
void
306
- eprop_iaf_psc_delta ::update ( Time const & origin, const long from, const long to )
306
+ eprop_iaf_bsshslm_2020 ::update ( Time const & origin, const long from, const long to )
307
307
{
308
308
const long update_interval = kernel ().simulation_manager .get_eprop_update_interval ().get_steps ();
309
309
const bool with_reset = kernel ().simulation_manager .get_eprop_reset_neurons_on_update ();
@@ -379,7 +379,7 @@ eprop_iaf_psc_delta::update( Time const& origin, const long from, const long to
379
379
* ---------------------------------------------------------------- */
380
380
381
381
double
382
- eprop_iaf_psc_delta ::compute_piecewise_linear_derivative ()
382
+ eprop_iaf_bsshslm_2020 ::compute_piecewise_linear_derivative ()
383
383
{
384
384
if ( S_.r_ > 0 )
385
385
{
@@ -394,7 +394,7 @@ eprop_iaf_psc_delta::compute_piecewise_linear_derivative()
394
394
* ---------------------------------------------------------------- */
395
395
396
396
void
397
- eprop_iaf_psc_delta ::handle ( SpikeEvent& e )
397
+ eprop_iaf_bsshslm_2020 ::handle ( SpikeEvent& e )
398
398
{
399
399
assert ( e.get_delay_steps () > 0 );
400
400
@@ -403,7 +403,7 @@ eprop_iaf_psc_delta::handle( SpikeEvent& e )
403
403
}
404
404
405
405
void
406
- eprop_iaf_psc_delta ::handle ( CurrentEvent& e )
406
+ eprop_iaf_bsshslm_2020 ::handle ( CurrentEvent& e )
407
407
{
408
408
assert ( e.get_delay_steps () > 0 );
409
409
@@ -412,7 +412,7 @@ eprop_iaf_psc_delta::handle( CurrentEvent& e )
412
412
}
413
413
414
414
void
415
- eprop_iaf_psc_delta ::handle ( LearningSignalConnectionEvent& e )
415
+ eprop_iaf_bsshslm_2020 ::handle ( LearningSignalConnectionEvent& e )
416
416
{
417
417
for ( auto it_event = e.begin (); it_event != e.end (); )
418
418
{
@@ -426,13 +426,13 @@ eprop_iaf_psc_delta::handle( LearningSignalConnectionEvent& e )
426
426
}
427
427
428
428
void
429
- eprop_iaf_psc_delta ::handle ( DataLoggingRequest& e )
429
+ eprop_iaf_bsshslm_2020 ::handle ( DataLoggingRequest& e )
430
430
{
431
431
B_.logger_ .handle ( e );
432
432
}
433
433
434
434
double
435
- eprop_iaf_psc_delta ::compute_gradient ( std::vector< long >& presyn_isis,
435
+ eprop_iaf_bsshslm_2020 ::compute_gradient ( std::vector< long >& presyn_isis,
436
436
const long t_previous_update,
437
437
const long t_previous_trigger_spike,
438
438
const double kappa,
0 commit comments