예제 #1
0
    def setUpClass(cls):
        """
        Compile the network for this test.

        The input_neuron will generate a sequence of values:

            r_t = [-1, 0, 2, 5, 9, 14, 20, ...]
        """
        input_neuron = Neuron(equations="""
                r = r + t : init = -1
            """)

        neuron2 = Neuron(equations="""
                r = sum(ff)
            """)

        pop1 = Population((3), input_neuron)
        pop2 = Population((3), neuron2)

        # A projection with non-uniform delay
        proj = Projection(pop1, pop2, target="ff")
        proj.connect_one_to_one(weights=1.0, delays=Uniform(1, 5))

        # Build up network
        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj])
        cls.test_net.compile(silent=True)

        # Store references for easier usage in test cases
        cls.net_proj = cls.test_net.get(proj)
        cls.net_pop1 = cls.test_net.get(pop1)
        cls.net_pop2 = cls.test_net.get(pop2)
예제 #2
0
    def setUpClass(cls):
        """
        Compile the network for this test
        """
        simple_neuron = Neuron(
            parameters="r=1.0"
        ) 

        eq_set = Synapse(
            equations="""
                glob_var = 0.1 : projection
                semi_glob_var = 0.2 : postsynaptic
                w = t + glob_var + semi_glob_var
            """
        )

        pop0 = Population(3, simple_neuron)
        pop1 = Population(1, simple_neuron)

        proj = Projection(pop0, pop1, "exc", eq_set)
        proj.connect_all_to_all(weights=0.0)

        cls.test_net = Network()
        cls.test_net.add([pop0, pop1, proj])
        cls.test_net.compile(silent=True)
예제 #3
0
    def setUpClass(self):
        """
        Compile the network for this test
        """
        neuron = Neuron(parameters="tau = 10", equations="r += 1/tau * t")

        neuron2 = Neuron(parameters="tau = 10: population",
                         equations="r += 1/tau * t: init = 1.0")

        Oja = Synapse(parameters="""
                tau = 5000.0 : postsynaptic
                alpha = 8.0
            """,
                      equations="""
                tau * dw/dt = pre.r * post.r - alpha * post.r^2 * w
            """)

        pop1 = Population(5, neuron)
        pop2 = Population(8, neuron2)

        proj = Projection(pre=pop1, post=pop2, target="exc", synapse=Oja)

        proj.connect_all_to_all(weights=1.0)

        self.test_net = Network()
        self.test_net.add([pop1, pop2, proj])
        self.test_net.compile(silent=True)

        self.net_proj = self.test_net.get(proj)
예제 #4
0
    def setUpClass(cls):
        """
        Compile the network for this test
        """
        neuron = Neuron(
            equations="r = 1"
        )

        neuron2 = Neuron(
            equations="r = sum(exc)"
        )

        pop1 = Population((3, 3), neuron)
        pop2 = Population((3, 3), neuron2)

        proj1 = Projection(pre=pop1, post=pop2, target="exc")
        proj2 = Projection(pre=pop1, post=pop2, target="exc")
        proj3 = Projection(pre=pop1, post=pop2, target="exc")

        proj1.connect_one_to_one(weights=0.1)
        proj2.connect_all_to_all(weights=0.1)
        proj3.connect_fixed_number_pre(3, weights=0.1)

        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj1, proj2, proj3])
        cls.test_net.compile(silent=True)

        cls.test_proj1 = cls.test_net.get(proj1)
        cls.test_proj2 = cls.test_net.get(proj2)
        cls.test_proj3 = cls.test_net.get(proj3)
예제 #5
0
    def setUpClass(self):
        """
        Compile the network for this test
        """
        neuron = Neuron(
            equations = "r = transfer_function(sum(exc), 0.0)",
            functions = "transfer_function(x, t) = if x > t: if x > 2*t : (x - 2*t)^2 else: x - t else: 0."
        )

        neuron2 = Neuron(
            equations = "r = glob_pos(sum(exc))"
        )

        synapse = Synapse(
            equations="w += hebb(pre.r, post.r)",
            functions="hebb(x, y) = x * y"
        )

        pop = Population(10, neuron)
        pop2 = Population(10, neuron2)
        proj = Projection(pop, pop, 'exc', synapse).connect_all_to_all(1.0)

        self.test_net = Network()
        self.test_net.add([pop, pop2, proj])
        self.test_net.compile(silent=True)

        self.net_pop = self.test_net.get(pop)
        self.net_proj = self.test_net.get(proj)
예제 #6
0
    def setUpClass(self):
        """
        Compile the network for this test
        """
        neuron = Neuron(parameters="""
                r=0
            """)

        cov = Synapse(parameters="""
                tau = 5000.0
            """,
                      equations="""
                tau * dw/dt = (pre.r - mean(pre.r) ) * (post.r - mean(post.r) )
            """)

        pre = Population(6, neuron)
        post = Population(1, neuron)
        proj = Projection(pre, post, "exc",
                          synapse=cov).connect_all_to_all(weights=1.0)

        self.test_net = Network()
        self.test_net.add([pre, post, proj])

        self.test_net.compile(silent=True)

        self.net_pop = self.test_net.get(post)
예제 #7
0
    def setUpClass(cls):
        """
        Compile the network for this test.

        The input_neuron will generate a sequence of values:

            r_t = [-1, 0, 2, 5, 9, 14, 20, ...]

        one time as global (glob_r) and one time as local variable (r).
        """
        input_neuron = Neuron(equations="""
                glob_r = glob_r + t : init = -1, population
                r = r + t : init = -1
            """)

        neuron2 = Neuron(equations="""
                r = sum(ff)
            """)

        synapse_glob = Synapse(psp="pre.glob_r * w")

        pop1 = Population((3), input_neuron)
        pop2 = Population((3), neuron2)

        # A projection with uniform delay
        proj = Projection(pre=pop1, post=pop2, target="ff")
        proj.connect_one_to_one(weights=1.0, delays=10.0)

        # A projection with uniform delay
        proj2 = Projection(pre=pop1,
                           post=pop2,
                           target="ff_glob",
                           synapse=synapse_glob)
        proj2.connect_one_to_one(weights=1.0, delays=10.0)

        # Build up network
        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj, proj2])
        cls.test_net.compile(silent=True)

        # Store references for easier usage in test cases
        cls.net_proj = cls.test_net.get(proj)
        cls.net_proj2 = cls.test_net.get(proj2)
        cls.net_pop1 = cls.test_net.get(pop1)
        cls.net_pop2 = cls.test_net.get(pop2)
예제 #8
0
def grid_search_annarchy(param_grid: dict, param_map: dict, dt: float, simulation_time: float,
                         inputs: dict, outputs: dict, sampling_step_size: Optional[float] = None,
                         permute_grid: bool = False, circuit=None, **kwargs) -> DataFrame:
    """Function that runs multiple parametrizations of the same circuit in parallel and returns a combined output.

    Parameters
    ----------
    param_grid
        Key-value pairs for each circuit parameter that should be altered over different circuit parametrizations.
    param_map
        Key-value pairs that map the keys of param_grid to concrete circuit variables.
    dt
        Simulation step-size in s.
    simulation_time
        Simulation time in s.
    inputs
        Inputs as provided to the `run` method of `:class:ComputeGraph`.
    outputs
        Outputs as provided to the `run` method of `:class:ComputeGraph`.
    sampling_step_size
        Sampling step-size as provided to the `run` method of `:class:ComputeGraph`.
    permute_grid
        If true, all combinations of the provided param_grid values will be realized. If false, the param_grid values
        will be traversed pairwise.
    circuit
        Instance of ANNarchy network.
    kwargs
        Additional keyword arguments passed to the `:class:ComputeGraph` initialization.



    Returns
    -------
    DataFrame
        Simulation results stored in a multi-index data frame where each index lvl refers to one of the parameters of
        param_grid.

    """

    from ANNarchy import Population, Projection, Network, TimedArray, Monitor, ANNarchyException

    # linearize parameter grid if necessary
    if type(param_grid) is dict:
        param_grid = linearize_grid(param_grid, permute_grid)

    # create annarchy net if necessary
    if circuit is None:
        circuit = Network(everything=True)

    # assign parameter updates to each circuit and combine them to unconnected network
    circuit_names = []
    param_info = []
    param_split = "__"
    val_split = "--"
    comb = "_"
    populations, projections = {}, {}
    for n in range(param_grid.shape[0]):

        # copy and re-parametrize populations
        try:
            for p in circuit.get_populations():
                name = f'net{n}/{p.name}'
                p_new = Population(geometry=p.geometry, neuron=p.neuron_type, name=name,
                                   stop_condition=p.stop_condition, storage_order=p._storage_order,
                                   copied=False)
                p_new = adapt_pop(p_new, param_grid.iloc[n, :], param_map)
                populations[name] = p_new

                # add input to population
                for node, inp in inputs.items():
                    if node in name:
                        inp_name = f'{name}_inp'
                        inp = TimedArray(rates=inp, name=inp_name)
                        proj = Projection(pre=inp, post=p_new, target='exc')
                        proj.connect_one_to_one(1.0)
                        populations[inp_name] = inp
                        projections[inp_name] = proj
        except ANNarchyException:
            pass

        # copy and re-parametrize projections
        try:
            for c in circuit.get_projections():
                source = c.pre if type(c.pre) is str else c.pre.name
                target = c.post if type(c.post) is str else c.post.name
                source = f'net{n}/{source}'
                target = f'net{n}/{target}'
                name = f'{source}/{target}/{c.name}'
                c_new = Projection(pre=source, post=target, target=c.target, synapse=c.synapse_type, name=name,
                                   copied=False)
                c_new._store_connectivity(c._connection_method, c._connection_args, c._connection_delay, c._storage_format)
                c_new = adapt_proj(c_new, param_grid.iloc[n, :], param_map)
                projections[name] = c_new
        except ANNarchyException:
            pass

        # collect parameter and circuit name infos
        circuit_names.append(f'net{n}')
        param_names = list(param_grid.columns.values)
        param_info_tmp = [f"{param_names[i]}{val_split}{val}" for i, val in enumerate(param_grid.iloc[n, :])]
        param_info.append(param_split.join(param_info_tmp))

    net = Network()
    for p in populations.values():
        net.add(p)
    for c in projections.values():
        net.add(c)

    # adjust output of simulation to combined network
    nodes = [p.name for p in circuit.get_populations()]
    out_names, var_names, out_lens, monitors, monitor_names = [], [], [], [], []
    for out_key, out in outputs.copy().items():
        out_names_tmp, out_lens_tmp = [], []
        if out[0] in nodes:
            for i, name in enumerate(param_info):
                out_tmp = list(out)
                out_tmp[0] = f'{circuit_names[i]}/{out_tmp[0]}'
                p = net.get_population(out_tmp[0])
                monitors.append(Monitor(p, variables=out_tmp[-1], period=sampling_step_size, start=True,
                                        net_id=net.id))
                monitor_names.append(f'{name}{param_split}out_var{val_split}{out_key}{comb}{out[0]}')
                var_names.append(out_tmp[-1])
                out_names_tmp.append(f'{out_key}{comb}{out[0]}')
                out_lens_tmp.append(p.geometry[0])
        elif out[0] == 'all':
            for node in nodes:
                for i, name in enumerate(param_info):
                    out_tmp = list(out)
                    out_tmp[0] = f'{circuit_names[i]}/{node}'
                    p = net.get_population(out_tmp[0])
                    monitors.append(Monitor(p, variables=out_tmp[-1], period=sampling_step_size, start=True,
                                            net_id=net.id))
                    monitor_names.append(f'{name}{param_split}out_var{val_split}{out_key}{comb}{node}')
                    var_names.append(out_tmp[-1])
                    out_names_tmp.append(f'{out_key}{comb}{node}')
                    out_lens_tmp.append(p.geometry[0])
        else:
            node_found = False
            for node in nodes:
                if out[0] in node:
                    node_found = True
                    for i, name in enumerate(param_info):
                        out_tmp = list(out)
                        out_tmp[0] = f'{circuit_names[i]}/{node}'
                        p = net.get_population(out_tmp[0])
                        monitors.append(Monitor(p, variables=out_tmp[-1], period=sampling_step_size, start=True,
                                                net_id=net.id))
                        monitor_names.append(f'{name}{param_split}out_var{val_split}{out_key}{comb}{node}')
                        var_names.append(out_tmp[-1])
                        out_names_tmp.append(f'{out_key}{comb}{node}')
                        out_lens_tmp.append(p.geometry[0])
            if not node_found:
                raise ValueError(f'Invalid output identifier in output: {out_key}. '
                                 f'Node {out[0]} is not part of this network')
        out_names += list(set(out_names_tmp))
        out_lens += list(set(out_lens_tmp))
    #net.add(monitors)

    # simulate the circuits behavior
    net.compile()
    net.simulate(duration=simulation_time)

    # transform output into pyrates-compatible data format
    results = pyrates_from_annarchy(monitors, vars=list(set(var_names)),
                                    monitor_names=monitor_names, **kwargs)

    # transform results into long-form dataframe with changed parameters as columns
    multi_idx = [param_grid[key].values for key in param_grid.keys()]
    n_iters = len(multi_idx[0])
    outs = []
    for out_name, out_len in zip(out_names, out_lens):
        outs += [f'{out_name}_n{i}' for i in range(out_len)] * n_iters
    multi_idx_final = []
    for idx in multi_idx:
        for val in idx:
            for out_len in out_lens:
                multi_idx_final += [val]*len(out_names)*out_len
    index = MultiIndex.from_arrays([multi_idx_final, outs], names=list(param_grid.keys()) + ["out_var"])
    index = MultiIndex.from_tuples(list(set(index)), names=list(param_grid.keys()) + ["out_var"])
    results_final = DataFrame(columns=index, data=np.zeros_like(results.values), index=results.index)
    for col in results.keys():
        params = col.split(param_split)
        indices = [None] * len(results_final.columns.names)
        for param in params:
            var, val = param.split(val_split)[:2]
            idx = list(results_final.columns.names).index(var)
            try:
                indices[idx] = float(val)
            except ValueError:
                indices[idx] = val
        results_final.loc[:, tuple(indices)] = results[col].values

    return results_final
예제 #9
0
    def setUpClass(cls):
        """
        Compile the network for this test
        """
        neuron = Neuron(equations="r = 1")

        neuron2 = Neuron(equations="r = sum(exc)")

        pop1 = Population((3, 3), neuron)
        pop2 = Population((3, 3), neuron2)

        proj1 = Projection(pre=pop1, post=pop2, target="exc")
        proj2 = Projection(pre=pop1, post=pop2, target="exc")
        proj3 = Projection(pre=pop1, post=pop2, target="exc")

        proj1.connect_one_to_one(weights=0.1)
        proj2.connect_all_to_all(weights=0.1)
        proj3.connect_fixed_number_pre(3, weights=0.1)

        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj1, proj2, proj3])
        cls.test_net.compile(silent=True)

        cls.test_proj1 = cls.test_net.get(proj1)
        cls.test_proj2 = cls.test_net.get(proj2)
        cls.test_proj3 = cls.test_net.get(proj3)
예제 #10
0
    def setUpClass(cls):
        """
        Compile the network for this test
        """
        def my_diagonal(pre, post, weight):
            synapses = CSR()
            for post_rk in post.ranks:
                pre_ranks = []
                delays = []
                if post_rk - 1 in pre.ranks:
                    pre_ranks.append(post_rk - 1)
                if post_rk in pre.ranks:
                    pre_ranks.append(post_rk)
                if post_rk + 1 in pre.ranks:
                    pre_ranks.append(post_rk + 1)

                synapses.add(post_rk, pre_ranks, [weight] * len(pre_ranks),
                             [0] * len(pre_ranks))

            return synapses

        def my_diagonal_with_uniform_delay(pre, post, weight, delay):
            synapses = CSR()
            for post_rk in post.ranks:
                pre_ranks = []
                delays = []
                if post_rk - 1 in pre.ranks:
                    pre_ranks.append(post_rk - 1)
                if post_rk in pre.ranks:
                    pre_ranks.append(post_rk)
                if post_rk + 1 in pre.ranks:
                    pre_ranks.append(post_rk + 1)

                synapses.add(post_rk, pre_ranks, [weight] * len(pre_ranks),
                             [delay] * len(pre_ranks))

            return synapses

        def my_diagonal_with_non_uniform_delay(pre, post, weight, delay):
            synapses = CSR()
            for post_rk in post.ranks:
                pre_ranks = []
                delays = []
                if post_rk - 1 in pre.ranks:
                    pre_ranks.append(post_rk - 1)
                if post_rk in pre.ranks:
                    pre_ranks.append(post_rk)
                if post_rk + 1 in pre.ranks:
                    pre_ranks.append(post_rk + 1)

                synapses.add(post_rk, pre_ranks, [weight] * len(pre_ranks),
                             delay.get_values(len(pre_ranks)))

            return synapses

        neuron = Neuron(equations="r = 1")

        neuron2 = Neuron(equations="r = sum(exc)")

        pop1 = Population(5, neuron)
        pop2 = Population(5, neuron2)

        proj1 = Projection(pre=pop1, post=pop2, target="exc")
        proj1.connect_with_func(method=my_diagonal, weight=0.1)

        proj2 = Projection(pre=pop1, post=pop2, target="exc2")
        proj2.connect_with_func(method=my_diagonal_with_uniform_delay,
                                weight=0.1,
                                delay=2)

        proj3 = Projection(pre=pop1, post=pop2, target="exc3")
        proj3.connect_with_func(method=my_diagonal_with_non_uniform_delay,
                                weight=0.1,
                                delay=DiscreteUniform(1, 5))

        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj1, proj2, proj3])
        cls.test_net.compile(silent=True)

        cls.test_proj1 = cls.test_net.get(proj1)
        cls.test_proj2 = cls.test_net.get(proj2)
        cls.test_proj3 = cls.test_net.get(proj3)
예제 #11
0
               equations="""
        v_old = v_new
        tau * dv/dt = 1.0 - cos(v_old) + (1.0 + cos(v_old))*(eta + J*g_syn*tau) : init=6.2832, min=0.0
        tau_s * dg_syn/dt = g_exc*tau_s - g_syn
        v_tmp = v/(2*pi) : int
        v_new = (v/(2*pi) - v_tmp)*2*pi
    """,
               spike="(v_new > pi)*(v_old < pi)")

# population setup
pop1 = Population(N, neuron=Theta, name="ThetaPop1")
pop1.eta = eta + D * np.tan(
    (np.pi / 2) * (2 * np.arange(1, N + 1) - N - 1) / (N + 1))

# projection setup
proj = Projection(pre=pop1, post=pop1, target='exc', name='fb')
proj.connect_all_to_all(100.0 / N, allow_self_connections=False)

# monitoring
obs = Monitor(pop1, variables=['spike', 'v_new'], start=True, period=0.01)

# simulation
compile()
simulate(duration=T)

# conversion to pyrates
theta = pyrates_from_annarchy(monitors=[obs],
                              vars=['v_new'],
                              pop_average=False)
rate = pyrates_from_annarchy(monitors=[obs], vars=['spike'], pop_average=True)
## Connection of the V4 Populations, L2/3 => L4 (spatial supp.)
# A difference of Gaussians is used as weight
wPos = Gaussian2D(1.0, [13, 13], [3, 3])
wNeg = Gaussian2D(2.0, [13, 13], [1.0, 1.0])
wDoG = (positive(wPos - wNeg) / np.sum(positive(wPos - wNeg)))[:, :, None]
#V4L23_V4L4SUR = Convolution(V4L23, V4L4, target='S_SUR')####################################NEW
#V4L23_V4L4SUR.connect_filter(weights=wDoG, subsampling=ssList24, keep_last_dimension=True)##NEW

## Connection from V4 L2/3 to FEF visual (excitatory)
# The auxiliary population is used to pool the down-sampled V4L23 Population.
# Afterwards it could be up-sampled again. The combination of the two is
# currently not possible in ANNarchy
ssList2v = ssList24[9::params['V4L4_shape'][-1]]
V4L23_AuxE = Pooling(V4L23, AuxE, target='exc', operation='max')
V4L23_AuxE.connect_pooling(extent=(1, 1) + params['PFC_shape'])
AuxE_FEFv = Projection(AuxE, FEFv, target='exc', synapse=StandardSynapse)
AuxE_FEFv.connect_with_func(con_scale, factor=2, delays=params['FEFv_delay'])

## Connections from FEF visual to FEF visuo-motoric(excitatory and suppressive)
# A lowered Gaussian is used to simulate the combined responses
G = Gaussian2D(1.0, changed['RFsizev_vm'], changed['RFsigmav_vm'])
v_vm_shape = (params['FEFvm_shape'][-1], 1, 1)
wvvm = np.tile((G - params['vSv2'])[None, :, :], v_vm_shape)
wvvm *= params['dogScalingFactor_FEFvm']**np.arange(6)[:, None, None]
# The plus sign(+) is needed, so that wvvm will not be overwritten
FEFv_FEFvmE = Convolution(FEFv, FEFvm, target='E_v')
FEFv_FEFvmE.connect_filters(weights=positive(+wvvm))
FEFv_FEFvmS = Convolution(FEFv, FEFvm, target='S_v')
FEFv_FEFvmS.connect_filters(weights=positive(-wvvm))

## Connection from FEF visuo-motoric to V4 L4 (amplification)
예제 #13
0
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""
import unittest
import numpy

from ANNarchy import Izhikevich, Population, Projection, Network

pop1 = Population((3, 3), Izhikevich)
pop2 = Population((3, 3), Izhikevich)

proj = Projection(
    pre = pop1,
    post = pop2,
    target = "exc",
)

proj.connect_all_to_all(weights = 0.1, storage_format="csr")

# TODO: PopulationViews

class test_CSRConnectivity(unittest.TestCase):
    """
    This class tests the functionality of the connectivity patterns within *Projections*.
    """
    @classmethod
    def setUpClass(self):
        """
        Compile the network for this test
예제 #14
0
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""
import unittest
import numpy

from ANNarchy import Izhikevich, Population, Projection, Network

pop1 = Population((3, 3), Izhikevich)
pop2 = Population((3, 3), Izhikevich)

proj = Projection(
    pre=pop1,
    post=pop2,
    target="exc",
)

proj.connect_all_to_all(weights=0.1, storage_format="csr")

# TODO: PopulationViews


class test_CSRConnectivity(unittest.TestCase):
    """
    This class tests the functionality of the connectivity patterns within *Projections*.
    """
    @classmethod
    def setUpClass(self):
        """
예제 #15
0
GPe = Population(name='GPe', geometry=nBG, neuron=LinearNeuron)
GPe.phi = changed['noise_GPe']
GPe.B = params['baseline_GPe']

# MD
MD = Population(name='MD', geometry=nBG, neuron=LinearNeuron)
MD.phi = changed['noise_MD']
MD.B = changed['baseline_MD']

#####################################################
########  PROJECTIONS  ##############################
#####################################################

############# FROM INPUT #############

ITPFC = Projection(pre=IT, post=PFC, target='exc', synapse=PostCovariance)
ITPFC.connect_all_to_all(
    weights=changed['ITPFC.connect_all_to_all'])  #Normal(0.3,0.1) )

ITStrD1 = Projection(pre=IT,
                     post=StrD1,
                     target='exc',
                     synapse=DAPostCovarianceNoThreshold)
ITStrD1.connect_all_to_all(weights=Uniform(0, 0.3))  #Normal(0.15,0.15))

ITStrD2 = Projection(pre=IT,
                     post=StrD2,
                     target='exc',
                     synapse=DAPostCovarianceNoThreshold)
ITStrD2.connect_all_to_all(weights=Uniform(0, 0.3))  #Normal(0.15,0.15))
ITStrD2.DA_type = -1
예제 #16
0
    def setUpClass(cls):
        """
        Compile the network for this test
        """
        neuron = Neuron(parameters="r=0.0")

        out1 = Neuron(equations="""
                r =  sum(one2one)
            """)

        out2 = Neuron(equations="""
                r =  sum(all2all) + sum(fnp)
            """)

        pop1 = Population((17, 17), neuron)
        pop2 = Population((17, 17), out1)
        pop3 = Population(4, out2)

        proj = Projection(pre=pop1, post=pop2, target="one2one")
        proj.connect_one_to_one(
            weights=0.0,
            force_multiple_weights=True)  # weights set in the test

        proj2 = Projection(pre=pop1, post=pop3, target="all2all")
        proj2.connect_all_to_all(weights=Uniform(0, 1))

        proj3 = Projection(pre=pop1, post=pop3, target="fnp")
        proj3.connect_fixed_number_pre(5, weights=Uniform(0, 1))

        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, pop3, proj, proj2, proj3])
        cls.test_net.compile(silent=True)

        cls.net_pop1 = cls.test_net.get(pop1)
        cls.net_pop2 = cls.test_net.get(pop2)
        cls.net_pop3 = cls.test_net.get(pop3)
        cls.net_proj = cls.test_net.get(proj)
        cls.net_proj2 = cls.test_net.get(proj2)
        cls.net_proj3 = cls.test_net.get(proj3)
