예제 #1
0
def scalar_blend(sig_a, sig_b, seed=0):
    with nengo.Network() as dd_model:
        osc = nengo.Network()
        osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate()
        osc.config[nengo.Ensemble].seed = seed
        nengo.networks.Oscillator(0.1, 2 * np.pi / period, 300, net=osc)

        n_prod = 250
        prod_dim = 2
        mult_config = nengo.Config(nengo.Ensemble)
        mult_config[nengo.Ensemble].encoders = nengo.dists.Choice([[1, 1], [1, -1], [-1, -1], [-1, 1]])
        mult_config[nengo.Ensemble].neuron_type = nengo.LIFRate()
        mult_config[nengo.Ensemble].radius = np.sqrt(2)

        with mult_config:
            prod_a = nengo.Ensemble(n_prod, prod_dim)
            prod_b = nengo.Ensemble(n_prod, prod_dim)

        scale_control = nengo.Node(sw.step)
        in_start = nengo.Node(lambda t, x: 1 - x, size_in=1)  # start at 0 and go to 1
        nengo.Connection(scale_control, in_start, synapse=None)

        output = nengo.Node(size_in=1)

        dda = get_direct_decoders(sig_a, period, osc, bump_func)
        ddb = get_direct_decoders(sig_b, period, osc, bump_func)

        bump = nengo.Node(bump_func)
        nengo.Connection(bump, osc.ensemble[0])

        nengo.Connection(osc.ensemble.neurons, prod_a[0], transform=dda.T)
        nengo.Connection(osc.ensemble.neurons, prod_b[0], transform=ddb.T)

        nengo.Connection(in_start, prod_a[1])
        nengo.Connection(scale_control, prod_b[1])

        conn_a = nengo.Connection(prod_a, output, function=lambda x: x[0] * x[1])
        conn_b = nengo.Connection(prod_b, output, function=lambda x: x[0] * x[1])

        p_in_start = nengo.Probe(in_start)
        p_inhib = nengo.Probe(scale_control)
        p_a = nengo.Probe(conn_a, synapse=0.01)
        p_b = nengo.Probe(conn_b, synapse=0.01)
        p_out = nengo.Probe(output)

    with nengo.Simulator(dd_model) as dd_sim:
        dd_sim.run((t_start + t_blend + 2 * period))

    return dd_sim.data[p_a], dd_sim.data[p_b], dd_sim.data[p_out], dd_sim.data[p_inhib], dd_sim.data[p_in_start]
예제 #2
0
def scalar_blend(sig_a, sig_b, seed=0):
    with nengo.Network() as dd_model:
        osc = nengo.Network()
        osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate()
        osc.config[nengo.Ensemble].seed = seed
        nengo.networks.Oscillator(0.1, 2*np.pi/period, 300, net=osc)

        n_out = 100
        with osc.config:
            out_a = nengo.Ensemble(n_out, 1)
            out_b = nengo.Ensemble(n_out, 1)

        inhib_control = nengo.Node(sw.step)
        in_start = nengo.Node(lambda t, x: x-1, size_in=1)  # start at 0 and go to -1
        nengo.Connection(inhib_control, in_start, synapse=None)

        output = nengo.Node(size_in=1)

        dda = get_direct_decoders(sig_a, period, osc, bump_func)
        ddb = get_direct_decoders(sig_b, period, osc, bump_func)

        bump = nengo.Node(bump_func)
        nengo.Connection(bump, osc.ensemble[0])

        nengo.Connection(osc.ensemble.neurons, out_a, transform=dda.T)
        nengo.Connection(osc.ensemble.neurons, out_b, transform=ddb.T)

        nengo.Connection(in_start, out_a.neurons, transform=3*np.ones((n_out, 1)))
        nengo.Connection(inhib_control, out_b.neurons, transform=-3*np.ones((n_out, 1)))

        nengo.Connection(out_a, output)
        nengo.Connection(out_b, output)

        p_in_start = nengo.Probe(in_start)
        p_inhib = nengo.Probe(inhib_control)
        p_a = nengo.Probe(out_a, synapse=0.01)
        p_b = nengo.Probe(out_b, synapse=0.01)
        p_out = nengo.Probe(output)

    with nengo.Simulator(dd_model) as dd_sim:
        dd_sim.run((t_start + t_blend + 2*period))

    return dd_sim.data[p_a], dd_sim.data[p_b], dd_sim.data[p_out], dd_sim.data[p_inhib], dd_sim.data[p_in_start]
xv = np.linspace(0, 2 * np.pi, 100)
inter_arc = interpolate.interp1d(xv, np.arctan2(np.cos(xv), np.sin(xv)))


def arc_func(x):
    return inter_arc(2 * np.pi * x / period % (2 * np.pi))


with nengo.Network() as ad_model:
    bump = nengo.Node(bump_func)

    osc = nengo.Network()
    osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate()
    osc.config[nengo.Ensemble].seed = seed
    nengo.networks.Oscillator(0.1, 2 * np.pi / period, 300, net=osc)
    dd = get_direct_decoders(arc_func, period, osc, bump_func)

    dmp, conn_func = make_attrac_net(proc_func, 300, dd=dd, seed=seed)

    nengo.Connection(bump, osc.ensemble[0])
    nengo.Connection(osc.ensemble.neurons, dmp.input, function=conn_func)

    p_arc = nengo.Probe(arctan, synapse=0.01)

    p_out = nengo.Probe(dmp.output, synapse=0.01)

with nengo.Simulator(ad_model) as ad_sim:
    ad_sim.run(4 * period)

plt.plot(ad_sim.data[p_out][int(2 * period / dt) :])
plt.show()
예제 #4
0
def target_func(t):
    return np.sin(sin_per*t)


def bump_func(t):
    return 1 if t < 0.1 else 0


with nengo.Network() as dd_model:
    osc = nengo.Network()
    osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate()
    osc.config[nengo.Ensemble].seed = 0
    nengo.networks.Oscillator(0.1, 2*np.pi, 300, net=osc)

    output = nengo.Node(size_in=1)

    dd = get_direct_decoders(target_func, period, osc, bump_func)

    bump = nengo.Node(bump_func)
    nengo.Connection(bump, osc.ensemble[0])

    nengo.Connection(osc.ensemble.neurons, output, transform=dd.T)

    p_out = nengo.Probe(output)

with nengo.Simulator(dd_model) as dd_sim:
    dd_sim.run(3*period)

plt.plot(dd_sim.data[p_out][int(2*period/dt):])
plt.show()