Esempio n. 1
0
    def __init__(
            self, n_neurons, dimensions, radius=1.0,
            encoders=nengo.Default, **ens_kwargs):
        super(Product, self).__init__(self)

        with self:
            self.config[nengo.Ensemble].update(ens_kwargs)
            self.A = nengo.Node(size_in=dimensions, label="A")
            self.B = nengo.Node(size_in=dimensions, label="B")
            self.dimensions = dimensions

            if encoders is nengo.Default:
                encoders = Choice([[1, 1], [1, -1], [-1, 1], [-1, -1]])

            optimizer = SubvectorRadiusOptimizer(
                n_neurons, 2, ens_kwargs=ens_kwargs)
            scaled_r = radius * optimizer.find_optimal_radius(dimensions, 1)

            self.product = EnsembleArray(
                n_neurons, n_ensembles=dimensions, ens_dimensions=2,
                radius=scaled_r, encoders=encoders, **ens_kwargs)

            nengo.Connection(
                self.A, self.product.input[::2], synapse=None)
            nengo.Connection(
                self.B, self.product.input[1::2], synapse=None)

            self.output = self.product.add_output(
                'product', lambda x: x[0] * x[1])
Esempio n. 2
0
    def __init__(self, n_neurons, dimensions, n_ensembles, ens_dimensions=1,
                 label=None, radius=1.0, **ens_kwargs):
        if dimensions % n_ensembles != 0:
            raise ValueError(
                "'dimensions' has to be divisible by 'n_ensembles'.")

        if n_ensembles > 1:
            optimizer = SubvectorRadiusOptimizer(
                n_neurons, ens_dimensions, ens_kwargs=ens_kwargs)
            scaled_r = radius * optimizer.find_optimal_radius(
                dimensions, dimensions // n_ensembles)
        else:
            scaled_r = 1.

        super(UnitEA, self).__init__(
            n_neurons, n_ensembles, ens_dimensions, label=label,
            radius=scaled_r, **ens_kwargs)