Un neurone di Izhikevich è un modello semplice ma abbastanza efficace di un neurone biologico, progettato per l'uso in una simulazione discreta del time-stepping. In questa sfida del golf, implementerai questo modello.
parametri
Questo modello coinvolge solo 7 variabili organizzate in 2 equazioni differenziali, rispetto alle dozzine di parametri di un modello fisiologicamente accurato.
v
eu
sono le due variabili di stato del neurone. Qui,v
è la variabile "veloce" che rappresenta il potenziale cellulare nel tempo, edu
è la variabile "lenta" che rappresenta alcune proprietà della membrana. Lav
variabile è la più importante, poiché si tratta dell'output della simulazione.a
,b
,c
, Ed
sono fissati costanti che descrivono le proprietà del neurone. Diversi tipi di neuroni hanno costanti diverse, a seconda del comportamento desiderato. In particolare,c
è il potenziale di ripristino, ovvero il potenziale di membrana a cui la cellula ritorna dopo l'aggiunta.I
rappresenta la corrente in ingresso al neurone. Nelle simulazioni di rete, questo cambierà nel tempo, ma per i nostri scopi considereremoI
una costante fissa.
Il modello
Questo modello ha uno pseudocodice molto semplice. Innanzitutto, prendiamo i valori costanti di abcd
e li usiamo per inizializzare v
e u
:
v = c
u = b * c
Successivamente, eseguiamo il ciclo del codice di simulazione tutte le volte che lo desideri. Ogni iterazione rappresenta 1 millisecondo di tempo.
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
Alcune implementazioni del mondo reale includono passaggi aggiuntivi per l'accuratezza numerica, ma non stiamo includendo quelli qui.
Ingresso
Come input, il programma / funzione dovrebbe assumere i valori di a
, b
, c
, d
, I
, e t
(il numero di passaggi di tempo per simulare). Una volta impostato, nessuno di questi parametri cambierà durante la nostra semplice simulazione. L'ordine di input non ha importanza: puoi specificare l'ordine in cui il tuo programma accetta questi parametri.
Produzione
L'output sarà un elenco di numeri che rappresentano il potenziale di membrana della cellula (dato dalla variabile v
) nel corso della simulazione. L'elenco può essere in qualsiasi formato appropriato.
Puoi scegliere se includere il valore 0 della simulazione (la configurazione iniziale prima che sia trascorso un qualsiasi momento) nell'output. Ad esempio, per un input di 0.02 0.2 -50 2 10 6
(for a b c d I t
), un output di entrambi
-50
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
o
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
è accettabile.
I tuoi valori non devono essere esattamente gli stessi di quelli sopra, a seconda di come la tua lingua gestisce i float.
Implementazione di riferimento
Ecco un'implementazione TIO che ho scritto in Perl per dimostrare il modello. I parametri sono quelli di un neurone "chiacchierone" dall'articolo collegato sopra, e questo serve come dimostrazione di come questo modello è in grado di ricreare alcune delle proprietà più complesse dei neuroni, come l'alternanza tra stati di alta e bassa attività. Se guardi l'output, puoi vedere dove il neurone si innesca immediatamente più volte, ma poi aspetta un po 'prima di spuntare più volte (nonostante la tensione di ingresso della cella I
sia costante per tutto il tempo).
t
mai negativo?