import nengo model = nengo.Network() with model: stim_command = nengo.Node([0,0]) command = nengo.Ensemble(n_neurons=100, dimensions=2) nengo.Connection(stim_command, command) motor = nengo.Ensemble(n_neurons=100, dimensions=2) #nengo.Connection(command, motor) nengo.Probe(command) nengo.Probe(motor) position = nengo.Ensemble(n_neurons=500, dimensions=2, radius=10) nengo.Connection(motor, position) nengo.Connection(position, position, synapse=0.1) nengo.Probe(position) stim_scary = nengo.Node([0]) scary = nengo.Ensemble(100, dimensions=1) nengo.Connection(stim_scary, scary) dir_scared = nengo.Ensemble(100, dimensions=2) def dir_scared_func(x): return -x nengo.Connection(position, dir_scared, function=dir_scared_func) w_command = nengo.Ensemble(300, dimensions=3) nengo.Connection(scary, w_command[0]) nengo.Connection(command, w_command[1:3]) def command_func(x): w = 1 - x[0] return w*x[1], w*x[2] nengo.Connection(w_command, motor, function=command_func) nengo.Probe(scary) nengo.Probe(w_command) w_scary = nengo.Ensemble(300, dimensions=3) nengo.Connection(scary, w_scary[0]) nengo.Connection(dir_scared, w_scary[1:3]) def command_func(x): w = x[0] return w*x[1], w*x[2] nengo.Connection(w_scary, motor, function=command_func) nengo.Probe(scary) nengo.Probe(w_command) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16, label='state') Q_A = nengo.Ensemble(50, 1, label='Q_A') Q_B = nengo.Ensemble(50, 1, label='Q_B') Q_C = nengo.Ensemble(50, 1, label='Q_C') Q_D = nengo.Ensemble(50, 1, label='Q_D') vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q_A, transform=[vocab.parse('DOG').v]) nengo.Connection(state, Q_B, transform=[vocab.parse('CAT').v]) nengo.Connection(state, Q_C, transform=[vocab.parse('RAT').v]) nengo.Connection(state, Q_D, transform=[vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q_A) nengo.Probe(Q_B) nengo.Probe(Q_C) nengo.Probe(Q_D) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4) vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4) vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) Q_together = nengo.Ensemble(200, 4) nengo.Probe(Q_together) nengo.Connection(Q.output, Q_together) def maximum(x): result = [0, 0, 0, 0] result[x.argmax()] = 1 return result R = nengo.networks.EnsembleArray(50, 4) nengo.Connection(Q_together, R.input, function=maximum) nengo.Probe(R.output) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4) vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) e = 0.1 i = -1 transform = [[e, i, i, i], [i, e, i, i], [i, i, e, i], [i, i, i, e]] nengo.Connection(Q.output, Q.input, transform=transform) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4) vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) e = 0.5 i = -1 def positive(x): if x[0]<0: return [0] else: return x Q.add_output('positive', positive) transform = [[e, i, i, i], [i, e, i, i], [i, i, e, i], [i, i, i, e]] nengo.Connection(Q.positive, Q.input, transform=transform) import nengo model = nengo.Network('Basal Ganglia') with model: mm = 1 mp = 1 me = 1 mg = 1 ws = 1 wt = 1 wm = 1 wg = 1 wp = 0.9 we = 0.3 e = 0.2 ep = -0.25 ee = -0.2 eg = -0.2 le = 0.2 lg = 0.2 tau_ampa = 0.002 tau_gaba = 0.008 N = 50 D = 4 model.config[nengo.Ensemble].radius = 1.5 model.config[nengo.Ensemble].encoders = nengo.dists.Choice([[1]]) strD1 = nengo.networks.EnsembleArray(N, D, label="StrD1", intercepts=nengo.dists.Uniform(e, 1)) strD2 = nengo.networks.EnsembleArray(N, D, label="StrD2", intercepts=nengo.dists.Uniform(e, 1)) stn = nengo.networks.EnsembleArray(N, D, label="STN", intercepts=nengo.dists.Uniform(ep, 1)) gpi = nengo.networks.EnsembleArray(N, D, label="GPi", intercepts=nengo.dists.Uniform(eg, 1)) gpe = nengo.networks.EnsembleArray(N, D, label="GPe", intercepts=nengo.dists.Uniform(ee, 1)) input = nengo.Node([0]*D, label="input") output = nengo.Node(label="output", size_in=D) # spread the input to StrD1, StrD2, and STN nengo.Connection(input, strD1.input, synapse=None, transform=ws * (1 + lg)) nengo.Connection(input, strD2.input, synapse=None, transform=ws * (1 - le)) nengo.Connection(input, stn.input, synapse=None, transform=wt) # connect the striatum to the GPi and GPe (inhibitory) def func_str(x): if x < e: return 0 return mm * (x - e) strD1.add_output('func', func_str) import numpy nengo.Connection(strD1.func, gpi.input, synapse=tau_gaba, transform=-numpy.eye(D) * wm) strD2.add_output('func', func_str) nengo.Connection(strD2.func, gpe.input, synapse=tau_gaba, transform=-numpy.eye(D) * wm) def func_stn(x): if x < ep: return 0 return mp * (x - ep) # connect the STN to GPi and GPe (broad and excitatory) tr = wp * numpy.ones((D, D)) stn.add_output('func', func_stn) nengo.Connection(stn.func, gpi.input, transform=tr, synapse=tau_ampa) nengo.Connection(stn.func, gpe.input, transform=tr, synapse=tau_ampa) def func_gpe(x): if x < ee: return 0 return me * (x - ee) # connect the GPe to GPi and STN (inhibitory) gpe.add_output('func', func_gpe) nengo.Connection(gpe.func, gpi.input, synapse=tau_gaba, transform=-we) nengo.Connection(gpe.func, stn.input, synapse=tau_gaba, transform=-wg) def func_gpi(x): if x < eg: return 0 return mg * (x - eg) # connect GPi to output (inhibitory) gpi.add_output('func', func_gpi) nengo.Connection(gpi.func, output) nengo.Probe(output) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4, label='Q') vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) bg = nengo.networks.BasalGanglia(4) nengo.Connection(Q.output, bg.input) R = nengo.networks.EnsembleArray(50, 4, label='R', encoders=nengo.dists.Choice([[1]]), intercepts=nengo.dists.Uniform(0.2, 1)) nengo.Connection(bg.output, R.input) nengo.Probe(R.output) import numpy bias = nengo.Node([1], label='bias') nengo.Connection(bias, R.input, transform=numpy.ones((4, 1)), synapse=None) nengo.Connection(R.output, R.input, transform=(numpy.eye(4)-1), synapse=0.008) import nengo import nengo.spa as spa model = spa.SPA() with model: state = nengo.Ensemble(500, 16) Q = nengo.networks.EnsembleArray(50, 4) vocab = spa.Vocabulary(16) model.config[state].vocab = vocab nengo.Connection(state, Q.input, transform=[vocab.parse('DOG').v, vocab.parse('CAT').v, vocab.parse('RAT').v, vocab.parse('COW').v]) nengo.Probe(state) nengo.Probe(Q.output) bg = nengo.networks.BasalGanglia(4) nengo.Connection(Q.output, bg.input) R = nengo.networks.EnsembleArray(50, 4, label='R', encoders=[[1]]*50, intercepts=nengo.objects.Uniform(0.2, 1)) nengo.Connection(bg.output, R.input) nengo.Probe(R.output) import numpy bias = nengo.Node([1], label='bias') nengo.Connection(bias, R.input, transform=numpy.ones((4, 1)), synapse=None) # mutual inhibition on the actions nengo.Connection(R.output, R.input, transform=(numpy.eye(4)-1), synapse=0.008) motor = nengo.Ensemble(500, 16, label='motor') nengo.Connection(R.output, motor, transform=numpy.array([vocab.parse('BARK').v, vocab.parse('MEOW').v, vocab.parse('SQUEAK').v, vocab.parse('MOO').v]).T) nengo.Probe(motor) import nengo import nengo.spa as spa model = spa.SPA(label="SPA1") with model: model.state = spa.Buffer(16) model.motor = spa.Buffer(16) actions = spa.Actions( 'dot(state, DOG) --> motor=BARK', 'dot(state, CAT) --> motor=MEOW', 'dot(state, RAT) --> motor=SQUEAK', 'dot(state, COW) --> motor=MOO', ) model.bg = spa.BasalGanglia(actions) model.thalamus = spa.Thalamus(model.bg) nengo.Probe(model.state.state.output) nengo.Probe(model.motor.state.output) nengo.Probe(model.thalamus.actions.output) import nengo import nengo.spa as spa model = spa.SPA(label="SPA1") with model: model.state = spa.Memory(16) actions = spa.Actions( 'dot(state, A) --> state=B', 'dot(state, B) --> state=C', 'dot(state, C) --> state=D', 'dot(state, D) --> state=E', 'dot(state, E) --> state=A', ) model.bg = spa.BasalGanglia(actions) model.thalamus = spa.Thalamus(model.bg) model.input = spa.Input(state=lambda t: 'A' if t < 0.1 else '0') nengo.Probe(model.state.state.output) nengo.Probe(model.thalamus.actions.output) import nengo import nengo.spa as spa model = spa.SPA(label="SPA1") with model: model.state = spa.Memory(16) model.vision = spa.Buffer(16) actions = spa.Actions( 'dot(vision, LETTER) --> state=vision', 'dot(state, A) --> state=B', 'dot(state, B) --> state=C', 'dot(state, C) --> state=D', 'dot(state, D) --> state=E', 'dot(state, E) --> state=A', ) model.bg = spa.BasalGanglia(actions) model.thalamus = spa.Thalamus(model.bg) model.input = spa.Input(state=lambda t: 'LETTER+A' if t < 0.1 else '0') nengo.Probe(model.state.state.output) nengo.Probe(model.thalamus.actions.output)