def structural_eliminate_to_empty(): p.setup(1.0) stim = p.Population(9, p.SpikeSourceArray(range(10)), label="stim") # These populations should experience elimination pop = p.Population(9, p.IF_curr_exp(), label="pop") # Make a full list # Elimination with random selection (0 probability formation) proj = p.Projection( stim, pop, p.AllToAllConnector(), p.StructuralMechanismStatic( partner_selection=p.RandomSelection(), formation=p.DistanceDependentFormation([3, 3], 0.0), elimination=p.RandomByWeightElimination(4.0, 1.0, 1.0), f_rew=1000, initial_weight=4.0, initial_delay=3.0, s_max=9, seed=0, weight=0.0, delay=1.0)) pop.record("rewiring") p.run(1000) # Get the final connections conns = list(proj.get(["weight", "delay"], "list")) rewiring = pop.get_data("rewiring") formation_events = rewiring.segments[0].events[0] elimination_events = rewiring.segments[0].events[1] num_forms = len(formation_events.times) num_elims = len(elimination_events.times) first_elim = elimination_events.labels[0] p.end() # These should have no connections since all should be eliminated assert (len(conns) == 0) assert (num_elims == 81) assert (num_forms == 0) assert (first_elim == "7_5_elimination")
def mission_impossible_2(): sim.setup(0.1, time_scale_factor=1) # Can't do structural on multiple synapse cores source = sim.Population(1, sim.SpikeSourcePoisson(rate=10)) pop = sim.Population(128, sim.IF_curr_exp(), additional_parameters={ "splitter": SplitterAbstractPopulationVertexNeuronsSynapses(2) }) sim.Projection( source, pop, sim.FromListConnector([]), sim.StructuralMechanismStatic(sim.RandomSelection(), sim.DistanceDependentFormation(), sim.RandomByWeightElimination(0.5))) with pytest.raises(SynapticConfigurationException): sim.run(100)
def structural_with_stdp(): p.setup(1.0) pre_spikes = numpy.array(range(0, 10, 2)) pre_spikes_last_neuron = pre_spikes[pre_spikes > 0] A_plus = 0.01 A_minus = 0.01 tau_plus = 20.0 tau_minus = 20.0 w_min = 0.0 w_max = 5.0 w_init_1 = 5.0 delay_1 = 2.0 w_init_2 = 4.0 delay_2 = 1.0 stim = p.Population(1, p.SpikeSourceArray(pre_spikes), label="stim") pop = p.Population(1, p.IF_curr_exp(), label="pop") pop_2 = p.Population(1, p.IF_curr_exp(), label="pop_2") pop_3 = p.Population(1, p.IF_curr_exp(), label="pop_3") pop_4 = p.Population(1, p.IF_curr_exp(), label="pop_4") pop.record("spikes") pop_2.record("spikes") proj = p.Projection( stim, pop, p.FromListConnector([]), p.StructuralMechanismSTDP( partner_selection=p.LastNeuronSelection(), formation=p.DistanceDependentFormation([1, 1], 1.0), elimination=p.RandomByWeightElimination(2.0, 0, 0), timing_dependence=p.SpikePairRule( tau_plus, tau_minus, A_plus, A_minus), weight_dependence=p.AdditiveWeightDependence(w_min, w_max), f_rew=1000, initial_weight=w_init_1, initial_delay=delay_1, s_max=1, seed=0, weight=0.0, delay=1.0)) proj_2 = p.Projection( stim, pop_2, p.FromListConnector([]), p.StructuralMechanismSTDP( partner_selection=p.RandomSelection(), formation=p.DistanceDependentFormation([1, 1], 1.0), elimination=p.RandomByWeightElimination(4.0, 0, 0), timing_dependence=p.SpikePairRule( tau_plus, tau_minus, A_plus, A_minus), weight_dependence=p.AdditiveWeightDependence(w_min, w_max), f_rew=1000, initial_weight=w_init_2, initial_delay=delay_2, s_max=1, seed=0, weight=0.0, delay=1.0)) proj_3 = p.Projection( stim, pop_3, p.FromListConnector([(0, 0)]), p.StructuralMechanismSTDP( partner_selection=p.LastNeuronSelection(), formation=p.DistanceDependentFormation([1, 1], 0.0), elimination=p.RandomByWeightElimination(4.0, 1.0, 1.0), timing_dependence=p.SpikePairRule( tau_plus, tau_minus, A_plus, A_minus), weight_dependence=p.AdditiveWeightDependence(w_min, w_max), f_rew=1000, initial_weight=2.0, initial_delay=5.0, s_max=1, seed=0, weight=0.0, delay=1.0)) proj_4 = p.Projection( stim, pop_4, p.FromListConnector([(0, 0)]), p.StructuralMechanismSTDP( partner_selection=p.RandomSelection(), formation=p.DistanceDependentFormation([1, 1], 0.0), elimination=p.RandomByWeightElimination(4.0, 1.0, 1.0), timing_dependence=p.SpikePairRule( tau_plus, tau_minus, A_plus, A_minus), weight_dependence=p.AdditiveWeightDependence(w_min, w_max), f_rew=1000, initial_weight=4.0, initial_delay=3.0, s_max=1, seed=0, weight=0.0, delay=1.0)) p.run(10) conns = list(proj.get(["weight", "delay"], "list")) conns_2 = list(proj_2.get(["weight", "delay"], "list")) conns_3 = list(proj_3.get(["weight", "delay"], "list")) conns_4 = list(proj_4.get(["weight", "delay"], "list")) spikes_1 = [s.magnitude for s in pop.get_data("spikes").segments[0].spiketrains] spikes_2 = [s.magnitude for s in pop_2.get_data("spikes").segments[0].spiketrains] p.end() print(conns) print(conns_2) print(conns_3) print(conns_4) w_final_1 = calculate_spike_pair_additive_stdp_weight( pre_spikes_last_neuron, spikes_1[0], w_init_1, delay_1, w_max, A_plus, A_minus, tau_plus, tau_minus) w_final_2 = calculate_spike_pair_additive_stdp_weight( pre_spikes, spikes_2[0], w_init_2, delay_2, w_max, A_plus, A_minus, tau_plus, tau_minus) print(w_final_1, spikes_1[0]) print(w_final_2, spikes_2[0]) assert(len(conns) == 1) assert(conns[0][3] == delay_1) assert(conns[0][2] >= w_final_1 - 0.01 and conns[0][2] <= w_final_1 + 0.01) assert(len(conns_2) == 1) assert(conns_2[0][3] == delay_2) assert(conns_2[0][2] >= w_final_2 - 0.01 and conns_2[0][2] <= w_final_2 + 0.01) assert(len(conns_3) == 0) assert(len(conns_4) == 0)
def structural_without_stdp(): p.setup(1.0) stim = p.Population(1, p.SpikeSourceArray(range(10)), label="stim") # These populations should experience formation pop = p.Population(1, p.IF_curr_exp(), label="pop") pop_2 = p.Population(1, p.IF_curr_exp(), label="pop_2") # These populations should experience elimination pop_3 = p.Population(1, p.IF_curr_exp(), label="pop_3") pop_4 = p.Population(1, p.IF_curr_exp(), label="pop_4") # Formation with last-neuron selection (0 probability elimination) proj = p.Projection( stim, pop, p.FromListConnector([]), p.StructuralMechanismStatic( partner_selection=p.LastNeuronSelection(), formation=p.DistanceDependentFormation([1, 1], 1.0), elimination=p.RandomByWeightElimination(2.0, 0, 0), f_rew=1000, initial_weight=2.0, initial_delay=5.0, s_max=1, seed=0, weight=0.0, delay=1.0)) # Formation with random selection (0 probability elimination) proj_2 = p.Projection( stim, pop_2, p.FromListConnector([]), p.StructuralMechanismStatic( partner_selection=p.RandomSelection(), formation=p.DistanceDependentFormation([1, 1], 1.0), elimination=p.RandomByWeightElimination(4.0, 0, 0), f_rew=1000, initial_weight=4.0, initial_delay=3.0, s_max=1, seed=0, weight=0.0, delay=1.0)) # Elimination with last neuron selection (0 probability formation) proj_3 = p.Projection( stim, pop_3, p.FromListConnector([(0, 0)]), p.StructuralMechanismStatic( partner_selection=p.LastNeuronSelection(), formation=p.DistanceDependentFormation([1, 1], 0.0), elimination=p.RandomByWeightElimination(4.0, 1.0, 1.0), f_rew=1000, initial_weight=2.0, initial_delay=5.0, s_max=1, seed=0, weight=0.0, delay=1.0)) # Elimination with random selection (0 probability formation) proj_4 = p.Projection( stim, pop_4, p.FromListConnector([(0, 0)]), p.StructuralMechanismStatic( partner_selection=p.RandomSelection(), formation=p.DistanceDependentFormation([1, 1], 0.0), elimination=p.RandomByWeightElimination(4.0, 1.0, 1.0), f_rew=1000, initial_weight=4.0, initial_delay=3.0, s_max=1, seed=0, weight=0.0, delay=1.0)) p.run(10) # Get the final connections conns = list(proj.get(["weight", "delay"], "list")) conns_2 = list(proj_2.get(["weight", "delay"], "list")) conns_3 = list(proj_3.get(["weight", "delay"], "list")) conns_4 = list(proj_4.get(["weight", "delay"], "list")) p.end() print(conns) print(conns_2) print(conns_3) print(conns_4) # These should be formed with specified parameters assert(len(conns) == 1) assert(tuple(conns[0]) == (0, 0, 2.0, 5.0)) assert(len(conns_2) == 1) assert(tuple(conns_2[0]) == (0, 0, 4.0, 3.0)) # These should have no connections since eliminated assert(len(conns_3) == 0) assert(len(conns_4) == 0)