source: project/release/4/signal-diagram/trunk/examples/Izhikevich03.scm @ 30959

Last change on this file since 30959 was 30959, checked in by Ivan Raikov, 6 years ago

flsim/signal-diagram: adaptive integration refactoring

File size: 4.9 KB
Line 
1;;
2;; Simple Model of Spiking Neurons, Izhikevich  E
3;;
4;; IEEE Transactions on Neural Networks (2003) 14:1569- 1572
5;;
6;;
7
8(use signal-diagram signal-diagram-dynamics mathh srfi-1 )
9
10(define (Izhikevich03:construct t V U k1 k2 k3 theta a b c d spike tspike Isyn )
11
12  `((f . ,(let* ((subthreshold-eq         (ODE (variable h) t 
13                                               (V  (+ (* k1 V V)  (* k2 V) k3 (neg U) Isyn))
14                                               (U  (* a (- (* b V) U)))))
15
16                 (threshold-detect        (ASSIGN (spike (> V theta))))
17
18                 (refractory-eq           (ASSIGN (t (+ t h) )
19                                                  (tspike (if spike t tspike))
20                                                  (spike false)
21                                                  (tspike tspike)
22                                                  (V c)
23                                                  (U (+ U d))))
24                 )
25
26            (TRANSIENT subthreshold-eq refractory-eq 'spike threshold-detect)
27
28            ))
29
30    (initial .
31             ((h              1e-2)
32             (t               ,t)
33             (V               ,V)
34             (U               ,U)
35             (k1              ,k1)
36             (k2              ,k2)
37             (k3              ,k3)
38             (theta           ,theta)
39             (a               ,a)
40             (b               ,b)
41             (c               ,c)
42             (d               ,d)
43             (spike           ,spike)
44             (tspike          ,tspike)
45             (Isyn            ,Isyn)
46             ))
47    ))
48
49
50(define (dataflow model)
51  (let* ((f         (alist-ref 'f model)) 
52         (initial   (alist-ref 'initial model))
53         (input     (map car initial)))
54    (print "input = " input)
55    (print "dataflow f: "  (dataflow (construct f) input))
56    ))
57
58
59(define (codegen name model #!key (language 'scheme) (random #f) (pre #t) (post #t) (solver 'rkdp))
60  (let* ((f         (alist-ref 'f model)) 
61         (initial   (alist-ref 'initial model)))
62    (case language
63      ((octave Octave) (codegen/Octave name (construct f) initial: initial pre: pre solver: solver))
64      ((scheme Scheme) (codegen/scheme name (construct f) initial: initial pre: pre solver: solver))
65      ((ML)     (codegen/ML name (construct f) initial: initial random: random pre: pre post: post solver: solver)))
66    ))
67
68
69;; Parameters common to all spiking regimes
70(define k1    0.04)
71(define k2    5.0)
72(define k3    140.0)
73(define theta 30.0)
74(define Isyn  10.0)
75
76;; State initial values
77(define t 0.0)
78(define V -65.0)
79
80
81;; Regular spiking (RS) parameters
82(define RS 
83  (let ((a 0.02)
84        (b 0.2)
85        (c -65.0)
86        (d 8.0))
87    (Izhikevich03:construct
88     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
89     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
90
91
92;; Intrinsically bursting (IB) parameters
93(define IB 
94  (let ((a 0.02)
95        (b 0.2)
96        (c -55.0)
97        (d 4.0))
98    (Izhikevich03:construct
99     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
100     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
101
102
103;; Chattering (CH) parameters
104(define CH
105  (let ((a 0.02)
106        (b 0.2)
107        (c -50.0)
108        (d 2.0))
109    (Izhikevich03:construct
110     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
111     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
112
113
114;; Fast-spiking (FS) parameters
115(define FS
116  (let ((a 0.1)
117        (b 0.2)
118        (c -65.0)
119        (d 2.0))
120    (Izhikevich03:construct
121     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
122     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
123
124
125
126;; Thalamo-cortical (TC) parameters
127(define TC
128  (let ((a 0.02)
129        (b 0.25)
130        (c -65.0)
131        (d 0.05))
132    (Izhikevich03:construct
133     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
134     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
135
136
137;; Resonator (RZ) parameters
138(define RZ
139  (let ((a 0.1)
140        (b 0.26)
141        (c -65.0)
142        (d 2.0))
143    (Izhikevich03:construct
144     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
145     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
146
147
148
149;; Low-threshold spiking (LTS) parameters
150(define LTS
151  (let ((a 0.02)
152        (b 0.25)
153        (c -65.0)
154        (d 2.0))
155    (Izhikevich03:construct
156     ;; t V U k1 k2 k3 theta a b c d spike tspike Isyn
157     t V (* b V) k1 k2 k3 theta a b c d #f t Isyn)))
158
159
160(define models `((RS  . ,RS) (IB . ,IB) (CH . ,CH) (FS . ,FS)  (RZ . ,RZ) (LTS . ,LTS) ))
161
162 
163(with-output-to-file "Izhikevich03_solver.sml"
164  (lambda () 
165    (let recur ((models models) (pre #t))
166      (if (pair? models)
167          (let* ((name.model (car models))
168                 (name  (car name.model))
169                 (model (cdr name.model)))
170            (codegen name model language: 'ML solver: 'rkdp random: #f pre: pre post: (null? (cdr models)))
171            (recur (cdr models) #f)
172            )))
173    ))
174
175(with-output-to-file "Izhikevich03_solver.m"
176  (lambda () 
177    (let recur ((models models) (pre #t))
178      (if (pair? models)
179          (let* ((name.model (car models))
180                 (name  (car name.model))
181                 (model (cdr name.model)))
182            (codegen name model language: 'octave pre: pre solver: 'lsode)
183            (recur (cdr models) #f)
184            )))
185    ))
186
187(with-output-to-file "Izhikevich03_solver.scm"
188  (lambda () 
189    (let recur ((models models) (pre #t))
190      (if (pair? models)
191          (let* ((name.model (car models))
192                 (name  (car name.model))
193                 (model (cdr name.model)))
194            (codegen name model language: 'scheme pre: pre)
195            (recur (cdr models) #f)
196            )))
197    ))
198
199
200
Note: See TracBrowser for help on using the repository browser.