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

Last change on this file since 28566 was 28566, checked in by Ivan Raikov, 7 years ago

9ML-toolkit, flsim, signal-diagram: current status

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