Una neurona Izhikevich es un modelo simple pero bastante efectivo de una neurona biológica, diseñada para su uso en una simulación discreta de tiempo. En este desafío de golf, implementará este modelo.
Parámetros
Este modelo involucra solo 7 variables organizadas en 2 ecuaciones diferenciales, en comparación con las docenas de parámetros de un modelo fisiológicamente preciso.
v
yu
son las dos variables de estado de la neurona. Aquí,v
está la variable "rápida" que representa el potencial celular a lo largo del tiempo, yu
es la variable "lenta" que representa ciertas propiedades de la membrana. Lav
variable es la más importante, ya que esta es la salida de la simulación.a
,b
,c
, Yd
son constantes que describen las propiedades de la neurona fijo. Los diferentes tipos de neuronas tienen diferentes constantes, dependiendo del comportamiento deseado. Notablemente,c
es el potencial de reinicio, que es el potencial de membrana al que la célula regresa después del aumento.I
representa la corriente de entrada a la neurona. En las simulaciones de red, esto cambiará con el tiempo, pero para nuestros propósitos lo trataremosI
como una constante fija.
El modelo
Este modelo tiene un pseudocódigo muy simple. Primero, tomamos los valores constantes de abcd
y los usamos para inicializar v
y u
:
v = c
u = b * c
A continuación, recorremos el código de simulación tantas veces como lo desee. Cada iteración representa 1 milisegundo de tiempo.
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
Ciertas implementaciones del mundo real incluyen pasos adicionales para la precisión numérica, pero no las incluimos aquí.
Entrada
Como entrada, su programa / función debe tomar los valores de a
, b
, c
, d
, I
, y t
(el número de pasos de tiempo para simular). Una vez establecidos, ninguno de estos parámetros cambiará durante nuestra simulación simple. El orden de entrada no importa: puede especificar el orden en que su programa toma estos parámetros.
Salida
La salida será una lista de números que representan el potencial de membrana de la célula (dada por variable v
) en el transcurso de la simulación. La lista puede estar en cualquier formato apropiado.
Tiene la opción de incluir el valor 0 de la simulación (la configuración inicial antes de que pase cualquier momento) en su salida. Por ejemplo, para una entrada de 0.02 0.2 -50 2 10 6
(para a b c d I t
), una salida de
-50
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
o
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
es aceptable.
Sus valores no tienen que ser exactamente los mismos que los anteriores, dependiendo de cómo su idioma maneje los flotantes.
Implementación de referencia
Aquí hay una implementación de TIO que escribí en Perl para demostrar el modelo. Los parámetros son los de una neurona "parloteante" del documento vinculado anteriormente, y esto sirve como una demostración de cómo este modelo puede recrear algunas de las propiedades más complejas de las neuronas, como alternar entre estados de alta y baja actividad. Si observa la salida, puede ver dónde la neurona se dispara inmediatamente varias veces, pero luego espera un tiempo antes de dispararse varias veces más (a pesar de que el voltaje de entrada de la celda I
sea constante todo el tiempo).
t
Alguna vez será negativo?