예제 #17
0
    def setUpClass(cls):
        """
        Define and compile the network for this test.
        """
        input_neuron = Neuron(parameters="r=0.0")

        output_neuron = Neuron(equations="""
                r = sum(p1) + sum(p2)
            """)

        syn_max = Synapse(psp="pre.r * w", operation="max")

        syn_min = Synapse(psp="pre.r * w", operation="min")

        syn_mean = Synapse(psp="pre.r * w", operation="mean")

        pop1 = Population((3, 3), neuron=input_neuron)
        pop2 = Population(4, neuron=output_neuron)

        proj1 = Projection(pop1, pop2, target="p1", synapse=syn_max)
        proj1.connect_all_to_all(weights=1.0)
        proj2 = Projection(pop1, pop2, target="p2", synapse=syn_min)
        proj2.connect_all_to_all(weights=1.0)
        proj3 = Projection(pop1, pop2, target="p3", synapse=syn_mean)
        proj3.connect_all_to_all(weights=1.0)

        cls.test_net = Network()
        cls.test_net.add([pop1, pop2, proj1, proj2, proj3])
        cls.test_net.compile(silent=True)

        cls.net_pop1 = cls.test_net.get(pop1)
        cls.net_pop2 = cls.test_net.get(pop2)
예제 #18
0
    def setUpClass(cls):
        """
        Build up the network
        """
        simple_emit = Neuron(spike="t==1", )
        simple_recv = Neuron(equations="""
                g_exc1 = 0
                g_exc2 = 0
                g_exc3 = 0
            """,
                             spike="g_exc1>30")

        # simple in/out populations
        in_pop = Population(5, neuron=simple_emit)
        out_pop = Population(2, neuron=simple_recv)

        # create the projections for the test cases (TC)
        # TC: no delay
        proj = Projection(pre=in_pop, post=out_pop, target="exc1")
        proj.connect_all_to_all(weights=1.0)
        # TC: uniform delay
        proj_u = Projection(pre=in_pop, post=out_pop, target="exc2")
        proj_u.connect_all_to_all(weights=1.0, delays=2.0)
        # TC: non-uniform delay
        proj_nu = Projection(pre=in_pop, post=out_pop, target="exc3")
        proj_nu.connect_all_to_all(weights=1.0, delays=Uniform(2, 10))

        # Monitor to record the currents
        m = Monitor(out_pop, ["g_exc1", "g_exc2", "g_exc3"])

        # build network and store required object
        # instances
        net = Network()
        net.add([in_pop, out_pop, proj, proj_u, proj_nu, m])
        cls.test_net = net
        cls.test_net.compile(silent=True)
        cls.test_g_exc_m = net.get(m)
        cls.test_proj = net.get(proj_nu)
예제 #19
0
    tau_m * dv/dt = (v_rest - v +  delta_T * exp((v-v_thresh)/delta_T)) + tau_m/cm*(I - w) : init=-70.6

    tau_w * dw/dt = a * (v - v_rest) / 1000.0 - w 

    tau_syn_E * dg_exc/dt = - g_exc : exponential
    tau_syn_I * dg_inh/dt = - g_inh : exponential
"""

# population setup
pop = Population(Ne + Ni, neuron=neuron)
E = pop[:Ne]
I = pop[Ne:]

# projection setup
C_ei = Projection(pre=E, post=I, target='exc', name='EI')
C_ie = Projection(pre=I, post=E, target='inh', name='IE')
#C_ee = Projection(E, E, 'exc', name='EE')
#C_ii = Projection(I, I, 'inh', name='II')
C_ei.connect_fixed_probability(0.1, weights=Uniform(c_min, c_max))
C_ie.connect_fixed_probability(0.1, weights=Uniform(c_min, c_max))
#C_ee.connect_fixed_probability(0.3, weights=Uniform(c_min, c_max))
#C_ii.connect_fixed_probability(0.3, weights=Uniform(c_min, c_max))

# input
#steps = int(T/dt)
#I_e_tmp = 5.0 + np.random.randn(steps, Ne) * 50.0 * np.sqrt(dt)   # input current for excitatory neurons
#I_i_tmp = 4.0 + np.random.randn(steps, Ni) * 44.0 * np.sqrt(dt)   # input current for inhibitory neurons
#I_e = TimedArray(rates=I_e_tmp, name="E_inp")
#I_i = TimedArray(rates=I_i_tmp, name="I_inp")
#inp_e = Projection(pre=I_e, post=E, target='exc')