def generate_synapse_list(self, prevertex, postvertex, delay_scale,
         synapse_type):
     id_lists = list()
     weight_lists = list()
     delay_lists = list()
     type_lists = list()
     
     for _ in range(0, prevertex.atoms):
         id_lists.append(list())
         weight_lists.append(list())
         delay_lists.append(list())
         type_lists.append(list())
     
     for i in range(0, len(self.conn_list)):
         conn = self.conn_list[i]
         pre_atom = generateParameter(conn[0], i)
         post_atom = generateParameter(conn[1], i)
         weight = generateParameter(conn[2], i)
         delay = generateParameter(conn[3], i) * delay_scale
         id_lists[pre_atom].append(post_atom)
         weight_lists[pre_atom].append(weight)
         delay_lists[pre_atom].append(delay)
         type_lists[pre_atom].append(synapse_type)
         
     connection_list = [SynapseRowInfo(id_lists[i], weight_lists[i], 
                 delay_lists[i], type_lists[i]) 
             for i in range(0, prevertex.atoms)]
     
     return SynapticList(connection_list)
示例#2
0
 def generate_synapse_list(self, prevertex, postvertex, delay_scale,
         synapse_type):
     id_lists = list()
     weight_lists = list()
     delay_lists = list()
     type_lists = list()
     for _ in range(0, prevertex.atoms):
         id_lists.append(list())
         weight_lists.append(list())
         delay_lists.append(list())
         type_lists.append(list())
         
     numIncomingAxons = prevertex.atoms
     numTargetNeurons = postvertex.atoms
     
     for _ in range(0, self.numSynapses):
         source = int(random() * numIncomingAxons)
         target = int(random() * numTargetNeurons)
         weight = generateParameter(self.weights, target)
         delay = generateParameter(self.weights, target) * delay_scale
         id_lists[source].append(target)
         weight_lists[source].append(weight)
         delay_lists[source].append(delay)
         type_lists[source].append(synapse_type)
         
     connection_list = [SynapseRowInfo(id_lists[i], weight_lists[i], 
                 delay_lists[i], type_lists[i]) 
             for i in range(0, prevertex.atoms)]
     
     return SynapticList(connection_list)
    def generate_synapse_list(self, prevertex, postvertex, delay_scale,
                              synapse_type):
        id_lists = list()
        weight_lists = list()
        delay_lists = list()
        type_lists = list()

        for _ in range(0, prevertex.atoms):
            id_lists.append(list())
            weight_lists.append(list())
            delay_lists.append(list())
            type_lists.append(list())

        for i in range(0, len(self.conn_list)):
            conn = self.conn_list[i]
            pre_atom = generateParameter(conn[0], i)
            post_atom = generateParameter(conn[1], i)
            weight = generateParameter(conn[2], i)
            delay = generateParameter(conn[3], i) * delay_scale
            id_lists[pre_atom].append(post_atom)
            weight_lists[pre_atom].append(weight)
            delay_lists[pre_atom].append(delay)
            type_lists[pre_atom].append(synapse_type)

        connection_list = [
            SynapseRowInfo(id_lists[i], weight_lists[i], delay_lists[i],
                           type_lists[i]) for i in range(0, prevertex.atoms)
        ]

        return SynapticList(connection_list)
 def generate_synapse_list(self, prevertex, postvertex, delay_scale,
         synapse_type):
     connection_list = list()
     for pre_atom in range(0, prevertex.atoms):
         delay   = generateParameter(self.delays, pre_atom) * delay_scale
         weight  = generateParameter(self.weights, pre_atom)
         connection_list.append(SynapseRowInfo([pre_atom], [weight],
                  [delay], [synapse_type]))
                 
     return SynapticList(connection_list)
    def writePoissonParameters(self, spec, machineTimeStep, processor, 
            numNeurons):
        """
        Generate Neuron Parameter data for Poisson spike sources (region 2):
        """
        spec.comment("\nWriting Neuron Parameters for %d poisson sources:\n"
                % numNeurons)

        # Set the focus to the memory region 2 (neuron parameters):
        spec.switchWriteFocus(region = POISSON_PARAMS_REGION)

        # Write header info to the memory region:
        
        # Write Key info for this core:
        chipX, chipY, chipP = processor.get_coordinates()
        populationIdentity = \
            packet_conversions.get_key_from_coords(chipX, chipY, chipP)
        spec.write(data = populationIdentity)
        
        # Write the random seed (4 words), generated randomly!
        if self.seed == None:
            spec.write(data = numpy.random.randint(0x7FFFFFFF))
            spec.write(data = numpy.random.randint(0x7FFFFFFF))
            spec.write(data = numpy.random.randint(0x7FFFFFFF))
            spec.write(data = numpy.random.randint(0x7FFFFFFF))
        else:
            spec.write(data = self.seed[0])
            spec.write(data = self.seed[1])
            spec.write(data = self.seed[2])
            spec.write(data = self.seed[3])
        
        # For each neuron, get the rate to work out if it is a slow
        # or fast source
        slow_sources = list()
        fast_sources = list()
        for i in range(0, numNeurons):
            
            # Get the parameter values for source i:
            rateVal     = generateParameter(self.rate, i)
            startVal    = generateParameter(self.start, i)
            endVal      = generateParameter(self.duration, i) + startVal
            
            # Decide if it is a fast or slow source and 
            spikesPerTick = (float(rateVal) * (machineTimeStep / 1000000.0))
            if spikesPerTick <= SLOW_RATE_PER_TICK_CUTOFF:
                slow_sources.append([i, rateVal, startVal, endVal])
            else:
                fast_sources.append([i, spikesPerTick, startVal, endVal])
                
        # Write the numbers of each type of source
        spec.write(data = len(slow_sources))
        spec.write(data = len(fast_sources))

        # Now write one struct for each slow source as follows 
        #
        #   typedef struct slow_spike_source_t
        #   {
        #     uint32_t neuron_id;
        #     uint32_t start_ticks;
        #     uint32_t end_ticks;
        #      
        #     accum mean_isi_ticks;
        #     accum time_to_spike_ticks;
        #   } slow_spike_source_t;
        for (neuronId, rateVal, startVal, endVal) in slow_sources:
            isiValScaled = int(float(1000000.0 / (rateVal * machineTimeStep)) 
                    * 32768.0)
            startScaled   = int(startVal  * 1000.0 / machineTimeStep)
            endScaled     = int(endVal    * 1000.0 / machineTimeStep)
            spec.write(data = neuronId,       sizeof='uint32')
            spec.write(data = startScaled,    sizeof='uint32')
            spec.write(data = endScaled,      sizeof='uint32')
            spec.write(data = isiValScaled,   sizeof='s1615')
            spec.write(data = 0x0,            sizeof='uint32')
        
        # Now write 
        #   typedef struct fast_spike_source_t
        #   {
        #     uint32_t neuron_id;
        #     uint32_t start_ticks;
        #     uint32_t end_ticks;
        #     
        #     unsigned long fract exp_minus_lambda;
        #   } fast_spike_source_t;
        for (neuronId, spikesPerTick, startVal, endVal) in fast_sources:
            exp_minus_lamda = exp(-1.0 * spikesPerTick)
            exp_minus_lamda_scaled = int(exp_minus_lamda * float(0xFFFFFFFF))
            startScaled   = int(startVal  * 1000.0 / machineTimeStep)
            endScaled     = int(endVal    * 1000.0 / machineTimeStep)
            spec.write(data = neuronId,       sizeof='uint32')
            spec.write(data = startScaled,    sizeof='uint32')
            spec.write(data = endScaled,      sizeof='uint32')
            spec.write(data = exp_minus_lamda_scaled,   sizeof='u032')
        return
