Skip to content
Snippets Groups Projects
Unverified Commit 5a766b1f authored by Thorsten Hater's avatar Thorsten Hater Committed by GitHub
Browse files

Make brunel.py setup faster. (#1854)

* Make brunel.py setup faster.
* Use one generator for both populations.
parent 11198bb9
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3 #!/usr/bin/env python3
import arbor import arbor
import numpy,argparse import argparse
import numpy as np
from numpy.random import RandomState
''' '''
A Brunel network consists of nexc excitatory LIF neurons and ninh inhibitory LIF neurons. A Brunel network consists of nexc excitatory LIF neurons and ninh inhibitory LIF neurons.
...@@ -20,14 +22,12 @@ Call with parameters, for example: ...@@ -20,14 +22,12 @@ Call with parameters, for example:
# Samples m unique values in interval [start, end) - gid. # Samples m unique values in interval [start, end) - gid.
# We exclude gid because we don't want self-loops. # We exclude gid because we don't want self-loops.
def sample_subset(gid, start, end, m): def sample_subset(gen, gid, start, end, m):
gen = numpy.random.RandomState(gid+42) idx = np.arange(start, end)
s = set() if start <= gid < end:
while len(s) < m: idx = np.delete(idx, gid - start)
val = gen.randint(low=start,high=end) gen.shuffle(idx)
if val != gid: return idx[:m]
s.add(val)
return s
class brunel_recipe (arbor.recipe): class brunel_recipe (arbor.recipe):
def __init__(self, nexc, ninh, next, in_degree_prop, weight, delay, rel_inh_strength, poiss_lambda, seed = 42): def __init__(self, nexc, ninh, next, in_degree_prop, weight, delay, rel_inh_strength, poiss_lambda, seed = 42):
...@@ -61,12 +61,13 @@ class brunel_recipe (arbor.recipe): ...@@ -61,12 +61,13 @@ class brunel_recipe (arbor.recipe):
return arbor.cell_kind.lif return arbor.cell_kind.lif
def connections_on(self, gid): def connections_on(self, gid):
gen = RandomState(gid + self.seed_)
connections=[] connections=[]
# Add incoming excitatory connections. # Add incoming excitatory connections.
for i in sample_subset(gid, 0, self.ncells_exc_, self.in_degree_exc_): for i in sample_subset(gen, gid, 0, self.ncells_exc_, self.in_degree_exc_):
connections.append(arbor.connection((i,"src"), "tgt", self.weight_exc_, self.delay_)) connections.append(arbor.connection((i,"src"), "tgt", self.weight_exc_, self.delay_))
# Add incoming inhibitory connections. # Add incoming inhibitory connections.
for i in sample_subset(gid, self.ncells_exc_, self.ncells_exc_ + self.ncells_inh_, self.in_degree_inh_): for i in sample_subset(gen, gid, self.ncells_exc_, self.ncells_exc_ + self.ncells_inh_, self.in_degree_inh_):
connections.append(arbor.connection((i,"src"), "tgt", self.weight_inh_, self.delay_)) connections.append(arbor.connection((i,"src"), "tgt", self.weight_inh_, self.delay_))
return connections return connections
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment