Exemple #1
0
def do_run():
    p.setup(timestep=1.0)
    input_pop = p.Population(1,
                             p.SpikeSourceArray,
                             cellparams={"spike_times": [0]},
                             label="input")
    cell_params_lif = {
        'cm': 0.25,  # nF
        'i_offset': 0.0,
        'tau_m': 20.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 5.0,
        'tau_syn_I': 5.0,
        'v_reset': -70.0,
        'v_rest': -65.0,
        'v_thresh': -50.0
    }
    pop = p.Population(2,
                       p.IF_curr_exp,
                       cellparams=cell_params_lif,
                       label="pop")

    connections = list()
    connections.append(
        p.Projection(input_pop, pop,
                     p.AllToAllConnector(weights=[0.3, 1.0], delays=[1, 17])))
    connections.append(
        p.Projection(input_pop, pop,
                     p.AllToAllConnector(weights=[1.0, 0.7], delays=[2, 15])))
    connections.append(
        p.Projection(input_pop, pop,
                     p.AllToAllConnector(weights=[0.7, 0.3], delays=[3, 33])))

    pre_weights = list()
    pre_delays = list()
    for connection in connections:
        pre_weights.append(connection.getWeights())
        pre_delays.append(connection.getDelays())

    p.run(100)

    post_weights = list()
    post_delays = list()
    for connection in connections:
        post_weights.append(connection.getWeights())
        post_delays.append(connection.getDelays())

    p.end()

    return (pre_weights, pre_delays, post_weights, post_delays)
Exemple #2
0
def do_run(nNeurons):

    p.setup(timestep=0.1, min_delay=1.0, max_delay=7.5)
    p.set_number_of_neurons_per_core("IF_curr_exp", 100)

    cell_params_lif = {
        'cm': 0.25,
        'i_offset': 0.0,
        'tau_m': 10.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 0.5,
        'tau_syn_I': 0.5,
        'v_reset': -65.0,
        'v_rest': -65.0,
        'v_thresh': -64.4
    }

    populations = list()
    projections = list()

    weight_to_spike = 0.5
    injection_delay = 2

    spikeArray = {'spike_times': [[0, 10, 20, 30]]}
    populations.append(
        p.Population(1, p.SpikeSourceArray, spikeArray, label='pop_0'))
    populations.append(
        p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
    populations.append(
        p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_2'))

    connector = p.AllToAllConnector(weights=weight_to_spike,
                                    delays=injection_delay)
    projections.append(p.Projection(populations[0], populations[1], connector))
    connector = p.AllToAllConnector(weights=weight_to_spike,
                                    delays=injection_delay)
    projections.append(p.Projection(populations[1], populations[2], connector))

    populations[2].record_v()
    populations[2].record()

    p.run(100)

    v = populations[2].get_v(compatible_output=True)
    spikes = populations[2].getSpikes(compatible_output=True)

    p.end()

    return (v, spikes)
Exemple #3
0
def do_run():
    p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
    n_neurons = 900  # number of neurons in each population

    cell_params_lif = {
        'cm': 0.25,  # nF
        'i_offset': 0.0,
        'tau_m': 20.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 5.0,
        'tau_syn_I': 5.0,
        'v_reset': -70.0,
        'v_rest': -65.0,
        'v_thresh': -50.0
    }

    populations = list()
    projections = list()

    weight_to_spike = 2.0
    delay = 1

    populations.append(
        p.Population(n_neurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))

    populations.append(
        p.Population(n_neurons, p.IF_curr_exp, cell_params_lif, label='pop_2'))

    connectors = p.AllToAllConnector(weights=weight_to_spike, delays=delay)
    projections.append(p.Projection(populations[0], populations[1],
                                    connectors))

    delays = []
    weights = []

    # before
    delays.append(projections[0].getDelays())
    weights.append(projections[0].getWeights())

    p.run(100)

    # after
    delays.append(projections[0].getDelays())
    weights.append(projections[0].getWeights())

    p.end()

    return (delays, weights)
    def test_recording_1_element(self):
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 200  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        spike_array = {'spike_times': [[0]]}
        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(1,
                         p.SpikeSourceArray,
                         spike_array,
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[1], populations[0],
                         p.AllToAllConnector()))

        populations[1].record()

        p.run(5000)

        spike_array_spikes = populations[1].getSpikes()
        boxed_array = numpy.zeros(shape=(0, 2))
        boxed_array = numpy.append(boxed_array, [[0, 0]], axis=0)
        numpy.testing.assert_array_equal(spike_array_spikes, boxed_array)

        p.end()
    def test_run(self):
        with LogCapture() as l:
            p.setup()
            p1 = p.Population(1, p.IF_curr_exp, {})
            p2 = p.Population(1, p.IF_curr_exp, {})

            proj = p.Projection(p1, p2, p.AllToAllConnector())

            p.run(500)

            proj.getWeights()

            p.run(500)

            proj.getWeights()

            p.end()
            self.assert_logs_messages(l.records, "Getting weights", 'INFO', 2)
def do_run(nNeurons):
    cell_params_lif = {
        'cm': 0.25,  # nF
        'i_offset': 0.0,
        'tau_m': 10.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 2.5,
        'tau_syn_I': 2.5,
        'v_reset': -70.0,
        'v_rest': -65.0,
        'v_thresh': -55.4
    }

    spike_list = {'spike_times': [float(x) for x in range(0, 599, 50)]}
    p.setup(timestep=1.0, min_delay=1.0, max_delay=32.0)

    p.set_number_of_neurons_per_core("SpikeSourceArray", 100)  # FAILS

    populations = list()
    projections = list()

    populations.append(
        p.Population(nNeurons, p.SpikeSourceArray, spike_list, label='input'))
    populations.append(
        p.Population(1, p.IF_curr_exp, cell_params_lif, label='pop_1'))
    projections.append(
        p.Projection(populations[0], populations[1], p.AllToAllConnector()))

    populations[0].record()

    p.run(1000)

    spikes = populations[0].getSpikes(compatible_output=True)

    p.end()

    return spikes
Exemple #7
0
    min_increment=1,
    max_increment=max_increment_in)