示例#6
0
    def writePoissonParameters(self, spec, machineTimeStep, processor,
                               numNeurons):
        """
        Generate Neuron Parameter data for Poisson spike sources (region 2):
        """
        spec.comment("\nWriting Neuron Parameters for %d poisson sources:\n" %
                     numNeurons)

        # Set the focus to the memory region 2 (neuron parameters):
        spec.switchWriteFocus(region=POISSON_PARAMS_REGION)

        # Write header info to the memory region:

        # Write Key info for this core:
        chipX, chipY, chipP = processor.get_coordinates()
        populationIdentity = \
            packet_conversions.get_key_from_coords(chipX, chipY, chipP)
        spec.write(data=populationIdentity)

        # Write the random seed (4 words), generated randomly!
        if self.seed == None:
            spec.write(data=numpy.random.randint(0x7FFFFFFF))
            spec.write(data=numpy.random.randint(0x7FFFFFFF))
            spec.write(data=numpy.random.randint(0x7FFFFFFF))
            spec.write(data=numpy.random.randint(0x7FFFFFFF))
        else:
            spec.write(data=self.seed[0])
            spec.write(data=self.seed[1])
            spec.write(data=self.seed[2])
            spec.write(data=self.seed[3])

        # For each neuron, get the rate to work out if it is a slow
        # or fast source
        slow_sources = list()
        fast_sources = list()
        for i in range(0, numNeurons):

            # Get the parameter values for source i:
            rateVal = generateParameter(self.rate, i)
            startVal = generateParameter(self.start, i)
            endVal = generateParameter(self.duration, i) + startVal

            # Decide if it is a fast or slow source and
            spikesPerTick = (float(rateVal) * (machineTimeStep / 1000000.0))
            if spikesPerTick <= SLOW_RATE_PER_TICK_CUTOFF:
                slow_sources.append([i, rateVal, startVal, endVal])
            else:
                fast_sources.append([i, spikesPerTick, startVal, endVal])

        # Write the numbers of each type of source
        spec.write(data=len(slow_sources))
        spec.write(data=len(fast_sources))

        # Now write one struct for each slow source as follows
        #
        #   typedef struct slow_spike_source_t
        #   {
        #     uint32_t neuron_id;
        #     uint32_t start_ticks;
        #     uint32_t end_ticks;
        #
        #     accum mean_isi_ticks;
        #     accum time_to_spike_ticks;
        #   } slow_spike_source_t;
        for (neuronId, rateVal, startVal, endVal) in slow_sources:
            isiValScaled = int(
                float(1000000.0 / (rateVal * machineTimeStep)) * 32768.0)
            startScaled = int(startVal * 1000.0 / machineTimeStep)
            endScaled = int(endVal * 1000.0 / machineTimeStep)
            spec.write(data=neuronId, sizeof='uint32')
            spec.write(data=startScaled, sizeof='uint32')
            spec.write(data=endScaled, sizeof='uint32')
            spec.write(data=isiValScaled, sizeof='s1615')
            spec.write(data=0x0, sizeof='uint32')

        # Now write
        #   typedef struct fast_spike_source_t
        #   {
        #     uint32_t neuron_id;
        #     uint32_t start_ticks;
        #     uint32_t end_ticks;
        #
        #     unsigned long fract exp_minus_lambda;
        #   } fast_spike_source_t;
        for (neuronId, spikesPerTick, startVal, endVal) in fast_sources:
            exp_minus_lamda = exp(-1.0 * spikesPerTick)
            exp_minus_lamda_scaled = int(exp_minus_lamda * float(0xFFFFFFFF))
            startScaled = int(startVal * 1000.0 / machineTimeStep)
            endScaled = int(endVal * 1000.0 / machineTimeStep)
            spec.write(data=neuronId, sizeof='uint32')
            spec.write(data=startScaled, sizeof='uint32')
            spec.write(data=endScaled, sizeof='uint32')
            spec.write(data=exp_minus_lamda_scaled, sizeof='u032')
        return