Class Network
- java.lang.Object
-
- org.apache.commons.math3.ml.neuralnet.Network
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Iterable<Neuron>
public class Network extends java.lang.Object implements java.lang.Iterable<Neuron>, java.io.Serializable
Neural network, composed ofNeuroninstances 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 classNetwork.NeuronIdentifierComparatorComparator that prescribes an order of the neurons according to the increasing order of their identifier.private static classNetwork.SerializationProxySerialization.
-
Field Summary
Fields Modifier and Type Field Description private intfeatureSizeNeuron's features set size.private java.util.concurrent.ConcurrentHashMap<java.lang.Long,java.util.Set<java.lang.Long>>linkMapLinks.private java.util.concurrent.ConcurrentHashMap<java.lang.Long,Neuron>neuronMapNeurons.private java.util.concurrent.atomic.AtomicLongnextIdNext available neuron identifier.private static longserialVersionUIDSerializable.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddLink(Neuron a, Neuron b)Adds a link from neuronato neuronb.private voidaddLinkToLinkSet(java.util.Set<java.lang.Long> linkSet, long id)Adds a link to neuronidin givenlinkSet.Networkcopy()Performs a deep copy of this instance.longcreateNeuron(double[] features)Creates a neuron and assigns it a unique identifier.private java.lang.LongcreateNextId()Creates a neuron identifier.voiddeleteLink(Neuron a, Neuron b)Deletes the link between neuronsaandb.private voiddeleteLinkFromLinkSet(java.util.Set<java.lang.Long> linkSet, long id)Deletes a link to neuronidin givenlinkSet.voiddeleteNeuron(Neuron neuron)Deletes a neuron.intgetFeaturesSize()Gets the size of the neurons' features set.java.util.Collection<Neuron>getNeighbours(java.lang.Iterable<Neuron> neurons)Retrieves the neurons in the neighbourhood of any neuron in theneuronslist.java.util.Collection<Neuron>getNeighbours(java.lang.Iterable<Neuron> neurons, java.lang.Iterable<Neuron> exclude)Retrieves the neurons in the neighbourhood of any neuron in theneuronslist.java.util.Collection<Neuron>getNeighbours(Neuron neuron)Retrieves the neighbours of the given neuron.java.util.Collection<Neuron>getNeighbours(Neuron neuron, java.lang.Iterable<Neuron> exclude)Retrieves the neighbours of the given neuron.NeurongetNeuron(long id)Retrieves the neuron with the given (unique)id.java.util.Collection<Neuron>getNeurons(java.util.Comparator<Neuron> comparator)Creates a list of the neurons, sorted in a custom order.java.util.Iterator<Neuron>iterator()private voidreadObject(java.io.ObjectInputStream in)Prevents proxy bypass.private java.lang.ObjectwriteReplace()Custom serialization.
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
Serializable.- See Also:
- Constant Field Values
-
neuronMap
private final java.util.concurrent.ConcurrentHashMap<java.lang.Long,Neuron> neuronMap
Neurons.
-
nextId
private final java.util.concurrent.atomic.AtomicLong nextId
Next available neuron identifier.
-
featureSize
private final int featureSize
Neuron's features set size.
-
linkMap
private final java.util.concurrent.ConcurrentHashMap<java.lang.Long,java.util.Set<java.lang.Long>> linkMap
Links.
-
-
Constructor Detail
-
Network
Network(long nextId, int featureSize, Neuron[] neuronList, long[][] neighbourIdList)Constructor with restricted access, solely used for deserialization.- Parameters:
nextId- Next available identifier.featureSize- Number of features.neuronList- Neurons.neighbourIdList- Links associated to each of the neurons inneuronList.- Throws:
MathIllegalStateException- if an inconsistency is detected (which probably means that the serialized form has been corrupted).
-
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 Detail
-
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 java.util.Iterator<Neuron> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<Neuron>
-
getNeurons
public java.util.Collection<Neuron> getNeurons(java.util.Comparator<Neuron> comparator)
Creates a list of the neurons, sorted in a custom order.- Parameters:
comparator-Comparatorused 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 offeaturesis different from the expected size (as set by theconstructor).
-
deleteNeuron
public void deleteNeuron(Neuron neuron)
Deletes a neuron. Links from all neighbours to the removed neuron will also bedeleted.- Parameters:
neuron- Neuron to be removed from this network.- Throws:
java.util.NoSuchElementException- ifndoes 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 neuronato neuronb. Note: the link is not bi-directional; if a bi-directional link is required, an additional call must be made withaandbexchanged in the argument list.- Parameters:
a- Neuron.b- Neuron.- Throws:
java.util.NoSuchElementException- if the neurons do not exist in the network.
-
addLinkToLinkSet
private void addLinkToLinkSet(java.util.Set<java.lang.Long> linkSet, long id)Adds a link to neuronidin givenlinkSet. Note: no check verifies that the identifier indeed belongs to this network.- Parameters:
linkSet- Neuron identifier.id- Neuron identifier.
-
deleteLink
public void deleteLink(Neuron a, Neuron b)
Deletes the link between neuronsaandb.- Parameters:
a- Neuron.b- Neuron.- Throws:
java.util.NoSuchElementException- if the neurons do not exist in the network.
-
deleteLinkFromLinkSet
private void deleteLinkFromLinkSet(java.util.Set<java.lang.Long> linkSet, long id)Deletes a link to neuronidin givenlinkSet. Note: no check verifies that the identifier indeed belongs to this network.- Parameters:
linkSet- Neuron identifier.id- Neuron identifier.
-
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:
java.util.NoSuchElementException- if the neuron does not exist in the network.
-
getNeighbours
public java.util.Collection<Neuron> getNeighbours(java.lang.Iterable<Neuron> neurons)
Retrieves the neurons in the neighbourhood of any neuron in theneuronslist.- Parameters:
neurons- Neurons for which to retrieve the neighbours.- Returns:
- the list of neighbours.
- See Also:
getNeighbours(Iterable,Iterable)
-
getNeighbours
public java.util.Collection<Neuron> getNeighbours(java.lang.Iterable<Neuron> neurons, java.lang.Iterable<Neuron> exclude)
Retrieves the neurons in the neighbourhood of any neuron in theneuronslist. Theexcludelist 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 benull.- Returns:
- the list of neighbours.
-
getNeighbours
public java.util.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 java.util.Collection<Neuron> getNeighbours(Neuron neuron, java.lang.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 benull.- Returns:
- the list of neighbours.
-
createNextId
private java.lang.Long createNextId()
Creates a neuron identifier.- Returns:
- a value that will serve as a unique identifier.
-
readObject
private void readObject(java.io.ObjectInputStream in)
Prevents proxy bypass.- Parameters:
in- Input stream.
-
writeReplace
private java.lang.Object writeReplace()
Custom serialization.- Returns:
- the proxy instance that will be actually serialized.
-
-