public TWEANN(TWEANNGenotype g) { Running = true; ArchetypeIndex = g.GetArchetypeIndex(); nodes = new List <TWEANNNode>(g.Nodes.Count); int countIn = 0, countOut = 0; if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE) { Debug.Log("Starting TWEANNNodes build..."); } foreach (NodeGene node in g.Nodes) { TWEANNNode tempNode = new TWEANNNode(node.fTYPE, node.nTYPE, node.Innovation, false, node.GetBias()); nodes.Add(tempNode); if (node.nTYPE == NTYPE.INPUT) { countIn++; } else if (node.nTYPE == NTYPE.OUTPUT) { countOut++; } } numInputs = countIn; numOutputs = countOut; if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE) { Debug.Log("Starting TWEANNLinks build..."); } foreach (LinkGene link in g.Links) { TWEANNNode source = GetNodeByInnovationID(link.GetSourceInnovation()); TWEANNNode target = GetNodeByInnovationID(link.GetTargetInnovation()); if (source == null) { throw new System.Exception("Source not found with innovation " + link.GetSourceInnovation() + " : " + ToString()); } if (target == null) { throw new System.Exception("Target not found with innovation " + link.GetTargetInnovation() + " : " + ToString()); } source.Connect(target, link.GetWeight(), link.Innovation, false, false); } if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE) { Debug.Log("TWEANN build from TWEANNGenotype completed"); } Running = false; }
public TWEANNGenotype Crossover(TWEANNGenotype toModify, TWEANNGenotype toReturn) { AddToCSV("toModify pre", DebugNodes(toModify.Nodes)); AddToCSV("toReturn pre", DebugNodes(toReturn.Nodes)); AddToCSV("toModify links pre", DebugLinks(toModify.Links)); AddToCSV("toReturn links pre", DebugLinks(toReturn.Links)); List <List <NodeGene> > alignedNodes = new List <List <NodeGene> >(2) { AlignNodesToArchetype(toModify.Nodes, toModify.GetArchetypeIndex()), AlignNodesToArchetype(toReturn.Nodes, toReturn.GetArchetypeIndex()) }; AddToCSV("toModify aligned", DebugNodes(alignedNodes[0])); AddToCSV("toReturn aligned", DebugNodes(alignedNodes[1])); List <List <NodeGene> > crossedNodes = CrossNodes(alignedNodes[0], alignedNodes[1]); AddToCSV("toModify crossed", DebugNodes(crossedNodes[0])); AddToCSV("toReturn crossed", DebugNodes(crossedNodes[1])); List <List <LinkGene> > alignedLinks = AlignLinkGenes(toModify.Links, toReturn.Links); AddToCSV("toModify aligned links", DebugLinks(alignedLinks[0])); AddToCSV("toReturn aligned links", DebugLinks(alignedLinks[1])); List <List <LinkGene> > crossedLinks = CrossLinks(alignedLinks[0], alignedLinks[1]); AddToCSV("toModify crossed links", DebugLinks(crossedLinks[0])); AddToCSV("toReturn crossed links", DebugLinks(crossedLinks[1])); toModify.Nodes = crossedNodes[0]; toModify.Links = crossedLinks[0]; toReturn.Nodes = crossedNodes[1]; toReturn.Links = crossedLinks[1]; Sucessful = true; //SaveCSV(); return(toReturn); }