In [2]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import nengo
In [45]:
model = nengo.Network()
with model:
external = nengo.Node(0.5)
internal = nengo.Ensemble(n_neurons=100, dimensions=1)
state = nengo.Ensemble(n_neurons=300, dimensions=2)
#state2 = nengo.Ensemble(n_neurons=300, dimensions=2)
y = nengo.Ensemble(n_neurons=100, dimensions=1)
nengo.Connection(external, state[0])
nengo.Connection(internal, state[1])
nengo.Connection(state, y, function=lambda x: (x[0]-x[1])**2)
q = nengo.networks.EnsembleArray(n_neurons=100, n_ensembles=2)
error = nengo.networks.EnsembleArray(n_neurons=100, n_ensembles=2)
c_up = nengo.Connection(state, q.input[0], function=lambda x: 0, learning_rule_type=nengo.PES(learning_rate=1e-3))
c_dn = nengo.Connection(state, q.input[1], function=lambda x: 0, learning_rule_type=nengo.PES(learning_rate=1e-3))
inh = -1
choice = nengo.networks.EnsembleArray(n_neurons=100, n_ensembles=2, encoders=nengo.dists.Choice([[1]]),
intercepts=nengo.dists.Uniform(0,1))
nengo.Connection(q.output, choice.input)
nengo.Connection(choice.output, choice.input, transform=[[0,inh],[inh,0]])
nengo.Connection(choice.output[0], error.all_ensembles[1].neurons, transform=-3*np.ones((100, 1)))
nengo.Connection(choice.output[1], error.all_ensembles[0].neurons, transform=-3*np.ones((100, 1)))
nengo.Connection(q.output, error.input)
dydt = nengo.Node(None, size_in=1)
nengo.Connection(y, dydt, synapse=0.005, transform=-10)
nengo.Connection(y, dydt, synapse=0.050, transform=10)
nengo.Connection(dydt, error.input, transform=-np.ones((2,1)))
nengo.Connection(error.output[0], c_up.learning_rule)
nengo.Connection(error.output[1], c_dn.learning_rule)
nengo.Connection(internal, internal, synapse=0.1)
nengo.Connection(choice.output, internal, synapse=0.1, transform=[[-0.2,0.2]])
bias = nengo.Node(0.5)
nengo.Connection(bias, choice.input, transform=np.ones((2,1)))
In [46]:
import nengo_gui.jupyter
nengo_gui.jupyter.InlineGUI(model, cfg='minimize.cfg')
In [ ]: