vogels_sprekeler_synapse

vogels_sprekeler_synapse#

class brainpy.state.vogels_sprekeler_synapse(*args, **kwargs)#

Symmetric inhibitory-plasticity synapse spec (NEST vogels_sprekeler_synapse).

The substrate maintains a single, symmetric trace constant tau on both sides (pre_trace_tau = post_trace_tau = tau). This kernel gates its own writeback — the online all-to-all scheme equal to NEST’s deferred send() at every send (pre-spike) time:

  • post spike — symmetric facilitation using the pre trace K+;

  • pre spike — symmetric facilitation using the post trace K-, then a single constant depression (independent of any trace).

with the sign-aware, magnitude-saturating operations (NEST facilitate_/depress_)

\[ \begin{align}\begin{aligned}\operatorname{facilitate}(w, k) = \operatorname{copysign}\!\big(\min(|w| + \eta k,\ |W_{\max}|),\ W_{\max}\big)\\\operatorname{depress}(w) = \operatorname{copysign}\!\big(\max(|w| - \alpha\eta,\ 0),\ W_{\max}\big)\end{aligned}\end{align} \]

so the weight saturates at \(\pm |W_{\max}|\) while keeping Wmax’s sign (weights are typically inhibitory). Each side excludes the current step’s own spike from the opposite trace (K+ = pre_trace - pre_spike, K- = post_trace - post_spike).

Parameters:
  • weight (ArrayLike or Quantity, optional) – Per-edge weight (pA; bare numbers are pA). Same sign as Wmax (if non-zero). Default 0.5 pA.

  • delay (Quantity, optional) – Homogeneous axonal delay (> 0). Default 1.0 ms.

  • receptor_type (int, optional) – Postsynaptic receptor port (>= 0). Default 0.

  • tau (Quantity, optional) – Symmetric pre/post trace constant (> 0). Default 20.0 ms.

  • eta (float, optional) – Learning rate \(\eta\). Default 0.001.

  • alpha (float, optional) – Constant depression factor \(\alpha\) (sets the target rate). Default 0.12.

  • Wmax (float, optional) – Weight bound (magnitude; sign defines the weight sign). Default 1.0.

  • Kplus (float, optional) – Initial K+ (the substrate seeds traces at 0, the NEST default). Default 0.0.

Notes

NEST divergence — ``tau`` location. In NEST the postsynaptic trace K- is maintained by the post neuron (ArchivingNode) under its tau_minus; the symmetric rule requires tau_minus = tau. Here tau is a single synapse-spec attribute driving both per-neuron traces, so the rule runs standalone.

Online vs deferred: the substrate facilitates eagerly at post-spike steps, whereas NEST defers it to the next pre spike; the two coincide at pre-spike (send) times, so parity is asserted there.

References

Examples

>>> import brainunit as u
>>> from brainpy.state import vogels_sprekeler_synapse
>>> s = vogels_sprekeler_synapse(weight=0.5, alpha=0.12, eta=0.001)
>>> s.is_homogeneous_weight, s.edge_state_init()
(False, {})
>>> s.eta, s.alpha, s.Wmax
(0.001, 0.12, 1.0)
>>> bool(u.Quantity(s.pre_trace_tau).to_decimal(u.ms) == u.Quantity(s.post_trace_tau).to_decimal(u.ms))
True