from src.Network import Network from src.Neuron import IzhikevichNeuron from src.SpikeTrain import UniformSpikeTrain, PoissonSpikeTrain from src.Synapse import SynapseSTDP from src.plotting_functions import * from matplotlib import pyplot as plt neurons = [IzhikevichNeuron() for i in range(2)] dt = 0.1 T = 20000 # ms to run the network for T_steps = int(T / dt) # time steps to run the network for variables_to_monitor = ['v'] synapses = dict() synapses[0, 1] = SynapseSTDP(neurons[0], neurons[1]) net = Network(dt, neurons, synapses, variables_to_monitor) net.set_plastic_synapses(list_of_tuples=[(0, 1)]) spike_train_uniform = UniformSpikeTrain(T).generate(10) spike_train_poisson = PoissonSpikeTrain(T).generate(10) net.enforce_neurons(indices=[0, 1], spike_trains=[spike_train_uniform, spike_train_poisson]) # net.enforce_neurons(indices=[0], spike_trains=[spike_train_uniform]) net.run(T_steps) fig2 = plot_spikes_and_weights(net) plt.show(block=True)
prob=0.3) net = Network(dt, neurons, synapses, variables_to_monitor) # generate template input and output spike trains which repeats every T/10 timesteps ist1 = PoissonSpikeTrain(T / 10).generate(11) # in Hz ist2 = PoissonSpikeTrain(T / 10).generate(15) ist3 = PoissonSpikeTrain(T / 10).generate(13) ost = PoissonSpikeTrain(T / 10).generate(14) input_spike_train1 = np.hstack([ist1 + i * (T / 10) for i in range(20)]) input_spike_train2 = np.hstack([ist2 + i * (T / 10) for i in range(20)]) input_spike_train3 = np.hstack([ist3 + i * (T / 10) for i in range(20)]) output_spike_train = np.hstack([ost + i * (T / 10) for i in range(20)]) # fix the evolution of specified neurons and force them to spike at with the specified patterns net.enforce_neurons(enf_nrns, [ input_spike_train1, input_spike_train2, input_spike_train3, output_spike_train ]) # make the connections from all the neurons to the output neuron plastic (able to learn) plastic_synapses = [] for i in range(N - 1): plastic_synapses.append((i, N - 1)) plot_synaptic_traces = deepcopy(plastic_synapses) net.set_plastic_synapses(plastic_synapses) net.run(int(T_steps * 1.5)) # remove all the plasticity net.set_plastic_synapses([]) enf_nrns = [0, 1, 2] net.enforce_neurons(