HyperNEAT substrate. Encapsulates substrate nodes in sets and connections. Connections can be defined explicitly or by providing mapping functions that map (connect) between nodes in sets. Node sets can be arranged as layers, however there is no limitation on node positions within the substrate - nodes in a set can be distributed throughout the substrate with no restrictions based on e.g. where nodes in other sets are located.