#setup projections
an_t_proj = sim.Projection(AN_pop,
                           T_stellate_pop,
                           sim.FromListConnector(an_t_stellate_conns),
                           target="excitatory")
#t_t_proj_ex = sim.Projection(T_stellate_pop,T_stellate_pop,sim.FromListConnector(t_t_stellate_conns_ex),target="excitatory")
#t_t_proj_in = sim.Projection(T_stellate_pop,T_stellate_pop,sim.FromListConnector(t_t_stellate_conns_in),target="inhibitory")
#t_t_proj = sim.Projection(T_stellate_pop,T_stellate_pop,sim.DistanceDependentProbabilityConnector(d_expression="d<10"),target="excitatory")
#d_t_proj = sim.Projection(D_stellate_pop,T_stellate_pop,sim.FromListConnector(d_t_stellate_conns),target="inhibitory")
#d_t_proj = sim.Projection(D_stellate_pop,T_stellate_pop,sim.AllToAllConnector(weights=0.2,delays=1.0),target="inhibitory")
d_t_proj = sim.Projection(oct_pop,
                          T_stellate_pop,
                          sim.AllToAllConnector(weights=8., delays=1.0),
                          target="inhibitory")
#d_t_proj = sim.Projection(D_stellate_pop,T_stellate_pop,sim.AllToAllConnector(weights=8.,delays=1.0),target="inhibitory")

