Package org.apache.commons.math3.ml.neuralnet

# Class Network

java.lang.Object
org.apache.commons.math3.ml.neuralnet.Network

All Implemented Interfaces:
  `Serializable`, `Iterable<Neuron>`

public class Network extends Object implements Iterable<Neuron>, Serializable
Neural network, composed of `Neuron` instances and the links between them. Although updating a neuron's state is thread-safe, modifying the network's topology (adding or removing links) is not.

Since:
  3.3
See Also:
  - Serialized Form

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`Network.NeuronIdentifierComparator`
Comparator that prescribes an order of the neurons according to the increasing order of their identifier.

## Constructor Summary

Constructors
Constructor
Description
`Network(long initialIdentifier, int featureSize)`

## Method Summary

Modifier and Type
Method
Description
`void`
`addLink(Neuron a, Neuron b)`
Adds a link from neuron `a` to neuron `b`.
`Network`
`copy()`
Performs a deep copy of this instance.
`long`
`createNeuron(double[] features)`
Creates a neuron and assigns it a unique identifier.
`void`
`deleteLink(Neuron a, Neuron b)`
Deletes the link between neurons `a` and `b`.
`void`
`deleteNeuron(Neuron neuron)`
Deletes a neuron.
`int`
`getFeaturesSize()`
Gets the size of the neurons' features set.
`Collection<Neuron>`
`getNeighbours(Iterable<Neuron> neurons)`
Retrieves the neurons in the neighbourhood of any neuron in the `neurons` list.
`Collection<Neuron>`
`getNeighbours(Iterable<Neuron> neurons, Iterable<Neuron> exclude)`
Retrieves the neurons in the neighbourhood of any neuron in the `neurons` list.
`Collection<Neuron>`
`getNeighbours(Neuron neuron)`
Retrieves the neighbours of the given neuron.
`Collection<Neuron>`
`getNeighbours(Neuron neuron, Iterable<Neuron> exclude)`
Retrieves the neighbours of the given neuron.
`Neuron`
`getNeuron(long id)`
Retrieves the neuron with the given (unique) `id`.
`Collection<Neuron>`
`getNeurons(Comparator<Neuron> comparator)`
Creates a list of the neurons, sorted in a custom order.
`Iterator<Neuron>`
`iterator()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface java.lang.Iterable

`forEach, spliterator`

## Constructor Details

### Network

public Network(long initialIdentifier, int featureSize)

Parameters:
  `initialIdentifier` - Identifier for the first neuron that will be added to this network.
  `featureSize` - Size of the neuron's features.

## Method Details

### copy

public Network copy()
Performs a deep copy of this instance. Upon return, the copied and original instances will be independent: Updating one will not affect the other.

Returns:
  a new instance with the same state as this instance.
Since:
  3.6

### iterator

public Iterator<Neuron> iterator()

Specified by:
  `iterator` in interface `Iterable<Neuron>`

### getNeurons

public Collection<Neuron> getNeurons(Comparator<Neuron> comparator)
Creates a list of the neurons, sorted in a custom order.

Parameters:
  `comparator` - `Comparator` used for sorting the neurons.
Returns:
  a list of neurons, sorted in the order prescribed by the given `comparator`.
See Also:
  - `Network.NeuronIdentifierComparator`

### createNeuron

public long createNeuron(double[] features)
Creates a neuron and assigns it a unique identifier.

Parameters:
  `features` - Initial values for the neuron's features.
Returns:
  the neuron's identifier.
Throws:
  `DimensionMismatchException` - if the length of `features` is different from the expected size (as set by the `constructor`).

### deleteNeuron

public void deleteNeuron(Neuron neuron)
Deletes a neuron. Links from all neighbours to the removed neuron will also be `deleted`.

Parameters:
  `neuron` - Neuron to be removed from this network.
Throws:
  `NoSuchElementException` - if `n` does not belong to this network.

### getFeaturesSize

public int getFeaturesSize()
Gets the size of the neurons' features set.

Returns:
  the size of the features set.

### addLink

public void addLink(Neuron a, Neuron b)
Adds a link from neuron `a` to neuron `b`. Note: the link is not bi-directional; if a bi-directional link is required, an additional call must be made with `a` and `b` exchanged in the argument list.

Parameters:
  `a` - Neuron.
  `b` - Neuron.
Throws:
  `NoSuchElementException` - if the neurons do not exist in the network.

### deleteLink

public void deleteLink(Neuron a, Neuron b)
Deletes the link between neurons `a` and `b`.

Parameters:
  `a` - Neuron.
  `b` - Neuron.
Throws:
  `NoSuchElementException` - if the neurons do not exist in the network.

### getNeuron

public Neuron getNeuron(long id)
Retrieves the neuron with the given (unique) `id`.

Parameters:
  `id` - Identifier.
Returns:
  the neuron associated with the given `id`.
Throws:
  `NoSuchElementException` - if the neuron does not exist in the network.

### getNeighbours

public Collection<Neuron> getNeighbours(Iterable<Neuron> neurons)
Retrieves the neurons in the neighbourhood of any neuron in the `neurons` list.

Parameters:
  `neurons` - Neurons for which to retrieve the neighbours.
Returns:
  the list of neighbours.
See Also:
  - `getNeighbours(Iterable,Iterable)`

### getNeighbours

public Collection<Neuron> getNeighbours(Iterable<Neuron> neurons, Iterable<Neuron> exclude)
Retrieves the neurons in the neighbourhood of any neuron in the `neurons` list. The `exclude` list allows to retrieve the "concentric" neighbourhoods by removing the neurons that belong to the inner "circles".

Parameters:
  `neurons` - Neurons for which to retrieve the neighbours.
  `exclude` - Neurons to exclude from the returned list. Can be `null`.
Returns:
  the list of neighbours.

### getNeighbours

public Collection<Neuron> getNeighbours(Neuron neuron)
Retrieves the neighbours of the given neuron.

Parameters:
  `neuron` - Neuron for which to retrieve the neighbours.
Returns:
  the list of neighbours.
See Also:
  - `getNeighbours(Neuron,Iterable)`

### getNeighbours

public Collection<Neuron> getNeighbours(Neuron neuron, Iterable<Neuron> exclude)
Retrieves the neighbours of the given neuron.

Parameters:
  `neuron` - Neuron for which to retrieve the neighbours.
  `exclude` - Neurons to exclude from the returned list. Can be `null`.
Returns:
  the list of neighbours.