Example #1
0
def test_target_function(Simulator, nl_nodirect, plt, dimension, seed, rng):
    eval_points = UniformHypersphere().sample(1000, dimension, rng=rng)
    targets = eval_points ** 2

    model = nengo.Network("Connection Helper", seed=seed)
    with model:
        model.config[nengo.Ensemble].neuron_type = nl_nodirect()
        inp = nengo.Node(np.sin)
        ens1 = nengo.Ensemble(100, dimension)
        ens2 = nengo.Ensemble(100, dimension)
        ens3 = nengo.Ensemble(100, dimension)
        transform = [[1] if i % 2 == 0 else [-1]
                     for i in range(dimension)]
        nengo.Connection(inp, ens1, transform=transform)
        nengo.Connection(ens1, ens2,
                         **target_function(eval_points, targets))
        nengo.Connection(ens1, ens3, function=lambda x: x ** 2)
        probe1 = nengo.Probe(ens2, synapse=0.03)
        probe2 = nengo.Probe(ens3, synapse=0.03)

    sim = Simulator(model)
    sim.run(1)

    plt.plot(sim.trange(), sim.data[probe1])
    plt.plot(sim.trange(), sim.data[probe2], '--')

    assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
Example #2
0
def test_target_function(Simulator, nl_nodirect, plt, dimensions, radius, seed, rng):
    eval_points = UniformHypersphere().sample(1000, dimensions, rng=rng)
    eval_points *= radius
    f = lambda x: x ** 2
    targets = f(eval_points)

    model = nengo.Network(seed=seed)
    with model:
        model.config[nengo.Ensemble].neuron_type = nl_nodirect()
        inp = nengo.Node(lambda t: np.sin(t * 2 * np.pi) * radius)
        ens1 = nengo.Ensemble(40 * dimensions, dimensions, radius=radius)
        n1 = nengo.Node(size_in=dimensions)
        n2 = nengo.Node(size_in=dimensions)
        transform = np.linspace(1, -1, num=dimensions).reshape(-1, 1)
        nengo.Connection(inp, ens1, transform=transform)
        # pass in eval_points and targets
        nengo.Connection(ens1, n1, **target_function(eval_points, targets))
        # same, but let the builder apply f
        nengo.Connection(ens1, n2, function=f)
        probe1 = nengo.Probe(n1, synapse=0.03)
        probe2 = nengo.Probe(n2, synapse=0.03)

    sim = Simulator(model)
    sim.run(0.5)

    plt.subplot(2, 1, 1)
    plt.plot(sim.trange(), sim.data[probe1])
    plt.title("Square manually with target_function")
    plt.subplot(2, 1, 2)
    plt.plot(sim.trange(), sim.data[probe2])
    plt.title("Square by passing in function to connection")

    assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2 * radius)
Example #3
0
def test_target_function(Simulator, nl_nodirect, plt, dimensions, radius, seed,
                         rng):
    eval_points = UniformHypersphere().sample(1000, dimensions, rng=rng)
    eval_points *= radius
    f = lambda x: x**2
    targets = f(eval_points)

    model = nengo.Network(seed=seed)
    with model:
        model.config[nengo.Ensemble].neuron_type = nl_nodirect()
        inp = nengo.Node(lambda t: np.sin(t * 2 * np.pi) * radius)
        ens1 = nengo.Ensemble(40 * dimensions, dimensions, radius=radius)
        n1 = nengo.Node(size_in=dimensions)
        n2 = nengo.Node(size_in=dimensions)
        transform = np.linspace(1, -1, num=dimensions).reshape(-1, 1)
        nengo.Connection(inp, ens1, transform=transform)
        # pass in eval_points and targets
        nengo.Connection(ens1, n1, **target_function(eval_points, targets))
        # same, but let the builder apply f
        nengo.Connection(ens1, n2, function=f)
        probe1 = nengo.Probe(n1, synapse=0.03)
        probe2 = nengo.Probe(n2, synapse=0.03)

    with Simulator(model) as sim:
        sim.run(0.5)

    plt.subplot(2, 1, 1)
    plt.plot(sim.trange(), sim.data[probe1])
    plt.title('Square manually with target_function')
    plt.subplot(2, 1, 2)
    plt.plot(sim.trange(), sim.data[probe2])
    plt.title('Square by passing in function to connection')

    assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2 * radius)
