class ANN:
def __init__(self):
self.neurons = list()
self.synapses = dict()
def synapsesAt(self, neuron_id):
if self.synapses.has_key(neuron_id):
return self.synapses[neuron_id]
return {}
def valueAt(self, neuron_id):
#print '-->', self.neurons[neuron_id]
return self.neurons[neuron_id].output()
def addNeuron(self, number_of=1):
for i in range(number_of):
neuron_id = len(self.neurons)
neuron = Neuron(neuron_id, self)
self.neurons.append(neuron)
def addSynapse(self, dest_neuron, source_neuron, weight):
if not self.synapses.has_key(source_neuron.id):
self.synapses[source_neuron.id] = dict()
self.synapses[source_neuron.id][dest_neuron.id] = weight
class Neuron:
def __init__(self, neuron_id, Ann, is_input=False, value=1):
self.id = neuron_id
self.Ann = Ann
self.is_input = is_input
self.value = value
def output(self):
if self.is_input:
#print 'neuron is input, overrides to', self.value
return self.value
sigma = 0
synapses = self.Ann.synapsesAt(self.id)
for synapse_id in synapses:
#print 'processing synapse', synapse_id
sigma += self.Ann.valueAt(synapse_id) * synapses[synapse_id]
return sigma
def setValue(self, value):
self.value = value
ann = ANN()
ann.addNeuron(4)
n = ann.neurons
n[0].is_input = True
n[1].is_input = True
ann.addSynapse(n[0], n[2], 1)
ann.addSynapse(n[0], n[3], 1)
ann.addSynapse(n[1], n[2], 1)
ann.addSynapse(n[1], n[3], 1)
print 'neuron', n[2].id, 'outputs value of' , n[2].output()
print 'neuron', n[3].id, 'outputs value of' , n[3].output()