一个Izhikevich神经元是一个简单但非常有效的生物神经元,专为在离散时步仿真使用的模型。在这个高尔夫挑战赛中,您将实现此模型。
参量
与生理上精确的模型的数十个参数相比,该模型仅涉及组织为2个微分方程的7个变量。
v
和u
是神经元的两个状态变量。在此,v
“快速”变量代表随着时间的细胞电势,并且u
“缓慢”变量代表某些膜的性质。v
变量是最重要的变量,因为这是模拟的输出。a
,b
,c
,和d
被固定描述该神经元的特性的常数。根据所需的行为,不同类型的神经元具有不同的常数。值得注意的c
是,复位电位是细胞在加标后返回的膜电位。I
代表输入到神经元的电流。在网络仿真中,这会随着时间而变化,但是出于我们的目的,我们将其I
视为固定常数。
该模型
该模型具有非常简单的伪代码。首先,我们采用的常量值abcd
并使用它们来初始化v
和u
:
v = c
u = b * c
接下来,我们将根据需要遍历仿真代码多次。每次迭代代表1毫秒的时间。
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
某些实际的实现中包括用于数字精度的其他步骤,但此处未包括这些步骤。
输入值
作为输入,你的程序/函数应该采取的值a
,b
,c
,d
,I
,和t
(的时间步来模拟数字)。设置后,在我们的简单仿真过程中,这些参数均不会改变。输入的顺序并没有此事:你可以指定你的程序有这些参数的顺序。
输出量
输出将是一个数字列表,代表v
模拟过程中细胞的膜电位(由给出)。该列表可以采用任何适当的格式。
您可以选择是否在输出中包括模拟的第0个值(经过任何时间的初始配置)。例如,对于0.02 0.2 -50 2 10 6
(for a b c d I t
)的输入,其中一个的输出
-50
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
要么
-40
-16.04
73.876224
-42.667044096
-25.8262335380956
29.0355029192068
是可以接受的。
你的价值观也并不必须是完全一样上面,这取决于如何你的语言把手浮动。
参考实施
这是我在Perl中编写的TIO实现,以演示该模型。参数是上面链接的论文中“震颤”神经元的参数,这证明了该模型如何重现神经元的一些更复杂的特性,例如在高活动和低活动状态之间交替。如果查看输出,则可以看到神经元立即在哪里突跳几次,然后等待一会儿再突刺几次(尽管电池输入电压I
始终保持恒定)。
t
否定的?