Un neurone Izhikevich est un modèle simple mais assez efficace d'un neurone biologique, conçu pour être utilisé dans une simulation discrète de pas de temps. Dans ce défi de golf, vous implémenterez ce modèle.
Paramètres
Ce modèle ne comporte que 7 variables organisées en 2 équations différentielles, par rapport aux dizaines de paramètres d'un modèle physiologiquement précis.
v
etu
sont les deux variables d'état du neurone. Ici,v
est la variable "rapide" représentant le potentiel cellulaire au fil du temps, etu
est la variable "lente" représentant certaines propriétés de la membrane. Lav
variable est la plus importante, car il s'agit de la sortie de la simulation.a
,b
,c
, Etd
sont fixées des constantes qui décrivent les propriétés du neurone. Différents types de neurones ont différentes constantes, selon le comportement souhaité. Notamment,c
est le potentiel de réinitialisation, qui est le potentiel de membrane vers lequel la cellule revient après le dopage.I
représente le courant d'entrée du neurone. Dans les simulations de réseau, cela changera avec le temps, mais pour nos besoins, nous traiteronsI
comme une constante fixe.
Le modèle
Ce modèle a un pseudocode très simple. Tout d'abord, nous prenons les valeurs constantes de abcd
et les utilisons pour initialiser v
et u
:
v = c
u = b * c
Ensuite, nous parcourons le code de simulation autant de fois que souhaité. Chaque itération représente 1 milliseconde de temps.
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
Certaines implémentations réelles incluent des étapes supplémentaires pour la précision numérique, mais nous ne les incluons pas ici.
Contribution
Comme entrée, votre programme / fonction doit prendre les valeurs de a
, b
, c
, d
, I
et t
(le nombre de pas de temps à Simuler). Une fois définis, aucun de ces paramètres ne changera lors de notre simulation simple. L'ordre d'entrée n'a pas d' importance: vous pouvez spécifier l'ordre dans lequel votre programme prend ces paramètres.
Production
La sortie sera une liste de nombres représentant le potentiel de membrane de la cellule (donnée par variable v
) au cours de la simulation. La liste peut être dans n'importe quel format approprié.
Vous avez le choix d'inclure ou non la 0ème valeur de la simulation (la configuration initiale avant la fin du temps) dans votre sortie. Par exemple, pour une entrée de 0.02 0.2 -50 2 10 6
(pour a b c d I t
), une sortie de
-50
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
ou
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
est acceptable.
Vos valeurs ne pas doivent être exactement les mêmes que celles ci - dessus, selon la façon dont vos flotteurs poignées de langue.
Implémentation de référence
Voici une implémentation TIO que j'ai écrite en Perl pour démontrer le modèle. Les paramètres sont ceux d'un neurone "bavardant" du document lié ci-dessus, et cela sert de démonstration de la façon dont ce modèle est capable de recréer certaines des propriétés les plus complexes des neurones, telles que l'alternance entre des états d'activité élevée et faible. Si vous regardez la sortie, vous pouvez voir où le neurone pointe immédiatement plusieurs fois, mais attend ensuite un certain temps avant de monter plusieurs fois (malgré la tension d'entrée de la cellule I
constante tout le temps).
t
jamais négatif?