Um neurônio Izhikevich é um modelo simples, mas bastante eficaz, de um neurônio biológico, projetado para uso em uma simulação discreta do tempo. Neste desafio de golfe, você estará implementando este modelo.
Parâmetros
Este modelo envolve apenas 7 variáveis organizadas em 2 equações diferenciais, em comparação com as dezenas de parâmetros de um modelo fisiologicamente preciso.
v
eu
são as duas variáveis de estado do neurônio. Aqui,v
é a variável "rápida" que representa o potencial da célula ao longo do tempo eu
é a variável "lenta" que representa certas propriedades da membrana. Av
variável é a mais importante, pois esta é a saída da simulação.a
,b
,c
, Ed
são constantes que descrevem as propriedades do neurónio fixo. Diferentes tipos de neurônios têm constantes diferentes, dependendo do comportamento desejado. Notavelmente,c
é o potencial de redefinição, que é o potencial de membrana ao qual a célula retorna após o pico.I
representa a corrente de entrada para o neurônio. Nas simulações de rede, isso mudará com o tempo, mas, para nossos propósitos, trataremosI
como uma constante fixa.
O Modelo
Este modelo possui um pseudocódigo muito simples. Primeiro, pegamos os valores constantes de abcd
e os usamos para inicializar v
e u
:
v = c
u = b * c
Em seguida, percorreremos o código de simulação quantas vezes desejar. Cada iteração representa 1 milissegundo de 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
Certas implementações do mundo real incluem etapas adicionais para precisão numérica, mas não as incluímos aqui.
Entrada
Como entrada, a sua função / programa deve ter os valores de a
, b
, c
, d
, I
, e t
(o número de passos de tempo para simular). Uma vez definido, nenhum desses parâmetros será alterado durante nossa simulação simples. A ordem de entrada não importa: você pode especificar a ordem em que seu programa aceita esses parâmetros.
Resultado
A saída será uma lista de números que representam o potencial de membrana da célula (fornecido por variável v
) ao longo da simulação. A lista pode estar em qualquer formato apropriado.
Você tem a opção de incluir o 0º valor da simulação (a configuração inicial antes de qualquer momento) em sua saída. Por exemplo, para uma entrada de 0.02 0.2 -50 2 10 6
(for a b c d I t
), uma saída 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
é aceitável.
Seus valores não precisam ser exatamente os mesmos que os acima, dependendo de como seu idioma lida com flutuações.
Implementação de referência
Aqui está uma implementação de TIO que escrevi no Perl para demonstrar o modelo. Os parâmetros são os de um neurônio "tagarelado" do artigo acima, e isso serve como uma demonstração de como esse modelo é capaz de recriar algumas das propriedades mais complexas dos neurônios, como alternar entre estados de alta e baixa atividade. Se você observar a saída, poderá ver onde o neurônio dispara imediatamente várias vezes, mas depois espera um pouco antes de disparar várias vezes (apesar da tensão de entrada da célula I
ser constante o tempo todo).
t
ser sempre negativo?