public static void AssertIsValid( MetaNeatGenome <T> metaNeatGenome, int id, int birthGeneration, ConnectionGenes <T> connGenes, int[] hiddenNodeIdArr, INodeIdMap nodeIndexByIdMap, DirectedGraph digraph, int[] connectionIndexMap) { // Mandatory ref tests. Debug.Assert(null != metaNeatGenome); Debug.Assert(null != connGenes); Debug.Assert(null != hiddenNodeIdArr); Debug.Assert(null != nodeIndexByIdMap); Debug.Assert(null != digraph); // Acyclic graph checks. if (metaNeatGenome.IsAcyclic) { AssertAcyclicGraph(metaNeatGenome, digraph, connectionIndexMap); } // Node counts. AssertNodeCounts(metaNeatGenome, hiddenNodeIdArr, nodeIndexByIdMap, digraph); // Hidden node IDs. Debug.Assert(ConnectionGenesUtils.ValidateHiddenNodeIds(hiddenNodeIdArr, connGenes._connArr, metaNeatGenome.InputOutputNodeCount)); // Connections. AssertConnections(connGenes, digraph, nodeIndexByIdMap, connectionIndexMap); }
public static void AssertIsValid( MetaNeatGenome <T> metaNeatGenome, int id, int birthGeneration, ConnectionGenes <T> connGenes, int[] hiddenNodeIdArr, INodeIdMap nodeIndexByIdMap, DirectedGraph digraph, int[]?connectionIndexMap) { // Check for mandatory object references. Debug.Assert(metaNeatGenome is object); Debug.Assert(connGenes is object); Debug.Assert(hiddenNodeIdArr is object); Debug.Assert(nodeIndexByIdMap is object); Debug.Assert(digraph is object); // Basic check on ID and birth generation. Debug.Assert(id >= 0); Debug.Assert(birthGeneration >= 0); // Acyclic graph checks. if (metaNeatGenome.IsAcyclic) { AssertAcyclicGraph(metaNeatGenome, digraph, connectionIndexMap); } // Node counts. AssertNodeCounts(metaNeatGenome, hiddenNodeIdArr, nodeIndexByIdMap, digraph); // Hidden node IDs. Debug.Assert(ConnectionGenesUtils.ValidateHiddenNodeIds(hiddenNodeIdArr, connGenes._connArr, metaNeatGenome.InputOutputNodeCount)); // Connections. AssertConnections(connGenes, digraph, nodeIndexByIdMap, connectionIndexMap); }
public static bool IsValid( MetaNeatGenome <T> metaNeatGenome, int id, int birthGeneration, ConnectionGenes <T> connGenes, int[] hiddenNodeIdArr, INodeIdMap nodeIndexByIdMap, DirectedGraph digraph, int[] connectionIndexMap) { // Mandatory ref tests. if (null == metaNeatGenome || null == connGenes || null == hiddenNodeIdArr || null == nodeIndexByIdMap || null == digraph) { return(false); } // Acyclic/cyclic specific checks. if (metaNeatGenome.IsAcyclic) { if (digraph.GetType() != typeof(AcyclicDirectedGraph) || null == connectionIndexMap) { return(false); } } else { if (digraph.GetType() != typeof(DirectedGraph)) { return(false); } } // DepthInfo relates to acyclic graphs only, and is mandatory for acyclic graphs. // TODO: Enable once NeatGenomeAcyclicBuilder is finished. //if(metaNeatGenome.IsAcyclic) //{ // if(!IsValid_Acyclic(metaNeatGenome, depthInfo)) { // return false; // } //} // Node counts. if (!ValidateNodeCounts(metaNeatGenome, hiddenNodeIdArr, nodeIndexByIdMap, digraph)) { return(false); } // Hidden node IDs. if (!ConnectionGenesUtils.ValidateHiddenNodeIds(hiddenNodeIdArr, connGenes._connArr, metaNeatGenome.InputOutputNodeCount)) { return(false); } // Connections. if (!ValidateConnections(connGenes, digraph, nodeIndexByIdMap, connectionIndexMap)) { return(false); } // All tests passed. return(true); }