File: hhn_examples.py

package info (click to toggle)
python-pyclustering 0.10.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 11,128 kB
  • sloc: cpp: 38,888; python: 24,311; sh: 384; makefile: 105
file content (150 lines) | stat: -rwxr-xr-x 5,080 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
"""!

@brief Examples of usage and demonstration of abilities of oscillatory network
       based on Hodgkin-Huxley model of neuron.

@authors Andrei Novikov (pyclustering@yandex.ru)
@date 2014-2020
@copyright BSD-3-Clause

"""


from pyclustering.nnet.dynamic_visualizer import dynamic_visualizer

from pyclustering.nnet.hhn import hhn_network, hhn_parameters


def template_dynamic_hhn(num_osc, steps, time, stimulus=None, params=None, separate=False, ccore_flag=False):
    net = hhn_network(num_osc, stimulus, params, ccore=ccore_flag)

    (t, dyn_peripheral, dyn_central) = net.simulate(steps, time)

    amount_canvases = 1
    if (isinstance(separate, list)):
        amount_canvases = len(separate) + 2
    elif (separate is True):
        amount_canvases = len(dyn_peripheral[0]) + 2
    
    visualizer = dynamic_visualizer(amount_canvases, x_title="Time", y_title="V", y_labels=False)
    visualizer.append_dynamics(t, dyn_peripheral, 0, separate)
    visualizer.append_dynamics(t, dyn_central, amount_canvases - 2, True)
    visualizer.show()


def one_oscillator_unstimulated():
    template_dynamic_hhn(1, 750, 100, separate=True, ccore_flag=False)
    template_dynamic_hhn(1, 750, 100, separate=True, ccore_flag=True)


def one_oscillator_stimulated():
    template_dynamic_hhn(1, 750, 100, [25], separate=True, ccore_flag=False)
    template_dynamic_hhn(1, 750, 100, [25], separate=True, ccore_flag=True)


def three_oscillators_stimulated():
    template_dynamic_hhn(3, 750, 100, [25] * 3, separate=True, ccore_flag=False)
    template_dynamic_hhn(3, 750, 100, [25] * 3, separate=True, ccore_flag=True)


def two_sync_ensembles():
    template_dynamic_hhn(4, 400, 200, [25, 25, 50, 50], separate=True, ccore_flag=False)
    template_dynamic_hhn(4, 800, 200, [25, 25, 50, 50], separate=True, ccore_flag=True)


def ten_oscillators_stimulated_desync():
    params = hhn_parameters()
    params.w1 = 0
    params.w2 = 0
    params.w3 = 0

    stumulus = [25, 25, 25, 25, 25, 11, 11, 11, 11, 11]

    template_dynamic_hhn(10, 750, 100, stumulus, params, separate=True, ccore_flag=False)
    template_dynamic_hhn(10, 750, 100, stumulus, params, separate=True, ccore_flag=True)


def ten_oscillators_stimulated_sync():
    params = hhn_parameters()
    params.w1 = 0.1
    params.w2 = 0.0
    params.w3 = 0

    stumulus = [25, 25, 25, 25, 25, 27, 27, 27, 27, 27]

    template_dynamic_hhn(10, 750, 100, stumulus, params, separate=True, ccore_flag=False)
    template_dynamic_hhn(10, 750, 100, stumulus, params, separate=True, ccore_flag=True)


def ten_oscillators_stimulated_partial_sync():
    params = hhn_parameters()
    params.w1 = 0.1
    params.w2 = 5.0
    params.w3 = 0

    stimulus = [25, 25, 25, 25, 25, 11, 11, 11, 11, 11]
    template_dynamic_hhn(10, 750, 200, stimulus, params, separate=True, ccore_flag=False)
    template_dynamic_hhn(10, 750, 200, stimulus, params, separate=True, ccore_flag=True)
    

def six_oscillators_mix_2_stimulated():
    params = hhn_parameters()
    params.deltah = 400

    stimulus = [25, 25, 25, 47, 47, 47]
    template_dynamic_hhn(6, 1200, 600, stimulus, params, separate=True, ccore_flag=False)
    template_dynamic_hhn(6, 2400, 600, stimulus, params, separate=True, ccore_flag=True)


def six_oscillators_mix_3_stimulated():
    params = hhn_parameters()
    params.deltah = 400

    stimulus = [0, 0, 25, 25, 47, 47]
    template_dynamic_hhn(6, 1200, 600, stimulus, params, separate=True, ccore_flag=False)
    template_dynamic_hhn(6, 2400, 600, stimulus, params, separate=True, ccore_flag=True)


def three_sync_ensembles():
    params = hhn_parameters()
    params.deltah = 400

    stimulus = [25, 26, 25, 25, 26, 45, 46, 45, 44, 45, 65, 65, 65, 64, 66]
    separate = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]
    num_osc = len(stimulus)
    template_dynamic_hhn(num_osc, 2400, 600, stimulus, params, separate=separate, ccore_flag=True)


def four_ensembles_80_oscillators():
    params = hhn_parameters()
    params.deltah = 650
    params.w1 = 0.1
    params.w2 = 9.0
    params.w3 = 5.0
    params.threshold = -10
    
    expected_ensembles = []
    stimulus = []
    
    base_stimulus = 10
    step_stimulus = 10
    amount_ensebles = 4
    region_size = 20
    for i in range(amount_ensebles):
        expected_ensembles += [ [i for i in range(region_size * i, region_size * i + region_size)] ]
        stimulus += [ base_stimulus + step_stimulus * i ] * region_size
    
    template_dynamic_hhn(len(stimulus), 4000, 1000, stimulus, params, separate=expected_ensembles, ccore_flag=True)


one_oscillator_unstimulated()
one_oscillator_stimulated()
three_oscillators_stimulated()
two_sync_ensembles()
ten_oscillators_stimulated_desync()
ten_oscillators_stimulated_sync()
ten_oscillators_stimulated_partial_sync()
six_oscillators_mix_2_stimulated()
six_oscillators_mix_3_stimulated()
three_sync_ensembles()
four_ensembles_80_oscillators()