Ein Izhikevich-Neuron ist ein einfaches, aber sehr effektives Modell eines biologischen Neurons, das für die Verwendung in einer diskreten Zeitschritt-Simulation entwickelt wurde. In dieser Golfherausforderung implementieren Sie dieses Modell.
Parameter
Dieses Modell umfasst nur 7 Variablen, die in 2 Differentialgleichungen organisiert sind, verglichen mit den Dutzenden von Parametern eines physiologisch genauen Modells.
v
undu
sind die beiden Zustandsvariablen des Neurons. Hierbeiv
handelt es sich um die "schnelle" Variable, die das Zellpotential über die Zeit darstellt, undu
um die "langsame" Variable, die bestimmte Membraneigenschaften darstellt. Diev
Variable ist die wichtigste, da dies die Ausgabe der Simulation ist.a
,b
,c
, Undd
sind Konstanten festgelegt, die die Eigenschaften des Neurons beschreiben. Verschiedene Arten von Neuronen haben je nach gewünschtem Verhalten unterschiedliche Konstanten. Bemerkenswertc
ist das Rücksetzpotential, dh das Membranpotential, auf das die Zelle nach dem Aufstocken zurückkehrt.I
repräsentiert den Eingangsstrom zum Neuron. In Netzwerksimulationen wird sich dies mit der Zeit ändern, aber für unsere Zwecke werden wir diesI
als feste Konstante behandeln.
Das Model
Dieses Modell hat einen sehr einfachen Pseudocode. Zunächst nehmen wir die konstanten Werte von abcd
und verwenden sie zur Initialisierung v
und u
:
v = c
u = b * c
Als nächstes durchlaufen wir den Simulationscode so oft wie gewünscht. Jede Iteration entspricht einer Millisekunde.
for 1..t:
if v >= 30: # reset after a spike
v = c
u = u + d
v += 0.04*v^2 + 5*v + 140 - u + I
u += a * (b*v - u)
print v
Bestimmte Real-World-Implementierungen enthalten zusätzliche Schritte für die numerische Genauigkeit, die hier jedoch nicht berücksichtigt werden.
Eingang
Als Eingabe Ihr Programm / Funktion die Werte nehmen soll a
, b
, c
, d
, I
, und t
(die Anzahl der Zeitschritte zu simulieren). Einmal eingestellt, ändert sich keiner dieser Parameter während unserer einfachen Simulation. Die Reihenfolge der Eingabe spielt keine Rolle: Sie können die Reihenfolge angeben, in der Ihr Programm diese Parameter verwendet.
Ausgabe
Es wird eine Liste von Zahlen ausgegeben, die das Membranpotential der Zelle (gegeben durch Variable v
) im Verlauf der Simulation darstellen. Die Liste kann in jedem geeigneten Format vorliegen.
Sie haben die Wahl, ob Sie den 0. Wert der Simulation (die Erstkonfiguration, bevor eine Zeit verstrichen ist) in Ihre Ausgabe einbeziehen möchten. Zum Beispiel für eine Eingabe von 0.02 0.2 -50 2 10 6
(für a b c d I t
) eine Ausgabe von entweder
-50
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
oder
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
ist akzeptabel.
Ihre Werte müssen nicht exakt mit den oben genannten Werten übereinstimmen , je nachdem, wie Ihre Sprache mit Gleitkommazahlen umgeht.
Referenzimplementierung
Hier ist eine TIO-Implementierung, die ich in Perl geschrieben habe, um das Modell zu demonstrieren. Die Parameter sind die eines "klappernden" Neurons aus dem oben verlinkten Artikel, und dies dient als Demonstration, wie dieses Modell einige der komplexeren Eigenschaften von Neuronen wiederherstellen kann, wie z. B. das Wechseln zwischen Zuständen hoher und niedriger Aktivität. Wenn Sie sich den Ausgang ansehen, können Sie sehen, wo das Neuron sofort mehrere Male spitzt, aber dann eine Weile wartet, bevor es mehrere Male spitzt (obwohl die Zelleingangsspannung I
die ganze Zeit konstant ist).
t
jemals negativ sein?