#Create primary like CN neuron population
Primary_like_parameters = {
    #'tau_refrac':    0.8,
    #'tau_syn_E':    0.25,
    'tau_syn_E': 1.2,
    'tau_syn_I': 0.1,
    #'tau_m':    0.33
    'tau_m': 1.
}
Primary_like_pop_size = AN_pop_size  #-fan_in_t+1
Primary_like_pop = sim.Population(Primary_like_pop_size,
                                  sim.IF_curr_exp,
def do_run(nNeurons, neurons_per_core):

    p.setup(timestep=1.0, min_delay=1.0, max_delay=32.0)
    p.set_number_of_neurons_per_core("IF_curr_exp", neurons_per_core)

    nPopulations = 62
    cell_params_lif = {
        'cm': 0.25,
        'i_offset': 0.0,
        'tau_m': 20.0,
        'tau_refrac': 2.0,
        'tau_syn_E': 5.0,
        'tau_syn_I': 5.0,
        'v_reset': -70.0,
        'v_rest': -65.0,
        'v_thresh': -50.0
    }

    populations = list()
    projections = list()

    weight_to_spike = 1.5
    delay = 5

    for i in range(0, nPopulations):
        populations.append(
            p.Population(nNeurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_' + str(i)))
        # print "++++++++++++++++"
        # print "Added population %s" % (i)
        # print "o-o-o-o-o-o-o-o-"
    for i in range(0, nPopulations):
        projections.append(
            p.Projection(populations[i],
                         populations[(i + 1) % nPopulations],
                         p.OneToOneConnector(weight_to_spike, delay),
                         label="Projection from pop {} to pop "
                         "{}".format(i, (i + 1) % nPopulations)))
        # print "++++++++++++++++++++++++++++++++++++++++++++++++++++"
        # print "Added projection from population %s to population %s" \
        #       % (i, (i + 1) % nPopulations)

        # print "----------------------------------------------------"

    # pp(projections)
    spikeArray = {'spike_times': [[0]]}
    populations.append(
        p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))
    projections.append(
        p.Projection(populations[-1], populations[0],
                     p.AllToAllConnector(weight_to_spike, delay)))

    for i in range(0, nPopulations):
        populations[i].record_v()
        populations[i].record_gsyn()
        populations[i].record()

    p.run(1500)

    v = None
    gsyn = None
    spikes = None
    ''''
    weights = projections[0].getWeights()
    delays = projections[0].getDelays()
    '''

    v = populations[0].get_v(compatible_output=True)
    gsyn = populations[0].get_gsyn(compatible_output=True)
    spikes = populations[0].getSpikes(compatible_output=True)

    p.end()

    return (v, gsyn, spikes)
Exemple #9
0
output = 100

p.setup(timestep=1.0)
p.set_number_of_neurons_per_core(p.IF_cond_exp, 100)

poisson_rate = {'rate': 15}
tracker = SummaryTracker()
tracker.print_diff()

input_pop = p.Population(input_size, p.IF_cond_exp, {}, label='input')
hidden_pop = p.Population(hidden_size, p.IF_cond_exp, {}, label='hidden')
output_pop = p.Population(output, p.IF_cond_exp, {}, label='output')
breakout = p.Population(1, spinn_breakout.Breakout, {}, label="breakout")
print "after populations"
tracker.print_diff()
a = p.Projection(input_pop, hidden_pop, p.AllToAllConnector(weights=0.5))
print "after i->h"
tracker.print_diff()
a = p.Projection(breakout, hidden_pop, p.AllToAllConnector(weights=0.5))
print "after b->h"
tracker.print_diff()
b = p.Projection(input_pop, output_pop, p.AllToAllConnector(weights=2))
print "after i->o"
tracker.print_diff()
c = p.Projection(hidden_pop, output_pop, p.AllToAllConnector(weights=2))
print "after h->o"
tracker.print_diff()
d = p.Projection(input_pop, input_pop, p.AllToAllConnector(weights=2))
print "after i->i"
tracker.print_diff()
a = p.Projection(input_pop, hidden_pop, p.AllToAllConnector(weights=2))
# Plastic Connection between pre_pop and post_pop
stdp_model = sim.STDPMechanism(
    timing_dependence = TimingDependenceCerebellum(tau=tau, peak_time=peak_time),
    weight_dependence = sim.AdditiveWeightDependence(w_min=1.0, w_max=15.0, A_plus=0.5, A_minus=0.01)
)

#stdp_model = sim.STDPMechanism(
#    timing_dependence = sim.SpikePairRule(tau_plus=tau, tau_minus=tau),
#    weight_dependence = sim.AdditiveWeightDependence(w_min=1.0, w_max=15.0, A_plus=0.1, A_minus=0.1)
#)


# Connections between spike sources and neuron populations
    ####### SET HERE THE PARALLEL FIBER-PURKINJE CELL LEARNING RULE
ee_connector = sim.AllToAllConnector(weights=1.0)
projection_pf = sim.Projection(pre_stim, population, ee_connector,
                                         synapse_dynamics=sim.SynapseDynamics(slow=stdp_model),
                                         target='excitatory')

                                         
proj2 = sim.Projection(pre_stim, population2, ee_connector,target='excitatory')

# SET HERE THE TEACHING SIGNAL PROJECTION
ee_connector = sim.OneToOneConnector(weights=0.0)
proj_teaching = sim.Projection(teaching_stim, population, ee_connector, target='supervision')
#proj_dummy = sim.Projection(dummy_stim,population,sim.OneToOneConnector(weights=1000.1), target='inhibitory')

#IPython.embed()

print("Simulating for %us" % (sim_time / 1000))
breakout_pop = p.Population(1, spinn_breakout.Breakout, {}, label="breakout")
ex.activate_live_output_for(breakout_pop, host="0.0.0.0", port=UDP_PORT1)
ex.activate_live_output_for(breakout_pop, host="0.0.0.0", port=UDP_PORT2)

# Create spike injector to send random spikes to the paddle
spike_array = [[0, 2, 4, 6, 8, 10], [1, 3, 5, 7, 9, 11]]

# Connect key spike injector to breakout population
# array_input = p.Population(2, p.SpikeSourceArray(spike_times=spike_array), label="input_connect")
# poisson = p.SpikeSourcePoisson(rate=20)
rate = {'rate': 2}  #, 'duration': 10000000}
spike_input = p.Population(2,
                           p.SpikeSourcePoisson,
                           rate,
                           label="input_connect")
p.Projection(spike_input, breakout_pop, p.AllToAllConnector(weights=2))
# key_input_connection = SpynnakerLiveSpikesConnection(send_labels=["input_connect"])

# Create visualiser
# visualiser = Visualiser(
#     UDP_PORT, None,
#     x_res=X_RESOLUTION, y_res=Y_RESOLUTION,
#     x_bits=X_BITS, y_bits=Y_BITS)

running = True
t = threading.Thread(target=thread_visualiser, args=(UDP_PORT1))
r = threading.Thread(target=thread_visualiser, args=(UDP_PORT1))
result = [0 for i in range(2)]
# t = ThreadPool(processes=2)
# r = ThreadPool(processes=2)
# result = t.apply_async(thread_visualiser, [UDP_PORT1])
Exemple #12
0
def run_sim(num_pre, num_post, spike_times, run_time, weight=5.6, delay=40., gom=False,
            conn_type='one2one', use_stdp=False, mad=False, prob=0.5):
    model = p.IF_curr_exp
    p.setup( timestep = 1.0, min_delay = 1.0, max_delay = 144.0 )
    # if num_pre <= 10:
    #     p.set_number_of_neurons_per_core(model, 4)
    #     p.set_number_of_neurons_per_core(p.SpikeSourceArray, 5)
    # elif 10 < num_pre <= 50:
    #     p.set_number_of_neurons_per_core(model, 20)
    #     p.set_number_of_neurons_per_core(p.SpikeSourceArray, 21)
    # elif 50 < num_pre <= 100:
    #     p.set_number_of_neurons_per_core(model, 50)
    #     p.set_number_of_neurons_per_core(p.SpikeSourceArray, 51)
    # else:
    if use_stdp:
        p.set_number_of_neurons_per_core(model, 150)

    p.set_number_of_neurons_per_core(p.SpikeSourceArray, 2000)


    cell_params_lif = {  'cm'        : 1.0, # nF
                         'i_offset'  : 0.00,
                         'tau_m'     : 10.0,
                         'tau_refrac': 4.0,
                         'tau_syn_E' : 1.0,
                         'tau_syn_I' : 1.0,
                         'v_reset'   : -70.0,
                         'v_rest'    : -65.0,
                         'v_thresh'  : -60.0
                      }

    cell_params_pos = {
        'spike_times': spike_times,
    }
    w2s = weight
    dly = delay
    rng = NumpyRNG( seed = 1 )
    if use_stdp:
        td = p.SpikePairRule(tau_minus=1., tau_plus=1.)
        wd = p.AdditiveWeightDependence(w_min=0, w_max=20., A_plus=0.0, A_minus=0.0)
        stdp = p.STDPMechanism(timing_dependence=td, weight_dependence=wd)
        syn_dyn = p.SynapseDynamics(slow=stdp)
    else:
        syn_dyn = None

    sink = p.Population( num_post, model, cell_params_lif, label='sink')
    # sink1 = p.Population( nNeuronsPost, model, cell_params_lif, label='sink1')

    source0 = p.Population( num_pre, p.SpikeSourceArray, cell_params_pos,
                            label='source_0')

    # source1 = p.Population( nNeurons, p.SpikeSourceArray, cell_params_pos,
    #                         label='source_1')


    if conn_type == 'one2one':
        conn = p.OneToOneConnector(weights=w2s, delays=dly, generate_on_machine=gom)
    elif conn_type == 'all2all':
        conn = p.AllToAllConnector(weights=w2s, delays=dly, generate_on_machine=gom)
    elif conn_type == 'fixed_prob':
        conn = p.FixedProbabilityConnector(prob, weights=w2s, delays=dly,
                                           generate_on_machine=gom)
    else:
        raise Exception("Not a valid connector for test")

    proj = p.Projection( source0, sink, conn, target='excitatory',
                         synapse_dynamics=syn_dyn,
                         label=' source 0 to sink - EXC - delayed')


    # sink.record_v()
    # sink.record_gsyn()
    sink.record()


    print("Running for {} ms".format(run_time))
    t0 = time.time()
    p.run(run_time)
    time_to_run = time.time() - t0
    v = None
    gsyn = None
    spikes = None

    # v = np.array(sink.get_v(compatible_output=True))
    # gsyn = sink.get_gsyn(compatible_output=True)
    spikes = sink.getSpikes(compatible_output=True)
    w = proj.getWeights(format='array')
    p.end()

    return v, gsyn, spikes, w, time_to_run
def test_agent(weight):
    # Setup pyNN simulation
    weight = weight / 100.
    weight = weight * -1
    print "da weight = ", weight
    p.setup(timestep=1.0)
    p.set_number_of_neurons_per_core(p.IF_cond_exp, 100)

    receive_pop_size = 1
    hidden_pop_size = 1
    output_size = 1

    # Create input population and connect break out to it
    receive_on_pop = p.Population(receive_pop_size,
                                  p.IF_cond_exp, {},
                                  label="receive_pop")

    # Create output population and remaining population
    output_pop = p.Population(output_size,
                              p.IF_cond_exp, {},
                              label="output_pop")

    hidden_node_pop = p.Population(hidden_pop_size,
                                   p.IF_cond_exp, {},
                                   label="hidden_pop")
    hidden_node_pop.record()
    receive_on_pop.record()
    output_pop.record()

    spikes_in = p.Population(1,
                             p.SpikeSourceArray, {'spike_times': [100]},
                             label='spike')

    p.Projection(output_pop, receive_on_pop,
                 p.AllToAllConnector(weights=weight))
    p.Projection(receive_on_pop, hidden_node_pop,
                 p.AllToAllConnector(weights=weight))
    p.Projection(hidden_node_pop, output_pop,
                 p.AllToAllConnector(weights=weight))
    p.Projection(spikes_in, receive_on_pop,
                 p.AllToAllConnector(weights=weight))

    runtime = 1000
    p.run(runtime)

    pylab.figure()
    spikes_on = receive_on_pop.getSpikes()
    ax = pylab.subplot(1, 3, 1)  #4, 1)
    pylab.plot([i[1] for i in spikes_on], [i[0] for i in spikes_on], "r.")
    pylab.xlabel("Time (ms)")
    pylab.ylabel("neuron ID")
    pylab.axis([0, runtime, -1, receive_pop_size + 1])
    # pylab.show()
    # pylab.figure()
    spikes_on = hidden_node_pop.getSpikes()
    ax = pylab.subplot(1, 3, 2)  #4, 1)
    pylab.plot([i[1] for i in spikes_on], [i[0] for i in spikes_on], "r.")
    pylab.xlabel("Time (ms)")
    pylab.ylabel("neuron ID")
    pylab.axis([0, runtime, -1, hidden_pop_size + 1])
    # pylab.show()
    # pylab.figure()
    spikes_on = output_pop.getSpikes()
    ax = pylab.subplot(1, 3, 3)  #4, 1)
    pylab.plot([i[1] for i in spikes_on], [i[0] for i in spikes_on], "r.")
    pylab.xlabel("Time (ms)")
    pylab.ylabel("neuron ID")
    pylab.axis([0, runtime, -1, output_size + 1])
    pylab.show()

    # End simulation
    p.end()
    #    print(in_list,out_list)
    proj_MoF_GrC.append(
        sim.Projection(inpop, GrC_layer_pop[0], sim.FromListConnector(
            connlist)))  # Connect MoF current and set populations to GrC layer

## MoF to DCN
proj_MoF_DCN = []

scaled_weight_MoF_DCN = raw_weight_MoF_DCN / len(MoF_layer_pop)

for inpop in MoF_layer_pop:
    for outpop in DCN_layer_pop:
        proj_MoF_DCN.append(
            sim.Projection(inpop,
                           outpop,
                           sim.AllToAllConnector(weights=scaled_weight_MoF_DCN,
                                                 delays=1.),
                           target="excitatory",
                           label="proj_" + inpop.label + "_" + outpop.label))

## PuC to DCN
proj_PuC_DCN = []

repeat_par = n_PuC / n_DCN  # Should be 2, such that 2 PuC are mappend to 1 DCN
target_list = np.repeat(
    range(n_PuC),
    repeat_par).tolist()  # Create target list by mapping 2 PuC to the same DCN
source_list = range(n_DCN)
#connlist_PuC_DCN=zip(source_list,target_list,[raw_weight_PuC_DCN]*n_PuC,[1.0]*n_DCN)
connlist_PuC_DCN = zip(source_list, target_list, [raw_weight_PuC_DCN] * n_PuC,
                       list(np.random.randint(0, 10, n_DCN)))
for inpop, outpop in zip(PuC_layer_pop, DCN_layer_pop):