Ejemplo n.º 1
0
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)
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(
    enf_nrns, [input_spike_train1, input_spike_train2, input_spike_train3])
net.run(int(T_steps * 0.5))

# # # Plots
# fig1 = plot_traces(net)
# plt.show(block = True)
# plt.close()