Example #4
0
def test_target_function(Simulator, nl_nodirect, dimension):

    model = nengo.Network("Connection Helper", seed=12)

    eval_points = UniformHypersphere().sample(
        1000, dimension, np.random.RandomState(seed=12))

    targets = eval_points ** 2

    with model:
        model.config[nengo.Ensemble].neuron_type = nl_nodirect()
        inp = nengo.Node(np.sin)
        ens1 = nengo.Ensemble(100, dimension)
        ens2 = nengo.Ensemble(100, dimension)
        ens3 = nengo.Ensemble(100, dimension)
        transform = [[1] if i % 2 == 0 else [-1]
                     for i in range(dimension)]
        nengo.Connection(inp, ens1, transform=transform)
        nengo.Connection(ens1, ens2,
                         **target_function(eval_points, targets))
        nengo.Connection(ens1, ens3, function=lambda x: x ** 2)
        probe1 = nengo.Probe(ens2, synapse=0.03)
        probe2 = nengo.Probe(ens3, synapse=0.03)

    sim = nengo.Simulator(model)
    sim.run(1)

    with Plotter(Simulator, nl_nodirect) as plt:
        plt.plot(sim.trange(), sim.data[probe1])
        plt.plot(sim.trange(), sim.data[probe2], '--')
        plt.savefig('utils.test_connection.test_target_function'
                    '_2D.pdf')
        plt.close()

    assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
def test_target_function(Simulator, nl_nodirect, dimension):

    model = nengo.Network("Connection Helper", seed=12)

    eval_points = UniformHypersphere().sample(1000, dimension,
                                              np.random.RandomState(seed=12))

    targets = eval_points**2

    with model:
        model.config[nengo.Ensemble].neuron_type = nl_nodirect()
        inp = nengo.Node(np.sin)
        ens1 = nengo.Ensemble(100, dimension)
        ens2 = nengo.Ensemble(100, dimension)
        ens3 = nengo.Ensemble(100, dimension)
        transform = [[1] if i % 2 == 0 else [-1] for i in range(dimension)]
        nengo.Connection(inp, ens1, transform=transform)
        nengo.Connection(ens1, ens2, **target_function(eval_points, targets))
        nengo.Connection(ens1, ens3, function=lambda x: x**2)
        probe1 = nengo.Probe(ens2, synapse=0.03)
        probe2 = nengo.Probe(ens3, synapse=0.03)

    sim = nengo.Simulator(model)
    sim.run(1)

    with Plotter(Simulator, nl_nodirect) as plt:
        plt.plot(sim.trange(), sim.data[probe1])
        plt.plot(sim.trange(), sim.data[probe2], '--')
        plt.savefig('utils.test_connection.test_target_function' '_2D.pdf')
        plt.close()

    assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
def make_dd_net(target_func, period, n_neurons=100, seed=0, label=None):

    t_val = np.arange(0, period, dt)

    with nengo.Network(label=label) as dd_net:
        dd_net.input = nengo.Node(size_in=2)
        # ideally this should be using a config object
        readout = nengo.Ensemble(n_neurons=n_neurons, dimensions=2, neuron_type=nengo.LIFRate(), seed=seed)
        nengo.Connection(dd_net.input, readout, synapse=None)

        dd_net.output = nengo.Node(size_in=1)
        nengo.Connection(readout, dd_net.output,
                         **target_function(
                             np.array([np.cos(2*np.pi*t_val/period), np.sin(2*np.pi*t_val/period)]).T,
                             target_func(t_val)))

    return dd_net